SQL-запросы в файлах темизации

Главные вкладки

Аватар пользователя roman-yrv roman-yrv 15 марта 2013 в 17:22

Добрый день.

Прочел такое мнение, что выполнение SQL-запросов в файлах темизации *.tpl.php Drupal - есть как минимум дурной тон программирования.

Такой вот вопрос.
А если нужно в файле темизации получить данные, а API-функции для этого то ли не существует, то ли её найти не удалось, каким образом тогда поступать ?
Писать свой модуль и в нём уже описывать эту функцию ?
Или для частных случаев это допускается ?

Комментарии

Аватар пользователя glu2006 glu2006 15 марта 2013 в 17:27

Не бывает таких ситуаций чтоб в файле темизации что-то надо было получать Smile
Если такое происходит значит изначально не правильно спроектировано!
Для всего остального есть preprocess.

Аватар пользователя roman-yrv roman-yrv 15 марта 2013 в 17:42

"glu2006" wrote:
Не бывает таких ситуаций чтоб в файле темизации что-то надо было получать :)

Ну, например, возникла ситуация, когда в одном из типов нод нужно было сбоку вывести список элементов меню, родительский элемент которых равен какому-то значению.
В файле node--ТИП_НОДЫ.tpl.php это с помощью SQL-запроса получаю и в цикле вывожу.
Быстро и удобно, хотя и код получается запутанным.

Или как правильно формировать и выводить такие данные ?
Формировать их, к примеру, в ИМЯ_ШАБЛОНА_preprocess_node() и там присваивать результат какой-нибудь переменной, а саму переменную уже выводить в файле tpl.php ?

Аватар пользователя glu2006 glu2006 15 марта 2013 в 18:04

Сами ответили на свой вопрос Smile
причем второй вариант лучше первого предложенного вами
запрос, размотка массива и запихивание в html зачем это все на шаблоне????

а вообще есть друпаловская функция получения элементов меню Smile нафиг свой запрос писать )))
на препроцессе ее вызываете и делаете с ней всякое.

Аватар пользователя roman-yrv roman-yrv 15 марта 2013 в 19:12

"glu2006" wrote:
а вообще есть друпаловская функция получения элементов меню :)

Подскажите, пожалуйста, какая функция вызывает список дочерних элементов меню, если известен родительский элемент ?

Аватар пользователя roman-yrv roman-yrv 16 марта 2013 в 0:50

Я думаю, здесь нужно рассуждать так.
Если результат SQL-запроса нужен для данной темы и для другой темы не понадобится, то ничего страшного в том, что это будет в template.php, не произойдет.

Аватар пользователя bsyomov bsyomov 16 марта 2013 в 3:29

Для описанной вами ситуации, наверное, лучше сделать модуль, который реализует соответствующий блок, с возможностью кеширования конечного результата. Более простой но менее правильный способ, используя функции API, получить подменю и передать как переменную в MYTHEME_preprocess_node(), если в другой теме это не используется.
Но вообще, лучше в слое темизации управлять только тем, как отображаются данные, а не самими данными.
И уж конечно, никаких mysql запросов в теме быть не должно...