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

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

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

Тип материала:
Версия Drupal:
0 Спасибо

Комментарии

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

можно

0 Спасибо
Аватар пользователя 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);
?>

ему побоку(

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

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

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

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

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

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

0 Спасибо
Аватар пользователя 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');
?>

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

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

0 Спасибо
Аватар пользователя 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;
?>

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

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


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

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

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

0 Спасибо
Аватар пользователя 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 летней давностью.

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

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

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

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

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

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

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

Спасибо.

0 Спасибо