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

Аватар пользователя Cozmi

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

Тип материала:
Версия Drupal:
0 Thanks

Комментарии

Аватар пользователя Cozmi
Cozmi 6 лет назад

можно

Аватар пользователя Cozmi
Cozmi 6 лет назад

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

<?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 6 лет назад

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

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

Аватар пользователя Cozmi
Cozmi 6 лет назад

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

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

Аватар пользователя divined
divined 6 лет назад

А так?

<?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');
?>
Аватар пользователя Cozmi
Cozmi 6 лет назад

тогда уж echo render(drupal_get_form('newform'));
всё работает, только есть 3 скрытых ненужных поля

Аватар пользователя divined
divined 6 лет назад

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;
?>
Аватар пользователя Cozmi
Cozmi 6 лет назад

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


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

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

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

Аватар пользователя divined
divined 6 лет назад

Сори, не увидел что 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 летней давностью.

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

Аватар пользователя Cozmi
Cozmi 6 лет назад

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

Аватар пользователя divined
divined 6 лет назад

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

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

Аватар пользователя Cozmi
Cozmi 6 лет назад

Спасибо.