Добавить div с классом, как в этом примере, или рендер формы?
Достаточно в саму форму, тогда функция темизации вообще не нужна, и отрендеренная стандартным обработчиком (drupal_get_form),
он получит нужные вид ...
нет названия, нет описания, нет название полей во время ошибок валидации
Да божешь мой я ведь вам не навязываю решение. Ваше решении тоже вполне жизнеспособно ...
Просто показал еще один способ, как можно манипулировать данными ...
PS. Для добавления наименования полей есть атрибут #title
для описания #description
для валидации и указания поля в form_set_error - служит атрибут name -
который по умолчанию равен наименованию элемента массива формы (например mymodule_width).
Комментарии
хочется добавить - и еще инета нет и без клавиатуры
Тут надо слазить в template.php - это там настраивается.
это форма в админке, генерит её мой модуль, template.php, как и css, отпадают
2cosmos, нечего сказать — промолчите
не ради занудства, скажите, почему нельзя использовать CSS?
да можно, просто думал есть возможность сделать это средствами Forms API, какой-нибудь хитрый параметр убирающий div враппер
вообщем получилось задуманное:
форма:
<?php
$form['size'] = array(
'#type' => 'markup',
'#theme' => 'mymodule_size',
);
$form['size']['mymodule_width'] = array(
'#type' => 'textfield',
'#default_value' => variable_get('mymodule_width', 0),
);
$form['size']['mymodule_height'] = array(
'#type' => 'textfield',
'#default_value' => variable_get('mymodule_height', 0),
);
?>
функции темизации:
<?php
$output = '<input type="text" name="'. $form['mymodule_width']['#name'] . '" id="'. $form['mymodule_width']['#id'] .'" value="'. check_plain($form['mymodule_width']['#value']) . '" /> × ';
function mymodule_theme()
{
return array('mymodule_size' => array('arguments' => array('form' => NULL)));
}
function
theme_mymodule_size($form){
_form_set_class($form['mymodule_width'], array());
_form_set_class($form['mymodule_height'], array());
$output .= '<input type="text" name="'. $form['mymodule_height']['#name'] . '" id="'. $form['mymodule_height']['#id'] .'" value="'. check_plain($form['mymodule_height']['#value']) . '" />';
return $output;
}
?>
оперативно решили)
2xxandeadxx
не раз такое делал с помощью css
зачем вы cебе такой геморой придумываете непонятно
)))
на самом деле форма сложнее чем на картинке, и одним css-ом не обойтись
з.ы: кому геморой, а кому экспа
з.ы.ы: популярный модуль data использует такой подход для вывода селектов день/месяц/год
тоже реализовывал css, но приведенный способ интересен) xxandeadxx, пригодится)
статейка с картинками
На орге упоминается помещение элементов в таблицу
Можно и в своём модуле добавить CSS к форме.
Только непонятно зачем так сложно
Достаточно было
<?php
$form['size'] = array(
'#type' => 'markup',
// '#theme' => 'mymodule_size',
'#prefix' => '<div class="container-inline">',
'#suffix' => '</div>',
);
...
?>ax да еще
<?php
$form['size']['mymodule_width'] = array(
'#type' => 'textfield',
'#default_value' => variable_get('mymodule_width', 0),
'#suffix' => ' x '
);
?>
Добавить div с классом, как в этом примере, или рендер формы?
опоздал с вопросом)
мне нет)
Достаточно в саму форму, тогда функция темизации вообще не нужна, и отрендеренная стандартным обработчиком (drupal_get_form),
он получит нужные вид ...
Конечно иначе не писал бы.
Код номер 1: (вставляем прямо в тело ноды, формат ввода PHP)
<?php
);
$form['size'] = array(
'#type' => 'markup',
// '#prefix' => '<div class="container-inline">',
// '#suffix' => '</div>',
$form['size']['mymodule_width'] = array(
'#type' => 'textfield',
'#default_value' => '',
'#suffix' => ' x ',
'#size' => 8,
'#weight' => -10,
);
$form['size']['mymodule_height'] = array('#type' => 'textfield',
'#size' => 8,
'#weight' => -9,
'#default_value' => '',
);
print drupal_render($form);
?>
Получаем
Добавляем закомментированные строки
Получаем
нет названия, нет описания, нет название полей во время ошибок валидации
Не, нормальный вариант, можно использовать. Хороший топик получился)
Да божешь мой я ведь вам не навязываю решение. Ваше решении тоже вполне жизнеспособно ...
Просто показал еще один способ, как можно манипулировать данными ...
PS. Для добавления наименования полей есть атрибут #title
для описания #description
для валидации и указания поля в form_set_error - служит атрибут name -
который по умолчанию равен наименованию элемента массива формы (например mymodule_width).
да всё нормально
только ни #title ни #description у полей типа markup нет