web-dev-qa-db-fra.com

Séparez les champs personnalisés dans com_content à partir de l'onglet Options

Avec un plugin de contenu et le déclencheur onContentPrepareForm, j'injecte des champs supplémentaires personnalisés dans la page d'édition de l'article.

Le problème est que mon onglet Champs personnalisés est lié à onglet Options de l'article (layouts// joomla/edit/params).

Ce que je veux dire, c'est que tout onglet supplémentaire avec la forme <fields> qui est injecté avec onContentPrepareForm, il est "généré" en conjonction avec l'onglet "Options" (format de formulaire params/attrib pour).

Com_content a des paramètres pour afficher/masquer l'onglet des options de l'article (et d'autres onglets). Mais mon onglet personnalisé écoute également cette émission/masquage.

Ce que je veux, c'est que les options de l'article soient définies par défaut pour le composant dans "Options" et masquées pour l'utilisateur, tout en affichant uniquement l'onglet Mes champs personnalisés. Mais je n'ai pas de succès jusqu'à présent.

Quelqu'un a-t-il une idée de ce que je devrais rechercher?

1
FFrewin

Obtenir toutes ces fonctionnalités avec un plugin sera difficile. Le système de formulaire xml utilisé par Joomla pour ses formulaires/onglets est assez complexe dans la façon dont il se construit. De plus, à ma connaissance, il n’existe pas d’événements clés à des étapes permettant de changer le formulaire XML chargé (une mise à jour Joomla qui renomme plusieurs éléments ou ajoute un autre champ le ruinerait).

Mais voici ma pensée.

//regex
$regex  = '/\<input[^>]*\stype=\"hidden\"[^>]*\sname=\"jform\[params\]\[plugin\]\"[^>]*\sid=\"jform_params_plugin\"[^>]*\svalue=\"1\"[^>]*\s\/\>/i';

//check for match
if(preg_match($regex,$buffer)){

   //bind an xml form
   $xml = simplexml_load_file(PATH_TO_XML_FILE.'.xml');
   if($form = JForm::getInstance((string)$xml->name,$xml->asXML())){
       $arr = array();
       //here you need to build an array to auto fill the data from the form, 
       //if you already had this working to an extent I am sure it will be fine.
       $form->bind($arr);
   }

   $content = '';
   //here you need to basically get the form fields into content as text to be added to
   //the current output, there are many ways to do this.

   //replace the current output of Joomla to add the extra fields
   $buffer = preg_replace($regex,$content,$buffer);
   JFactory::getDocument()->setBuffer($buffer, 'component');
}

Pour expliquer, l'expression régulière commence par rechercher un champ de formulaire dans la sortie actuelle de la page (il peut s'agir de ceux de l'onglet Options). S'il trouve une correspondance, il charge un fichier XML de vos champs, puis les remplace par les vôtres. Étant donné que vous aviez dit que vous aviez un peu de distance, je suis sûr que cela ne pourrait s’appuyer que sur quoi que ce soit.

2
Jordan Ramstad