Функції предобработки змінних перед виведенням в шаблон

Всі ми знайомі зі звичайними файлами шаблонів, що виглядають за принципом файл.tpl.php. І всі звикли, що в цьому шаблоні звідкись (магія?) З'являються змінні з даннами. Сьогодні я відкрию цю таємницю: для того, щоб потрапити в шаблон, була придумана функція предобработки змінних. Зазвичай вона виглядає ось таким чином:

  • template - це ім'я теми або модуля (в залежності від того, де реалізуємо функцію)
  • $ Variables - масив з доступними змінними
  • preprocess_что_обрабативаем - власне, назва функції з промовистою назвою :)

Як приклад - в кожній темі є файл page.tpl.php. Функція, яку можна обробити цей файл - template_preprocess_page.

Тут генеруються змінні. Звідки вони беруться - ну, власне, хто звідки :) Головна ідея в тому, що в результаті виходить масив $ variables. елементи якого передаються в шаблон page.tpl.php. Це саме ті змінні, з яких у багатьох людей починалася робота зі своїми темами. Тепер ви знаєте, звідки вони взялися!

Основну ідею, яку я хотів донести - це те, що ці змінні можна змінювати, або додавати свої. Давайте розглянемо декілька прикладів, які наочно показують роботу з функцією template_preprocess_page:

Наприклад, працюємо ми зі стандартною темою Garland. І припустимо, я захотів, щоб у всіх нодах типу news заголовком сторінки ($ title) був текст "Новости". У template.php пишемо такий код:

Тепер на всіх сторінках нод новин, в змінній $ title шаблону page.tpl.php буде красуватися напис "Новости".

Нехай ми працюємо все з тієї ж старої і надійної темою Garland. Але тепер у мене завдання - вивести в блок додаткові класи для css, що характеризують цей блок. За предобработку змінних для блоку відповідає функція template_preprocess_block:

Тепер в block.tpl.php стала доступна змінна $ classes. яку можна використовувати, наприклад, ось так (вміст файлу block.tpl.php):

Ось і вся хитрість. Просто, чи не так?

До речі, за допомогою функцій предобработки можна створювати кастомниє (свої) файли шаблонів. Як приклад - створення окремого шаблону сторінки для різних типів Ноди

Таємний шанувальник написав:

Супер, дякую за статтю.
ПС
user warning: Unknown column 'captcha_type' in 'field list' query: SELECT module, captcha_type FROM captcha_points WHERE form_id = 'comment_form' in /home/u3146/domains/drupalace.ru/sites/all/modules/captcha/captcha.inc on line 60.
user warning: Unknown column 'captcha_type' in 'field list' query: SELECT module, captcha_type FROM captcha_points WHERE form_id = 'user_login_block' in /home/u3146/domains/drupalace.ru/sites/all/modules/captcha/captcha.inc on line 60.

Скажений стопіцоткрил написав:

user warning: Unknown column 'captcha_type' in 'field list' query: SELECT module, captcha_type FROM captcha_points WHERE form_id = 'comment_form' in /home/u3146/domains/drupalace.ru/sites/all/modules/captcha/captcha.inc on line 60.

update.php забув, штоли? = D

Схожі статті