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

Пнд, 20/06/2011 - 17:00

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

0 Спасибо

Комментарии

Аватар пользователя Cozmi
5 лет 7 months назад Cozmi #

можно

0 Спасибо
Аватар пользователя Cozmi
5 лет 7 months назад Cozmi #

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

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

ему побоку(

0 Спасибо
Аватар пользователя tonyk
5 лет 7 months назад tonyk #

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

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

0 Спасибо
Аватар пользователя Cozmi
5 лет 7 months назад Cozmi #

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

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

0 Спасибо
Аватар пользователя divined
5 лет 7 months назад divined #

А так?

<?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');
?>

0 Спасибо
Аватар пользователя Cozmi
5 лет 7 months назад Cozmi #

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

0 Спасибо
Аватар пользователя divined
5 лет 7 months назад divined #

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;
?>

0 Спасибо
Аватар пользователя Cozmi
5 лет 7 months назад Cozmi #

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


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

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

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

0 Спасибо
Аватар пользователя divined
5 лет 7 months назад divined #

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

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

0 Спасибо
Аватар пользователя Cozmi
5 лет 7 months назад Cozmi #

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

0 Спасибо
Аватар пользователя divined
5 лет 7 months назад divined #

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

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

0 Спасибо
Аватар пользователя Cozmi
5 лет 7 months назад Cozmi #

Спасибо.

0 Спасибо