theme_form_element для определённой формы

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

Аватар пользователя oOLokiOo oOLokiOo 17 октября 2012 в 14:24

Доброго времени суток.
Есть в Друпале очень годная функция - theme_form_element()
Собственно вопрос - как её прикрутить к конкретной форме, а не ко всем? в моём случае это user_register_form (форма регистрации).
$form_id в неё не передаётся.
пробовал по разному, и mytheme_user_register_form_form_element и mytheme_form_element_user_register_form, не прокатывает..

Комментарии

Аватар пользователя oOLokiOo oOLokiOo 17 октября 2012 в 17:55

sg85 wrote:
В Вашей ситуации проще определить форму по url

В плане, просто по $_SERVER["REQUEST_URI"] проверять в theme_form_element() ?
Как-то это не правильно ИМХО... Ну к данной ситуации конечно подходит) Но хотелось бы на будущее таки знать, как это можно реализовать

Аватар пользователя sg85 sg85 17 октября 2012 в 18:00

Если форму не вызываете где-то еще, и она имеет всего 1 адрес, то проще всего и определять её по этому самому адресу, что то типа:
<?php
if(strtolower($_GET['q']) == 'user/register'){
...
}
//или
if(arg(0) == 'user' and arg(1) == 'register'){
...
}
?>
в функции, переопределяющей theme_form_element()

В более сложных условиях, можно, например, определить свой элемент, что довольно занудно, вообще способов придумать можно много, от задачи зависит.

Аватар пользователя sg85 sg85 18 октября 2012 в 10:53

Да, кстати, возможно нет нужды вызывать strtolower, когда переменная $_GET['q'] попадет в вашу функцию, она уже будет некоторым образом обработана, в т.ч., на сколько помню, должна быть в нижнем регистре.

Аватар пользователя sg85 sg85 18 октября 2012 в 16:33

Ну тут уж дело вкуса, однако $_SERVER["REQUEST_URI"] еще менее контролируем, нежели $_GET['q'], последняя обрабатывается таким образом, чтобы наименее зависеть от настроек сайта и сервера, в то время как способ с $_SERVER["REQUEST_URI"] может выдавать неприятные сюрпризы в будущем, например, www.example.com?q=path (вариант без чистых ссылок) или www.example.com/path?arg=sample (в других местах возможны доп аргументы), а самое главное www.example.com/lang/path (локализация с использованием префикса, в гет переменной q этот префикс будет убран) и прочие не совсем приятные сюрпризы

Аватар пользователя roman-yrv roman-yrv 7 мая 2014 в 16:25

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

Вообще, на мой взгляд, не совсем верно то, что не передается в theme_form_element, theme_form_element_label и theme_form_required_marker значение form_id.

Аватар пользователя sg85 sg85 12 мая 2014 в 20:17

"roman-yrv" wrote:
Интересно, а если, к примеру, задача такая - на одной странице расположены более одной формы с разным дизайном и для каждой нужно темизировать элементы по своему ?

зависит от ситуации, в особо тяжелых случаях да(такие случаи бывают крайне редко), однако там проще не перехватывать темизацию элементов, а задать полностью свой вывод, используя hook_theme и #theme + #theme_wrappers у элементов формы, но обычно '#suffix', '#prefix', обнуление '#theme_wrappers' и '#attributes' + CSS туда же, для совсем нестандартных для всего остального сайта элементов, за глаза.

"roman-yrv" wrote:
Вообще, на мой взгляд, не совсем верно то, что не передается в theme_form_element, theme_form_element_label и theme_form_required_marker значение form_id.

theme - всего лишь представление. Не нравится общая функция - назначьте свою, хоть с шаблоном, хоть с чем.