Доброго времени суток.
Есть в Друпале очень годная функция - theme_form_element()
Собственно вопрос - как её прикрутить к конкретной форме, а не ко всем? в моём случае это user_register_form (форма регистрации).
$form_id в неё не передаётся.
пробовал по разному, и mytheme_user_register_form_form_element и mytheme_form_element_user_register_form, не прокатывает..
Комментарии
В Вашей ситуации проще определить форму по url
не совсем понял о чем вы
В плане, просто по $_SERVER["REQUEST_URI"] проверять в theme_form_element() ?
Как-то это не правильно ИМХО... Ну к данной ситуации конечно подходит) Но хотелось бы на будущее таки знать, как это можно реализовать
Если форму не вызываете где-то еще, и она имеет всего 1 адрес, то проще всего и определять её по этому самому адресу, что то типа:
<?php
if(strtolower($_GET['q']) == 'user/register'){
...
}
//или
if(arg(0) == 'user' and arg(1) == 'register'){
...
}
?>
в функции, переопределяющей theme_form_element()
В более сложных условиях, можно, например, определить свой элемент, что довольно занудно, вообще способов придумать можно много, от задачи зависит.
Ок, тогда делаю сейчас через проверку на url, спасибо за солюшен!
Да, кстати, возможно нет нужды вызывать strtolower, когда переменная $_GET['q'] попадет в вашу функцию, она уже будет некоторым образом обработана, в т.ч., на сколько помню, должна быть в нижнем регистре.
Спасибо, я просто из $_SERVER["REQUEST_URI"] беру значение, там по-любому будет в нижнем
Ну тут уж дело вкуса, однако $_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 этот префикс будет убран) и прочие не совсем приятные сюрпризы
Интересно, а если, к примеру, задача такая - на одной странице расположены более одной формы с разным дизайном и для каждой нужно темизировать элементы по своему ?
Вообще, на мой взгляд, не совсем верно то, что не передается в theme_form_element, theme_form_element_label и theme_form_required_marker значение form_id.
зависит от ситуации, в особо тяжелых случаях да(такие случаи бывают крайне редко), однако там проще не перехватывать темизацию элементов, а задать полностью свой вывод, используя hook_theme и #theme + #theme_wrappers у элементов формы, но обычно '#suffix', '#prefix', обнуление '#theme_wrappers' и '#attributes' + CSS туда же, для совсем нестандартных для всего остального сайта элементов, за глаза.
theme - всего лишь представление. Не нравится общая функция - назначьте свою, хоть с шаблоном, хоть с чем.