نمایش محتوای یک صفحه (path) در قالبی به جز قالب پیش فرض دروپال

آموزش نحوه تغییر قالب خروجی یک صفحه در دروپال

محتوای هر صفحه دروپال، درون قالب کلی سایت که توسط تم پیش فرض سایت مشخص شده، نمایش داده می شود. در حالت عادی، محتوای داخلی یک صفحه درون ناحیه content که محل آن در تم مشخص می شود، قرار می گیرد.

در فایل page.tpl.php که در تم دروپال پیاده سازی می شود، باید محل نمایش ناحیه ها مشخص باشد. در دروپال 7، برای نمایش محتوای صفحه (مسیر یا path)، محتوای ناحیه content از آرایه $page را به دست می آوریم و نمایش می دهیم:

print render($page['content']);

وقتی که یک ماژول جدید برای دروپال می نویسیم نیز ممکن است از طریق پیاده سازی hook_menu مسیر هایی را در سایت دروپالی ایجاد کنیم. بیشتر این مسیر ها (path ها) به صورت یک صفحه در سایت نمایش داده می شوند. این صفحات نیز همانند سایر صفحات سایت درون قالب کلی دروپال نمایش داده می شوند.

ناحیه content در قالب کلی سایت دروپالی

برای مطالعه نحوه نوشتن یک ماژول ساده برای دروپال و پیاده سازی hook_menu می توانید به مطلب «رنامه نویسی ماژول دروپال در 5 گام ساده» مراجعه کنید.

آیا تاکنون با موقعیتی مواجه شده اید که لازم باشد محتوای صفحه (خروجی مسیر) در قالب کلی نمایش داده نشود؟ مثلا مایل هستید صفحه جدیدی که در ماژول پیاده سازی می کنید، در یک فضای ساده تر و بدون وجود عناصر دیگر صفحه یعنی بلاک ها، منو ها و هر آنچه در تم قرار گرفته است، نمایش داده شود. یا اینکه یک آدرس خاص از سایت را برای انجام عملیات خاصی نیاز دارید و بخواهید خروجی آن را در صفحه پرینت کنید و در جای دیگری آن را پردازش نمائید. در این صورت وجود تمام بلاک ها و منو ها و کد های HTML اضافی، کار شما را سخت و غیر ممکن می سازد.

بنابراین به این نیاز داریم که محتوای صفحه -که در واقع خروجی یک مسیر (path) در دروپال است- را بدون قرار گرفتن آن در قالب تعیین شده توسط تم پیش فرض، در خروجی قرار بدهیم.

راه کاری که در اینجا بیان می شود، مخصوص دروپال 7 است. پس از انتشار دروپال 7، گزینه های جدیدی به اطلاعات یک مسیر که در hook_menu معرفی می شوند، اضافه شده است. گزینه ای که در اینجا به آن نیاز داریم 'delivery callback' است.

گزینه 'delivery callback' در واقع نام تابعی است که خروجی صفحه را برای کاربر/مرورگر ارسال می کند. مقدار پیش فرض این گزینه تابع drupal_deliver_html_page است. این همان تابعی است که خروجی صفحه را درون قالب سایت قرار می دهد.

بنابراین کافی است تابع callback جدیدی بنویسید که صرفاً محتوای صفحه را با استفاده از تابع print در خروجی قرار می دهد.

برای نمونه، ماژولی که در مطلب «برنامه نویسی ماژول دروپال در 5 گام ساده» نوشته شده است را تغییر می دهیم.

تابع زیر را به آن ماژول می افزائیم:

function drupalika_custom_delivery_callback($page_callback_result) {
  print $page_callback_result;
}

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

اکنون گزینه 'delivery callback' مربوط به مسیر 'drupalika/develop' را تغییر می دهیم و مقدار آن را برابر نام تابع بالا قرار می دهیم:

  $items['drupalika/develop'] = array(
    'title' => 'Developing a new module',
    'page callback' => 'drupalika_develop_page',
    'delivery callback' => 'drupalika_custom_delivery_callback',
    'access callback' => TRUE,
  );

نمونه خروجی مسیر 'drupalika/develop' را مشاهده می کنید که صفحه سفیدی است که صرفاً محتوای خروجی مسیر را نمایش می دهد و از بلاک ها و منوها و تگ های دیگر خبری نیست:

نمایش خروجی دروپال در صفحه بدون قالب کلی سایت

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

ارسال نظر