Значения радиокнопок не в одной строке

Я создаю форму «список меню шведского стола», в которой есть много опций для радиокнопки «меню». Однако я заметил, что все эти значения являются «встроенными», как в этом примере: http://demo.atk4.com/demo.html?t=14

Сначала я хотел бы знать, как я могу добавить разрыв строки для каждого значения, а затем, как я могу имитировать группы, добавляя своего рода ‹p>‹ / p> между определенными значениями параметров (логическая группировка).

Заранее спасибо!


person fernandojmartin    schedule 14.09.2011    source источник


Ответы (1)


Я могу придумать два решения.

Взгляните на приведенные здесь примеры для вдохновения:

http://agiletoolkit.org/doc/grid/columns

1. Добавление настраиваемого поля в сетку

Сначала создайте форму без разметки:

$form = $this->add('Form',null,null,array('form_empty'));

Затем добавьте сетку в такую ​​форму:

$grid = $form->add('Grid'); // or MVCGrid if you are using models

Добавьте столбец для выбора:

$grid->addColumn('template','selection')
     ->setTemplate('<input type=radio name=selection value="<?$id?>"/>');

Наконец - убедитесь, что столбец «выбор» стоит первым (или последним).

$grid->addOrder()->move('selection','first')->now();

Наконец, вам нужно вручную просмотреть данные POST, потому что это не настоящий столбец формы.

if($form->isSubmitted()){
    $this->js()->univ()->successMessage('Selection is '+((int)$_POST['selection']))
          ->execute();
}

Вы должны помнить, что доступ к POST напрямую подвергает вас атаке с использованием инъекций, и вы должны правильно его проверить. Сетка также ДОЛЖНА быть внутри формы, однако вы можете разместить кнопку отправки в любом месте своей страницы. Вы также можете использовать «Form_Plain», см. Пример на «http://agiletoolkit.org/whatsnew».

2. Использование JavaScript и скрытого поля

В этом примере вы можете добавить несколько элементов Radio button и связать их с формой. Я также использовал здесь «Lister» вместо «Grid», конечно, вы можете комбинировать эти подходы.

$form = $this->add('Form');
$selection = $form->addField('line','selection');
// can be placed anywhere.

$menu = $this->add('MVCLister',null,null,array('view/menu'));
$menu->setModel('MenuItems'); 

$menu->js(true)->find('input[type=radio]')->click(
    $selection->js()->_enclose()->val(
        $this->js()->_selectorThis()->val()
    );
);
// produces $('#menu_id').find('input[type=radio]').click(function(){
//    $('#selection_id').val( $(this).val() );
// }

Ваш файл шаблона view / menu.html может выглядеть так:

<div class="menu-container">
<?rows?><?row?>
    <div><input type="radio" name="anything" value="<?$id?>"> <?$name?> </div>
<?/row?><?/rows?>
</div>

РЕДАКТИРОВАТЬ: код, который работал у Фернандо

$grid->addColumn('template','Menu')
    ->setTemplate('<input type=\'radio\' name=\'selection\' value="<?$value?>"/> <?$value?>');
if($form->isSubmitted()){
    $this->js()->univ()
         ->successMessage('Hoy: <b>'.$_POST['selection'].'</b>')->execute();
}
person romaninsh    schedule 14.09.2011
comment
Я выбрал решение №1, и оно сработало частично: хотя изначально оно работало и показывало идентификатор меню после публикации, когда я расширил его, чтобы использовать само имя меню в качестве ключа, я начал получать нулевое значение при публикации. Это код: $grid->addColumn('template','Menu')->setTemplate('<input type=\'radio\' name=\'selection\' value="<?$name?>"/> <?$name?>'); - person fernandojmartin; 15.09.2011
comment
Хорошо понял. Проблема заключалась в объединении со знаком PLUS, хотя на самом деле это PHP-код, поэтому требовалась DOT. Теперь это работает отлично: $grid->addColumn('template','Menu')->setTemplate('<input type=\'radio\' name=\'selection\' value="<?$value?>"/> <?$value?>'); if($form->isSubmitted()){ $this->js()->univ()->successMessage('Hoy: <b>'.$_POST['selection'].'</b>')->execute(); } - person fernandojmartin; 21.09.2011