Star InactiveStar InactiveStar InactiveStar InactiveStar Inactive
 

xml spiderTo use own XML-defined Joomla from there are several Joomla plugins or advices. Mostly use the same couple of approaches is used.

You XML file is loaded either onContentPrepareForm (Aixeena CCK, ZUNO example) or even earlier (Form XML Override) - onAfterRoute by just adding a for search path like this JForm::addFormPath(JPATH_SITE.'/templates/system/forms/'.$option);

But these methods have one problem (or benefit, depending on the requirement) - you XML form doesn't replace the original one, but extends it. You can replace, redefine or add new fields, but never to remove a field from the original form. Besides, there is a problem with the order of newly added fields.

If you want to load your form instead of the original one, you must reset it with true parameter $form->reset(true);

This will kill the original XML. After that you are free to do like this  $form->load($yourxml); or this $form->loadFile($path_to_your_xml_file);

This is implemented in MVC Override plugin. Just install and place your override XML in the correct place.

Earlier I was younger and stupid and used a mad trick for this. The trick is found below, but please, don't tell anyone about it, because it's a shame on me.

My old approach

To use your from instead of the original one, you have to use tricks.

The first idea is just to replace the JForm object in onContentPrepareForm with the newly loaded form.

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

Volia - fail. This still doesn't replaces the form, but combines the forms - original and yours.

To replace the original form with yours you must do awful things.

Remove iteratively original form fields and only afte that load you XML.

             // 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);

 

Please register to post comments.

Found a typo? Please select it and press Ctrl + Enter.
FaLang translation system by Faboba
Електронна бібліотека «Exlibris»: історичні дослідження, мемуаристика, публіцистика, художня література Українська етнографія: книги, курси лекцій, статті й матеріали, мапи, фотоальбоми, веб-ресурси Правителі України: портрети, життєписи, матеріали Твори Адріана Кащенка: романтика козацьких часів Народна війна 1917-1932

See a typo?

Select the text block and press

CTRL+Enter

Comments

  • NotificationAry - get emails on Joomla content is submitted, added or changed

    Berndi Berndi 30.06.2019 11:45
    The fields %TO_NAME% and %TO_USERNAME% are empty

    Read more...

     
  • NotificationAry - get emails on Joomla content is submitted, added or changed

    Berndi Berndi 30.06.2019 11:43
    My fault, I made it

    Read more...

     
  • NotificationAry - get emails on Joomla content is submitted, added or changed

    Berndi Berndi 30.06.2019 10:46
    I did. Now I'm asking me how to put the surename into the email... :-|

    Read more...

     
  • NavigationAry - navigate between Joomla menu items like between articles using "prev - next"

    Berndi Berndi 29.06.2019 15:59
    I also miss content in %TO_NAME%

    Read more...

     
  • NotificationAry - get emails on Joomla content is submitted, added or changed

    Berndi Berndi 29.06.2019 15:15
    Hi gruz, I have the problem, that when I use the %AUTHOR% tag, the plugin dosen't send the author ...

    Read more...