it-swarm-es.tech

Separe los campos personalizados en com_content de la pestaña de opciones

Con un complemento de contenido y el activador onContentPrepareForm, inserto campos adicionales personalizados en la página de edición del artículo.

El problema es que mi pestaña de campos personalizados se une con pestaña de opciones del artículo (diseños// joomla/edit/params).

Lo que quiero decir es que cualquier pestaña adicional con forma <fields> que se inyecta con onContentPrepareForm, se "genera" junto con la pestaña "Opciones" (diseño de formulario params/attrib para).

Com_content tiene configuraciones para mostrar/ocultar la pestaña de opciones del artículo (y otras pestañas). Pero mi pestaña personalizada también escucha este show/hide.

Lo que quiero es que las opciones del artículo se configuren en el valor predeterminado del componente en "Opciones" y se oculten para el usuario, mientras se muestra la pestaña de campos personalizados. Pero no tengo éxito hasta ahora.

¿Alguien tiene alguna idea de lo que debo buscar?

1
FFrewin

Obtener toda esa funcionalidad con un complemento será difícil. El sistema de formularios XML que utiliza Joomla para sus formularios/pestañas es bastante complejo en cuanto a cómo se construye. Además, que yo sepa, no hay "eventos" clave en las etapas que le permitan cambiar la forma en que se puede cargar XML (eso y una actualización de Joomla que cambia el nombre de un par de cosas o agrega otro campo lo arruinaría).

Pero aquí está mi pensamiento.

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

Para explicar, primero la expresión regular es encontrar un campo de formulario en la salida actual de la página (esto puede ser uno de su pestaña de opciones). Si encuentra una coincidencia, carga un archivo xml de sus campos y luego los reemplaza con los suyos. Dado que usted ha dicho que tiene cierta distancia, estoy seguro de que esto podría basarse en eso si es que algo.

2
Jordan Ramstad