Разделяне на логиката от шаблона в Drupal

Със сигурност сте чували за подхода MVC (model-view-controller) в уеб програмирането. Drupal разполага с всички необходими инструменти за прилагане на този подход. В същото време нивото на контролера вече е внедрено в по-голямата си част, т.к двигателят ви предлага да внедрите логиката на приложението под формата на писане на куки код. Просто трябва да отделите логиката (модела) от шаблона (изгледа).

Нека формулираме учебна задача.

На отделна страница на сайта ще покажем таблица с квадрати на числа от някакъв диапазон вътре в [0 ... 1000]. Нека пакетираме това като mymodule.

Създайте раздел и напишете логика

Първо, трябва да декларираме секция, за която използваме hook_menu.

след това части от низа "1" и "20" ще бъдат предадени на функцията за обработка на секции като входни параметри.

Във функцията внедрихме цялата логика: проверихме входните параметри и ги предадохме на шаблона. Но откъде да вземем този шаблон, какви параметри има - Drupal не знае. Нека кажем на Drupal къде са шаблоните. Тази информация се предоставя чрез hook_theme.

Деклариране на шаблони в модул, създаване на шаблонни файлове

Искам да поставя шаблонните файлове в отделна папка на активния скин. Ще има два шаблона: общият шаблон на HTML таблица, който вече използвахме в _mymodule_page(), и шаблонът на реда на таблицата, който ще бъде извикан от първия шаблон за всеки ред от данни при компилирането на таблицата.

В документацията hook_theme има редица опции, които не използваме. Затова не ги изброих.