حذف عبارت لاگین یا ثبت نام از زیر نظرات در دروپال

حذف عبارت لاگین یا ثبت نام از زیر نظرات در دروپال

حذف عبارت Log in or register to post comments در دروپال

معمولا در پروژه های مختلفی که با دروپال انجام می دهیم با توجه به تفاوت در قالب آنها، نحوه نمایش نظرات نیز متفاوت است. یعنی اینکه نیاز به ایجاد تغییراتی در عناصر نمایشی یک کامنت، امر معمولی در یک سایت دروپالی است.

به همین دلیل قبلا نیز مقاله هایی در این رابطه در دروپالیکا منتشر کرده ام. مقاله «حذف عبارت "تایید نشده" یا "not verified" از نظرات دروپال» در بخش مقاله های متفرقه و مقاله های «تغییر طرز نمایش یک نظر در طراحی تم دروپال» و «تغییر اطلاعات ارسال (نام کاربری و تاریخ) در نظرات و محتوای دروپال» در بخش طراحی پوسته دروپال در این راستا بوده اند.

حذف عبارت Log in or register to post comments در دروپال

در این مقاله روی آموزش تغییر دیگری در نمایش یک نظر تمرکز می کنیم. کاری که می خواهیم انجام بدهیم حذف عبارت «Log in or register to post comments» از زیر نظرات است.

حذف عبارت "برای ارسال دیدگاه وارد شوید یا ثبت نام کنید." در دروپال

زمانی که یک کاربر بتواند نظرات زیر محتوای سایت را ببیند ولی مجوز دسترسی برای ارسال نظر در زیر مطالب را نداشته باشد، این عبارت را در زیر هر نظر مشاهده می کند.

در شکل زیر یک نمونه از آن را می بینید که البته به فارسی ترجمه شده است: «برای ارسال دیدگاه وارد شوید یا ثبت نام کنید.»

حذف عبارت "برای ارسال دیدگاه وارد شوید یا ثبت نام کنید." در دروپال

البته در بسیاری از پروژه ها این عبارت قابل قبول است و بهتر است دیده شود که کاربر سایت بداند با ثبت نام و لاگین در سایت می تواند نظر خود را درباره محتوای سایت ارسال کند. ولی ممکن است در پروژه ای نمایش مکرر این عبارت صورت خوشی نداشته باشد. بنابراین نیاز به حذف آن وجود دارد.

با توجه به اینکه برای انجام هر کاری در دروپال، راه حل های مختلفی وجود دارد، در اینجا فقط به تعداد محدودی از روش هایی که می توان این کار را انجام داد، اشاره می شود. در ادامه چند راه حل برای این موضوع بیان شده است.

حذف عبارت لاگین یا ثبت نام از زیر نظرات در CSS پوسته

یک راه حل ساده و ابتدایی برای عدم نمایش این عبارت از زیر نظرات به کار گیری قابلیت های CSS برای مخفی کردن عبارت است. در این روش، این عبارت به صورت کامل از صفحه حذف نمی شود و در سورس صفحه موجود است ولی با استفاده از تکنیک های CSS ظاهرا نمایش داده نمی شود.

اگر سورس صفحه را بررسی کنیم، می بینیم که این عبارت در قسمت لینک های کامنت قرار دارد. در شکل زیر نیز مشاهده می کنید که درون یک تگ li در لیست links کامنت قرار گرفته و به صورت مشخص دارای یک کلاس است. بنابراین ما نیز از همین کلاس comment_forbidden استفاده می کنیم.

حذف عبارت لاگین یا ثبت نام از زیر نظرات در CSS پوسته

با افزودن چنین کدی به فایل CSS قالب سایت، این عبارت دیگر نمایش داده نمی شود:

.comment_forbidden {
    display: none;
}

یا این کد:

.comment .comment_forbidden {
    display: none;
}

در کد اول به صورت کلی هر تگی که دارای کلاس comment_forbidden باشد، نمایش داده نمی شود. در کد دوم دقیقا مشخص کرده ایم که تگی که دارای همین کلاس است ولی داخل عنصر دیگری با کلاس comment است، مخفی شود.

به این صورت فقط تگ li مذکور مخفی می شود. با توجه به اینکه در این نمونه فقط همین آیتم را در لیست links داریم، می توانیم به صورت کامل تگ ul لینک های کامنت را نیز مخفی کنیم. برای این کار بهتر است از کد زیر استفاده کنیم:

body.not-logged-in .comment ul.links {
    display: none;
}

