Можно ли в друпале отрендерить только 1 поле формы?

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

Комментарии

Аватар пользователя Cozmi Cozmi 21 июня 2011 в 0:39

однако почему-то а селекте не устанавливается значение по-умолчанию
делаю

<?php
$form 
= array();
    
$form['pager2'] = array(
        
'#type' => 'select',
        
'#title' => t('page'),
        
'#options' => array('1'=>'1''2'=>'2'), 
        
'#default_value' => '2',
    );
    
$page.=drupal_render($form);
?>

ему побоку(

Аватар пользователя tonyk tonyk 21 июня 2011 в 11:17

> без всяких скрытых полей, токенов просто получить хтмл одного поля.
А смысл?

Так работать не должно. Если хотите вывести только одно поле, поставьте форме свою функцию темизации (ключ #theme) и выводите там только это поле.

Аватар пользователя Cozmi Cozmi 21 июня 2011 в 11:44

т.е. в итоге для генерации такого селекта придется сделать гораздо больше, чем просто задать элемент и отрендерить его?

просто, для формы пишется отдельная ф-я, выводятся левые поля -- иногда нужно просто сделать 1 поле средствами друпала, при этом не писать никаких ф-й темизации. т.к. ф-я темизации, это ф-я которая и отвечает за рендеринг, как я понимаю, хочется написать просто render($element);

Аватар пользователя divined divined 21 июня 2011 в 13:39

А так?

<?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');
?>
Аватар пользователя divined divined 21 июня 2011 в 14:50

echo render(drupal_get_form('newform'));

стилистически не правильно, потому что:
drupal_get_form - внутри себя вызывает рендер и возвращает результат в хтмл.

со скрытыми полями ничего не подскажу, знаю только что они должны быть Smile

И вообще, может вам лучше на существующую форму поля добавлять?
Или в каком другом месте? А может просто:

<?php
$output 
'<select id="myselect">';
$output.= '<option value="1">1</option>';
$output.= '<option value="2" selected="selected">2</option>';
$output.= '</select>';

echo 

$output;
?>
Аватар пользователя Cozmi Cozmi 21 июня 2011 в 15:06

я думал конструкций типа


<?php
$output 
'<select id="myselect">';
$output.= '<option value="1"....?>

пора бы уже ибегать (2011 год на дворе). ибо давайте представим, что например мы хотим поменять выбранный по-умолчанию элемент.

и в друпал 7 код drupal_get_form('newform') вернет массив, а не хтмл код.

Аватар пользователя divined divined 21 июня 2011 в 15:26

Сори, не увидел что 7-ка.

Интересный вы человек, а что по вашему мнению делает вся предыдущая конструкция?
Она тем же самым способом делает такой $output Smile

И что вам мешает выбрать дефолтный элемент? В 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 год не дает нам право делать из улитки слона Smile
Смотрю я на новое поколение программеров и удивляюсь на сколько тяжелее и неповоротливей становится их код по сравнению с 10 летней давностью.

И какой функционал изменения дефолтного элемента вам даст рендер через форму? Smile

Аватар пользователя Cozmi Cozmi 21 июня 2011 в 15:55

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

Аватар пользователя divined divined 21 июня 2011 в 16:13

Я не считаю что Form API придумывали для того чтобы их использовать во всех местах, даже там где формы не нужны. Формы на сайте придуманы только для отправки данных на сервер, вы же не сказали для чего вам это поле! Постите вы его, или еще что с ним делаете Smile
Так как я не экстасенс, предложил более простой и быстрый вариант реализации.
Что кстати и сэкономит Ваше время, потому что (по моему мнению) вы еще не обдумали способ изменения дефолтного значения при выводе селекта формой.

И пожалуйста не реагируйте так бурно на сообщения: "как бык на красное".
Я Вам совет, а вы в первую очередь опровержение. Хоть бы разок "спасибо" сказали за помощь.