0 Пользователей и 1 Гость просматривают эту тему.
  • 4 Ответов
  • 753 Просмотров
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
Доброго дня!

Изобретаю динамические поля для своего custom component. Поля создаются в админке.

Сейчас сделал так, что в виде товара создается доп.вкладка куда выводятся все динамические поля с их настройками. Т.е. в модуле товара в функцию getForm вставлена конструкция
Код
$i = 0; // счетчик групп (fieldsets)
        $this->state->set('cake.prop.groupscount',0);
        foreach ($prop->groups as $group) // Перебираем все группы свойств продукта
        {
            $xml_str ='';
            $xml_str .= '<fieldset name="'.$group->alias.'" label="'.$group->title.'">';
            $group_ids = explode(',',$group->set );

            foreach ($group_ids as $group_id) //Перебор id свойств конкретной группы свойств
            {
                $xml_str .= GenerateXMLFieldHelper::getXMLField($prop->props[$group_id]);
            }
            $xml_str .= '</fieldset>';
            //var_dump($prop->props,true);
            $xml = new SimpleXMLElement($xml_str);
            $form->setField($xml);

            $this->state->set('cake.prop.group-'.$i,$group->alias); // Положили в окружение имя группы/fieldset
            $this->state->set('cake.prop.groupscount',$i+1);    // Общий счетчик групп

            $i++;
        }

Следующий шаг прочитать в эти поля значения. Я их получаю в виде массива
и внедряю в в функции getItem
Код
$model_propvalues = JModelLegacy::getInstance( $name = 'Propvalues', $prefix = 'MyCompModel' );  // Взяли модель
            $propvalues = $model_propvalues->getItemsByProductId($item->id); // Получаем значения свойств конкретного продукта

            foreach ($propvalues as $value){
                $f_name = $value->prop_id;
                $f_value = $value->prop_value;
                $item->$f_name = $f_value;
            }

Но значения в форму не присваиваются.

Как сделать так, чтобы поля принимали значения?

П.С.: После успешного вывода пришлось поковыряться с сохранением динамических полей [РЕШЕНО] Сохранение значений полей добавленных динамически элементу
« Последнее редактирование: 11.11.2019, 15:12:20 от platonische »
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
проверил данные в $form(getForm), $item(getItem), $data(loadFormData)
В итоге в $form нет данных о значениях, хотя и в $item и в $data данные(читай значения) для полей есть.

Возможно дело в том что я создал поля после
Код
$form = $this->loadForm( 'com_mycomp.cake', 'cake', array( 'control' => 'jform', 'load_data' => $loadData ) );

Может надо переформировать $form или как-то дополнительно добавить значения?
*

Director.Gq

  • Осваиваюсь на форуме
  • 33
  • 1 / 1
Не знаю то или ни то надеюсь поможет.
Код: php
// Массив или объект с данными.
$data = [ 'field_name' => 'field_value' ];
// Загружаем XML файл.
$form=JForm::getInstance('myform',VMPATH_MY_PLUGIN_VMUPS.DS.'tmpl'.DS.'ru'.DS.'glavpunkt'.DS.'courierAdress.xml');
// Заносим полученные данные в форму.
$form->bind($data);
// rendering Fieldset - a
$viewData =  $form->renderFieldset('feildset_name');

Вы просто Обратите внимание на строчку с bind. $form->bind($data);
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
Нашел $form->setValue, переписал функцию getForm на такое
Код
        $i = 0; // счетчик групп (fieldsets)
        $this->state->set('cake.prop.groupscount',0);
       
->     $name_array = array(); //Массив для сбора имен полей добавленных динамически

        foreach ($prop->groups as $group) // Перебираем все группы свойств продукта
        {
            $xml_str ='';
            $xml_str .= '<fieldset name="'.$group->alias.'" label="'.$group->title.'">';
            $group_ids = explode(',',$group->set );

            foreach ($group_ids as $group_id) //Перебор id свойств конкретной группы свойств
            {
                $xml_str .= GenerateXMLFieldHelper::getXMLField($prop->props[$group_id]);
->            $name_array[] = $prop->props[$group_id]->id; //добавили имя поля в массив
            }
            $xml_str .= '</fieldset>';
            //var_dump($prop->props,true);
            $xml = new SimpleXMLElement($xml_str);
            $form->setField($xml);


            $this->state->set('cake.prop.group-'.$i,$group->alias); // Положили в окружение имя группы/fieldset
            $this->state->set('cake.prop.groupscount',$i+1);    // Общий счетчик групп

            $i++;
        }

->     $item = $this->getItem();
         foreach ($name_array as $name)
        {
            if (isset($item->$name))
            {
                $form->setValue($name,null, $item->$name);
            }
        }

Из всего этого не нравится $item = $this->getItem(); т.к. дергает его повторно. Можно ли как-то обойти повторное дергание?
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
Итак вот результат:
Спойлер
[свернуть]

Если у кого-то есть замечания я бы с удовольствием выслушал. А в целом задача решена.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

[РЕШЕНО] Дублирование при создании

Автор platonische

Ответов: 7
Просмотров: 921
Последний ответ 12.02.2021, 11:24:26
от platonische
[РЕШЕНО] onChange в админке на field modal

Автор platonische

Ответов: 1
Просмотров: 377
Последний ответ 30.01.2021, 16:40:45
от platonische
[РЕШЕНО] Сохранение значений полей добавленных динамически элементу

Автор platonische

Ответов: 30
Просмотров: 2015
Последний ответ 10.11.2019, 15:42:33
от platonische
[РЕШЕНО] curl-файл Joomla $model->save($data) подключение модели администратора

Автор platonische

Ответов: 31
Просмотров: 1306
Последний ответ 30.05.2019, 16:10:57
от sivers
[РЕШЕНО] Создать переменные для сессии в админке

Автор platonische

Ответов: 6
Просмотров: 659
Последний ответ 24.04.2019, 16:15:09
от platonische