Изменения типа поля формы через хук. Как?

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО
#1 7 августа 2015 в 17:15
Добрый вечер.
Задача — нужно добавить поддержку автокомплита в поле формы. Создаю в типе контента обычное поле string. Затем в своем компоненте создаю хук, content_poster_form.php
Пишу в нем

  1. $form->setFieldAttribute(3, 'place', 'autocomplete', array(
  2. 'multiple' => true,
  3. 'url' => href_to('poster', 'autocomplete')
  4. ));//включаем автокомплит
через var_dump вижу, что изменения внесены, но почему то в блок опций :(

Ради интереса создаю поле кодом в этом же хуке

  1. $fieldset_id = $form->addFieldset( 'Пробное' );
  2. $form->addField($fieldset_id, new fieldString('place', array(
  3. 'hint' => 'Пробное',
  4. 'autocomplete' => array(
  5. 'multiple' => true,
  6. 'url' => href_to('poster', 'autocomplete')
  7. )
  8. )));
и все работает… Как быть?
#2 7 августа 2015 в 17:57
Zau4man, для точной уверенности вам нужно получить всю структуру, потому что id фиелдсетов могут различаться.

  1. $structure = $form->getStructure();
Перебрать ее, найти нужное поле

  1. foreach ($structure as $fs) {
  2. foreach ($fs['childs'] as $f) {
  3. if($f->name == 'place'){
  4. // делаете нужное действие, а именно узнаете id набора
  5. // после чего уже навешиваете автокомплит как вы делали выше
  6. }
  7. }
  8. }
#3 7 августа 2015 в 18:40

изменения внесены, но почему то в блок опций

Zau4man
потому что $form->setFieldAttribute делает это — $field->setOption(), а вам надо что-то что делает $field->setProperty($key, $value)
Пробуйте как сказал Fuze,
  1. foreach ($structure as $fs) {
  2. foreach ($fs['childs'] as $f) {
  3. if($f->name == 'place'){
  4. $f->setProperty('autocomplete', array(
  5. 'multiple' => true,
  6. 'url' => href_to('poster', 'autocomplete')
  7. ))
  8. }
  9. }
  10. }
#4 7 августа 2015 в 20:37
Спасибо большое, все получилось так, как надо.

вам нужно получить всю структуру, потому что id фиелдсетов могут различаться.

Fuze

я собирался сделать это позднее, а также упустил из виду класс formfield.php Надо было не откладывать. Пойду ваять дальше.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.