Друк
Категорія: ЧаПи по Joomla
Перегляди: 6616
Неактивна зіркаНеактивна зіркаНеактивна зіркаНеактивна зіркаНеактивна зірка
 

xml spiderДля перевизначення форми JForm через XML файл є ряд плагінів і порад, що зводяться до підвантаження власного XML файла у плагіні в події onContentPrepareForm (Aixeena CCK, ZUNO example) чи навіть раніше, як робить Form XML Override - у onAfterRoute додаванням чогось типу JForm::addFormPath(JPATH_SITE.'/templates/system/forms/'.$option);

Проте ці методи мають одну ваду(а може навпаки, залежить від ситуації) - ваша форма не заміняє оригінальну, але розширює, перевизначає оригінальні поля вашими, додає нові (є проблема з порядком).

Але якщо треба використати свою форму саме замість оригінальної, то треба всього лише зробити $form->reset(true);

Це вб’є оригінальний XML, а тоді вже робити $form->load($yourxml); чи $form->loadFile($path_to_your_xml_file);

Власне просте перевизначення форм реалізовано у плагіні MVC Override, достатньо його встановити і розташувати вашу XML-форму-перевизначник у потрібному місці.

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

 

Старий мій підхід

Здавалося б, достатньо замінити у onContentPrepareForm оригінальний об’єкт на свій

$form = new JForm($my_xml_file_from_path);
$form->loadFile($my_xml_file_from_path);

А індіанська хижа вам! Воно все одно не заміняє форму, а накладає на оригінальну форму вашу.

Тому довелось зробити таку підлість

- ітеративно видалити всі поля ориігнальної форми і лише тоді підвантажити свою. І це спрацювало.

             // Remove all core fields
                foreach ($form->getFieldsets() as $fieldset)
                {
                    $fields = $form->getFieldset($fieldset->name);

                    // Validate the fields.
                    foreach ($fields as $field)
                    {
                        $fieldName = $field->getAttribute('name');
                        $form->removeField($fieldName);
                    }
                }

                // Load overrider form
                $form->loadFile($my_xml_file_from_path, false);

 

Якщо ви помітили помилку, то виділіть фрагмент тексту та натисніть Ctrl+Enter
FaLang translation system by Faboba