در این کد از کلاس های تگ body هم استفاده کرده ایم. کلاس not-logged-in زمانی توسط دروپال به تگ body اضافه می شود که صفحه برای بازدید کننده ای که در سایت لاگین نیست، لود شده باشد. بنابراین با این کد CSS بیان کرده ایم که تگ ul لینک های کامنت را در صفحه ای برای یک کاربر ناشناس لود نشده است، مخفی کن.

راه حل های مبتنی بر CSS برای عدم نمایش کامل یک عنصر خصوصا برای چنین عبارت بلندی که به وفور نیز در صفحه تکرار شده است، راه حل مناسبی نیست. در ادامه راه حل هایی برای حذف کامل این عبارت از صفحه را بیان می کنم.

حذف عبارت لاگین یا ثبت نام از زیر نظرات با پیاده سازی تابع قالب template_preprocess_comment

این روش را نیز در پوسته سایت انجام می دهیم. همانطور که می دانید با پیاده سازی تابع های قالب (template functions) در فایل template.php در پوسته سایت می توانیم، تغییراتی را در عناصر نمایشی قسمت های مختلف صفحه در دروپال اعمال کنیم.

تابع قالب template_preprocess_comment را قبلا در مقاله «تغییر اطلاعات ارسال (نام کاربری و تاریخ) در نظرات و محتوای دروپال» معرفی کرده ایم. جایی که می خواستیم به جای username، یک فیلد دیگر را نمایش بدهیم.

در اینجا باز هم می توانیم از این تابع قالب استفاده کنیم. این تابع قادر است تغییراتی را در متغیر هایی که در قالب کامنت نمایش داده می شوند، اعمال کند. این کد را باید در فایل template.php پوسته بنویسیم. در صورتی که نام پوسته (نام فایل .info پوسته) drupalika باشد، نام این تابع به صورت زیر در می آید:

function drupalika_preprocess_comment(&$variables, $hook) {
  unset($variables['content']['links']['comment']['#links']['comment_forbidden']);
}

شما نیز باید نام پوسته خود را جایگزین کنید. این تابع فقط یک خط کد دارد که آن هم عملیات لازم برای حذف آیتم حاوی عبارت مورد نظر ما در لینک های کامنت را انجام می دهد.

با توجه به اینکه این راه حل عبارت را به صورت کامل از سورس صفحه خروجی حذف می کند، راه حل خوبی است. ضمن اینکه استفاده از توابع قالب در پوسته نیز کار بهتری است.

حذف عبارت لاگین یا ثبت نام از زیر نظرات با پیاده سازی هوک hook_comment_view_alter

یک برنامه نویس دروپال به خوبی با هوک های دروپال آشنا است. پیاده سازی هوک ها نیز به تغییر رفتار دروپال کمک می کند. می توانیم باز هم مانند روش قبل در فایل template.php در پوسته سایت دروپالی خود، تابع جدیدی را اضافه کنیم. در این راه حل باید پیاده سازی hook_comment_view_alter کار مورد نظر خود را انجام بدهیم.
نمونه کد زیر این راه حل را نمایش می دهد:

function drupalika_comment_view_alter(&$build) {
  unset($build['links']['comment']['#links']['comment_forbidden']);
}

اگر نام پوسته drupalika باشد، باید تابع drupalika_comment_view_alter را داشته باشیم که فقط همین یک خط کد که در بالا مشاهده می کنید را باید داشته باشد که اجرای عملیات لازم برای حذف آیتم حاوی عبارت مورد نظر ما در لینک های کامنت است.

حذف عبارت لاگین یا ثبت نام از زیر نظرات در فایل comment.tpl.php

در مقاله «تغییر طرز نمایش یک نظر در طراحی تم دروپال» درباره فایل comment.tpl.php که قالب نمایش یک نظر را در دروپال مشخص می کند و حاوی کد های php و html است، مطالبی بیان شده است.

برای حذف عبارت مورد نظر ما می توانیم از طریق افزودن این فایل به پوسته سایت نیز اقدام کنیم. کافی است کد php لازم برای حذف آیتم حاوی عبارت لاگین یا ثبت نام را به این فایل اضافه کنیم.

این کد به صورت زیر است:

[highlightjs_code] unset($content['links']['comment']['#links']['comment_forbidden']); 
[/highlightjs_code]

البته این کد باید قبل از قطعه کد زیر قرار بگیرد:

[highlightjs_code] print render($content['links']) 
[/highlightjs_code]

در این مقاله روش های مختلفی برای حذف عبارت لاگین یا ثبت نام در زیر نظرات دروپال بیان شده است. احتمالا اینها همه راه حل های ممکن در دروپال برای انجام این کار نیست. در صورتی که روش دیگری به نظر شما می آید می توانید در زیر همین مطلب، روش خود را بیان کنید.

ارسال نظر