Можно ли в друпале отрендерить только 1 поле формы?
20 июня 2011 в 21:00
без всяких скрытых полей, токенов просто получить хтмл одного поля. а?
- Блог
- Войдите или зарегистрируйтесь, чтобы отправлять комментарии
без всяких скрытых полей, токенов просто получить хтмл одного поля. а?
Комментарии
можно
однако почему-то а селекте не устанавливается значение по-умолчанию
делаю
<?php
$form = array();
$form['pager2'] = array(
'#type' => 'select',
'#title' => t('page'),
'#options' => array('1'=>'1', '2'=>'2'),
'#default_value' => '2',
);
$page.=drupal_render($form);
?>
ему побоку(
> без всяких скрытых полей, токенов просто получить хтмл одного поля.
А смысл?
Так работать не должно. Если хотите вывести только одно поле, поставьте форме свою функцию темизации (ключ #theme) и выводите там только это поле.
т.е. в итоге для генерации такого селекта придется сделать гораздо больше, чем просто задать элемент и отрендерить его?
просто, для формы пишется отдельная ф-я, выводятся левые поля -- иногда нужно просто сделать 1 поле средствами друпала, при этом не писать никаких ф-й темизации. т.к. ф-я темизации, это ф-я которая и отвечает за рендеринг, как я понимаю, хочется написать просто render($element);
А так?
<?php
function newform($form_state){
$form=array();
$form['pager2'] = array(
'#type' => 'select',
'#title' => t('page'),
'#options' => array('1'=>'1', '2'=>'2'),
'#default_value' => '2',
);
return $form;
}
echo
drupal_get_form('newform');?>
тогда уж echo render(drupal_get_form('newform'));
всё работает, только есть 3 скрытых ненужных поля
echo render(drupal_get_form('newform'));
стилистически не правильно, потому что:
drupal_get_form - внутри себя вызывает рендер и возвращает результат в хтмл.
со скрытыми полями ничего не подскажу, знаю только что они должны быть
И вообще, может вам лучше на существующую форму поля добавлять?
Или в каком другом месте? А может просто:
<?php
$output = '<select id="myselect">';
$output.= '<option value="1">1</option>';
$output.= '<option value="2" selected="selected">2</option>';
$output.= '</select>';
echo
$output;?>
я думал конструкций типа
<?php
$output = '<select id="myselect">';
$output.= '<option value="1"....?>
пора бы уже ибегать (2011 год на дворе). ибо давайте представим, что например мы хотим поменять выбранный по-умолчанию элемент.
и в друпал 7 код drupal_get_form('newform') вернет массив, а не хтмл код.
Сори, не увидел что 7-ка.
Интересный вы человек, а что по вашему мнению делает вся предыдущая конструкция?
Она тем же самым способом делает такой $output
И что вам мешает выбрать дефолтный элемент? В php коде это делается элементарно.
В нете куча примеров. Типа:
<?php
$output.= '<option value="1" selected="'. ($_POST["any"]=="1")?"selected":"" .'">2</option>';
$output.= '<option value="2" selected="'. ($_POST["any"]=="2")?"selected":"" .'">2</option>';
?>
Ну это так, грубо.
2011 год не дает нам право делать из улитки слона
Смотрю я на новое поколение программеров и удивляюсь на сколько тяжелее и неповоротливей становится их код по сравнению с 10 летней давностью.
И какой функционал изменения дефолтного элемента вам даст рендер через форму?
дело в том что это даже не спор что лучше. просто моей целью является экономия времени и простота восприятия кода. Если апи для этого придумывали, тогда почему бы их и не использовать.
Я не считаю что Form API придумывали для того чтобы их использовать во всех местах, даже там где формы не нужны. Формы на сайте придуманы только для отправки данных на сервер, вы же не сказали для чего вам это поле! Постите вы его, или еще что с ним делаете
Так как я не экстасенс, предложил более простой и быстрый вариант реализации.
Что кстати и сэкономит Ваше время, потому что (по моему мнению) вы еще не обдумали способ изменения дефолтного значения при выводе селекта формой.
И пожалуйста не реагируйте так бурно на сообщения: "как бык на красное".
Я Вам совет, а вы в первую очередь опровержение. Хоть бы разок "спасибо" сказали за помощь.
Спасибо.