Не зарегистрирован
Вход
Забыли пароль?
Регистрация
Подписаться
Сэкономьте время — перед вопросом на форуме узнайте, как найти ответ быстрее
По техническим проблемам необходимо обращаться в Консультационный центр

Поиск по форуму: 

Приглашаем в блог Amiro.CMS. Регулярные обзоры, опыт, решения, практикумы.

Форум  ->   Разработка плагинов, вопросы по API  ->  Вопросы по компаненте "Форма модуля" в панели управления сайтом

Раздел для разработчиков. Обсуждение создания плагинов, вопросы и пожелания по API Amiro.CMS

Добавлено: 02.03.14 11:44:55 #1



Регистрация: 23.09.10
Сообщений: 5


Обратиться по имени

Добрый день.
Возникла проблема с расположением полей на форме.
В качестве базового класса используется Hyper_AmiClean_FormViewAdm.

Задача такая: есть радиокнопка из двух кнопок, и под каждой из них нужно отобразить по два текстовых поля.
Попробую отобразить символично это.
O radio_1
text_field_1
text_field_2

O radio_2
text_field_3
text_field_4

Когда я добавляю радио кнопку на форму, она у меня отображается одна под другой:
O radio_1
O radio_2

Вот не знаю, как правильно это сделать.
Пока только такая идея. Каким-то образом отдельно получить html полей text_field_1, text_field_2 и полей text_field_3, text_field_4. Переопределить у себя в шаблоне сет для радиокнопок "radio_field_row". В сет добавить переменную, в которую и буду писать полученный ранее html текстовых полей.
Вот если это решение правильное, тогда как мне отдельно получить html текстовых полей?

И второй вопрос, для чего используются секции (метод addSection(...))? Может быть как раз с помощью секций и нужно мне решить свою задачу?

Заранее спасибо за ответы.



Добавлено: 03.03.14 07:47:27 #2



Регистрация: 23.09.10
Сообщений: 5


Обратиться по имени

Еще один вариант, это после загрузки формы "перебросить" поля яваскриптом в нужное место. Но все-таки хотелось бы услышать, как правильно делаются подобные вещи.



Добавлено: 03.03.14 11:13:39 #3

Амиро



Регистрация: 21.03.07
Сообщений: 261


Обратиться по имени

К сожалению, на текущий момент конструктор форм не позволяет добавить одноименное поле дважды (в нашем случае - radio-селектор), поэтому нужно либо перемещать поля, используя JavaScript, либо поступить следующим образом.
В шаблоне формы модуля нужно добавить сет
<!--#set var="radio_field_row(name={$radioFieldName})" value="<input ##disabled## type="radio" id="##id##" name="##name##" ##checked## value="##value##" />&nbsp;&nbsp;<label for="##id##">##caption##</label><br />##extra_fields##"-->

{$radioFieldName} - название поля селектора.

Из кода добавлять поле следующим образом:
$this->addField(
    array(
        'name'     => {$radioFieldName},
        'type'     => 'radio',
        'position' => '...',
        'data' => array(
            array(
                'id'           => 'radio11',
                'value'        => 'radio11',
                'checked'      => ...,
                'caption'      => '', 
                'extra_fields' => {$htmlCode11}
            ),
            array(
                'id'           => 'radio12',
                'value'        => 'radio12',
                'checked'      => ...,
                'caption'      => '', 
                'extra_fields' => {$htmlCode12}
            )
        )
    )
);

{$htmlCode11}, {$htmlCode12} - HTML-код текстовых полей.



Добавлено: 03.03.14 12:07:12 #4



Регистрация: 23.09.10
Сообщений: 5


Обратиться по имени

Именно так и предполагалось делать.
Остался неясный момент, как получить $htmlCode11 с теми полями.
Конечно, можно напрямую вызвать метод шаблонизатора для своих сетов.
Но это не желательно. т.к. решение будет менее устойчивым, чем если бы это было через конструктор форм.
Можно это сделать, используя конструктор форм?
Посмотрел код, пока только напрашивается такая последовательность вызовов:
$this->addField(Array('name' => 'text1', .....));
$htmlCode11 = $this->getFieldHTML('text1');
// убираем его, чтобы конструктор второй раз его не отобразил в своем стандартном местоположении
$this->dropField('text1');




Добавлено: 03.03.14 15:28:44 #5

Амиро



Регистрация: 21.03.07
Сообщений: 261


Обратиться по имени

Использовать можно, но
1. метод AMI_ModFormView::getFieldHTML() пока не заявлен в API;
2. при вызове
$this->dropField('text1');
будут удалены валидаторы поля.

Пока что лучшим решением является перестановка полей на форме с использованием JavaScript.





Создать новую тему

Всего тем: 6661
Всего сообщений: 27851
Всего зарегистрированных пользователей: 26741
Последний зарегистрированный пользователь: user6353089940