Добрый день.
Прочел такое мнение, что выполнение SQL-запросов в файлах темизации *.tpl.php Drupal - есть как минимум дурной тон программирования.
Такой вот вопрос.
А если нужно в файле темизации получить данные, а API-функции для этого то ли не существует, то ли её найти не удалось, каким образом тогда поступать ?
Писать свой модуль и в нём уже описывать эту функцию ?
Или для частных случаев это допускается ?
Комментарии
Не бывает таких ситуаций чтоб в файле темизации что-то надо было получать
Если такое происходит значит изначально не правильно спроектировано!
Для всего остального есть preprocess.
Ну, например, возникла ситуация, когда в одном из типов нод нужно было сбоку вывести список элементов меню, родительский элемент которых равен какому-то значению.
В файле node--ТИП_НОДЫ.tpl.php это с помощью SQL-запроса получаю и в цикле вывожу.
Быстро и удобно, хотя и код получается запутанным.
Или как правильно формировать и выводить такие данные ?
Формировать их, к примеру, в ИМЯ_ШАБЛОНА_preprocess_node() и там присваивать результат какой-нибудь переменной, а саму переменную уже выводить в файле tpl.php ?
Сами ответили на свой вопрос
причем второй вариант лучше первого предложенного вами
запрос, размотка массива и запихивание в html зачем это все на шаблоне????
а вообще есть друпаловская функция получения элементов меню нафиг свой запрос писать )))
на препроцессе ее вызываете и делаете с ней всякое.
Подскажите, пожалуйста, какая функция вызывает список дочерних элементов меню, если известен родительский элемент ?
preprocess как бы тоже к темизации относится
есть файл template для всех ваших препроцессов. Можно-ли это считать темизацией вопрос...
Я думаю, здесь нужно рассуждать так.
Если результат SQL-запроса нужен для данной темы и для другой темы не понадобится, то ничего страшного в том, что это будет в template.php, не произойдет.
Для описанной вами ситуации, наверное, лучше сделать модуль, который реализует соответствующий блок, с возможностью кеширования конечного результата. Более простой но менее правильный способ, используя функции API, получить подменю и передать как переменную в MYTHEME_preprocess_node(), если в другой теме это не используется.
Но вообще, лучше в слое темизации управлять только тем, как отображаются данные, а не самими данными.
И уж конечно, никаких mysql запросов в теме быть не должно...