Cómo guardar campos personalizados en componentes principales


22

Estoy tratando de agregar un campo simple y simple a cada elemento de contenido #__, y he seguido con mucho cuidado el tutorial en Agregar campos personalizados a componentes principales , sustituyendo "contenido" por "contacto". Ahora tengo un complemento instalable que incluye con éxito la pestaña / campo en el formulario de edición del elemento de contenido de administrador, y funciona de maravilla, excepto por esa molesta función de "guardar".

La única referencia a Guardar es (nuevamente, contenido en lugar de contacto):

Los campos adicionales se cargan desde el archivo formularios / contact.xml en el directorio de complementos. Es importante que estos campos estén en un elemento de campos con la propiedad de nombre establecida en "params". Si no establece este nombre de propiedad, los campos aparecerán en el sitio de administración pero los valores no se guardarán.

El hecho de que exista esta nota de advertencia me sugiere que Joomla debería saber que los campos están allí y que el código central lo maneja, pero como no está guardando, me pregunto si debería agregar otro evento.

Aquí está el campo simple que necesito: invisible para el usuario, pero crítico de todos modos, y ni mucho menos la necesidad de un CCK para almacenarlo.
¿Qué está mal / falta que impide que se guarde el campo personalizado?

Actualización: con la esperanza de que el campo personalizado se almacenara en la base de datos, agregué una columna a la tabla de contenido #__ con el mismo nombre e intenté, sin suerte.

gdp.php

class plgContentGdp extends JPlugin {
    protected $autoloadLanguage = true;
    function onContentPrepareForm($form, $data) {
        $app = JFactory::getApplication();
        $option = $app->input->get('option');
        switch($option) {
            case 'com_content':
                if ($app->isAdmin()) {
                    JForm::addFormPath(__DIR__ . '/forms');
                    $form->loadFile('content', false);
                }
                return true;
        }
        return true;
    }
}

/forms/content.xml

<?xml version="1.0" encoding="UTF-8"?>
<form>
    <fields name="params" >
        <fieldset name="params" >
            <field
                name="content_myfield"
                type="text"
                label="PLG_CONTENT_GDP_MYFIELD"
                />
        </fieldset>
    </fields>
</form>

HTML representado (sin la etiqueta)

<div class="tab-pane active" id="attrib-params">
    <div class="control-group ">
        <div class="controls">
            <input
                type="text"
                value=""
                id="jform_params_content_myfield"
                name="jform[params][content_myfield]"
                class=""
                aria-invalid="false"
                >
        </div>
    </div>
</div>

Recuerdo haber visto esto en acción con el nombre del campo NO establecido en params y el campo adicional; pero eso es un poco feo y requerirá algo de mantenimiento después de cada actualización. Por mucho que me guste hacer que este tipo de cosas funcionen, para obtener su resultado, ¿ha considerado usar el enfoque de complemento de perfil de usuario?
Riccardo Zorn

Mis datos son para contenido, no para el usuario ... solo el tutorial es para contactos
PIB

Lo siento, no estaba claro, solo engancha el evento onContentAfterSave y maneja la parte de salvar
Riccardo Zorn

Muchas gracias por esto. He estado tratando de resolver esto durante la mayor parte del día. Soy bastante nuevo en el desarrollo de complementos de Joomla, así que confío en los ejemplos para ponerme en marcha. ¿Puedo confirmar acerca de los archivos de cadena de idioma? ¿Van estos con los archivos de complemento o en la carpeta de idioma existente? ¿O no importa?

Siempre pongo los archivos en el mismo lugar que los colocaría una extensión de Joomla, es decir, la carpeta / languages ​​en este caso.
PIB

Respuestas:


19

El AHA! moment: #__content ya no tiene la paramscolumna, por lo que se deben realizar los siguientes ajustes para que el complemento funcione con componentes / tablas en attribslugar de params(que parece ser solo #__content a partir de v3.2):

  1. Cambie el fieldsnombre a "attribs"
  2. Cambie el fieldsetnombre a algo único (utilicé el nombre del complemento)
  3. Agregue una cadena de idioma para la pestaña en la página de edición de contenido

/forms/content.xml

<form>
    <fields name="attribs" >
        <fieldset name="gdp" >
            <field
                name="myfield"
                type="text"
                label="PLG_CONTENT_GDP_MYFIELD"
                />
        </fieldset>
    </fields>
</form>

en-GB.plg_content_pass.ini

COM_CONTENT_GDP_FIELDSET_LABEL="My Custom Fields"

¿Puedo hacer una pregunta sobre esto aquí? o debería crear una nueva pregunta? está relacionado con esto? Básicamente, necesito saber cómo agregar más de una pestaña a la vista de edición del artículo. Parece que el formulario / extra.xml solo le permite crear una pestaña. Intenté varias variaciones de dividir el archivo xml en conjuntos de campos, pero no tuve suerte. Solo una pestaña.
Jonnypixel

Debe crear una nueva pregunta sobre esto y agregar un enlace a esta pregunta / respuesta si está relacionado.
Bogowoe
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.