создание формы Dynami c для отображения в представлении администратора - PullRequest
0 голосов
/ 12 февраля 2020

Я нахожусь на компоненте, где я хочу, чтобы пользователь добавил свои собственные поля в качестве параметров для другой записи.

Например, у меня есть представление Product (администратор / компоненты / com_myproducts / views / product / ... ). Это представление получит название, псевдоним и описание своей формы (администратор / компоненты / com_myproducts / models / forms / product. xml). Форма xml - это stati c, но я хочу, чтобы пользователи сами добавляли атрибуты продукта.

Поэтому я добавляю еще одно представление Атрибуты, где пользователи могут добавлять записи с именем и типом поля .

Теперь я хочу, чтобы эти атрибуты были добавлены в форму продукта. Таким образом, это в основном выборка атрибутов из базы данных, загрузка формы XML, добавление атрибутов к XML и подача измененного XML в объект JForm для возврата его в модели Product getForm ().

В модели Product это будет выглядеть примерно так:


    public function getForm($data = array(), $loadData = true)
    {
        // Get the form.
        $form = $this->loadForm(
            'com_myproducts.product',
            'product',
            array(
                'control' => 'jform',
                'load_data' => $loadData
            )
        );

        $xml = $form->getXML();
        $attributes = $this->getAttributes();

        $newForm = Helper::manipulateFormXML($xml, $attributes);

        /*
         * load manipulated xml into form
         * don't know what to do here
         */

        ...

        if (empty($form)) {
            return false;
        }

        return $form;
    }

Как я могу обновить форму с измененным xml или мне следует подойти к этому по-другому?

1 Ответ

0 голосов
/ 13 февраля 2020

Я нашел способ обойти проблему, создав новый экземпляр формы.

    public function getForm($data = array(), $loadData = true)
    {
        // Get the form.
        $tmp = $this->loadForm(
            'com_myproducts.tmp',
            'product',
            array(
                'control' => 'jform',
                'load_data' => $loadData
            )
        );

        $xml = $tmp->getXML();
        $attributes = $this->getAttributes();

        $newXml = Helper::manipulateFormXML($xml, $attributes);

        // Get the form.
        $form = $this->loadForm(
            'com_myproducts.product',
            $newXml->asXML(),
            array(
                'control' => 'jform',
                'load_data' => $loadData
            )
        );

        if (empty($form)) {
            return false;
        }

        return $form;
    }

Я не удовлетворен этим решением, но оно делает то, что я хочу.

...