Добавить 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, пригодится)
статейка с картинками![Smile](https://drupal.ru/sites/all/modules/contrib/smiley/packs/kolobok/smile.gif)
На орге упоминается помещение элементов в таблицу
Можно и в своём модуле добавить 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);
?>
Получаем
![](http://www.drupal.ru/files/example-1.jpg)
Добавляем закомментированные строки
Получаем
нет названия, нет описания, нет название полей во время ошибок валидации
Не, нормальный вариант, можно использовать. Хороший топик получился)
Да божешь мой
Просто показал еще один способ, как можно манипулировать данными ...
PS. Для добавления наименования полей есть атрибут #title
для описания #description
для валидации и указания поля в form_set_error - служит атрибут name -
который по умолчанию равен наименованию элемента массива формы (например mymodule_width).
да всё нормально
только ни #title ни #description у полей типа markup нет