it-swarm.dev

Separare i campi personalizzati in com_content dalla scheda opzioni

Con un plug-in di contenuto e il trigger onContentPrepareForm, inserisco campi aggiuntivi personalizzati nella pagina di modifica dell'articolo.

Il problema è che il mio scheda Campi personalizzati si lega con scheda Opzioni articolo (layout// joomla/edit/params).

Ciò che intendo è che qualsiasi scheda aggiuntiva con modulo <fields> che viene iniettato con onContentPrepareForm, viene "generato" insieme alla scheda "Opzioni" (layout del modulo params/attrib per).

Com_content ha impostazioni per mostrare/nascondere la scheda delle opzioni dell'articolo (e altre schede). Ma la mia scheda personalizzata ascolta anche questo show/hide.

Quello che voglio è avere le opzioni dell'articolo impostate sul componente predefinito impostato in "Opzioni" e nascosto per l'utente, visualizzando solo la mia scheda dei campi personalizzati. Ma finora non ho avuto successo.

Qualcuno ha idea di cosa dovrei cercare?

1
FFrewin

Ottenere tutte queste funzionalità con un plugin sarà difficile. Il sistema di moduli xml utilizzato da Joomla per i suoi moduli/schede è piuttosto complesso nel modo in cui si costruisce. Inoltre, per quanto ne so, non ci sono "eventi" chiave nelle fasi che ti permetteranno di cambiare il modulo XML che può essere caricato (che e un aggiornamento di Joomla che rinomina un paio di cose o aggiunge un altro campo lo rovinerebbero).

Ma ecco il mio pensiero.

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

Per spiegare, prima l'espressione regolare sta trovando un campo modulo nell'output corrente della pagina (questo può essere uno dalla scheda delle opzioni). Se trova una corrispondenza, carica un file xml dei tuoi campi e li sostituisce con i tuoi. Dato che avevi detto di avere una certa distanza, sono sicuro che questo potrebbe basarsi solo su questo.

2
Jordan Ramstad