it-swarm-eu.dev

Come salvare i campi personalizzati nei componenti principali

Sto cercando di aggiungere un singolo campo semplice a ciascun elemento #__content e ho seguito con molta attenzione il tutorial su Aggiunta di campi personalizzati ai componenti principali , sostituendo "contenuto" con "contatto". Ora ho un plug-in installabile che include correttamente la scheda/campo nel modulo di modifica dell'elemento di contenuto dell'amministratore e funziona meravigliosamente, tranne per quella fastidiosa funzione di "salvataggio".

L'unico riferimento a Salvataggio è (di nuovo, contenuto anziché contatto):

I campi aggiuntivi vengono caricati dal file forms/contact.xml nella directory dei plugin. È importante che questi campi si trovino in un elemento di campi con la proprietà name impostata su "params". Se non si imposta questo nome di proprietà, i campi verranno visualizzati nel sito di amministrazione ma i valori non verranno salvati.

Il fatto che questa nota cautelativa esista, mi suggerisce che Joomla dovrebbe sapere che i campi sono presenti e che il codice principale lo gestisce, ma poiché non sta salvando, mi chiedo se ci sia un altro evento che dovrei aggiungere.

Ecco il semplice campo di cui ho bisogno: invisibile per l'utente, ma critico, e in nessun luogo vicino alla necessità di un CCK di memorizzarlo.
Cosa c'è di sbagliato/mancante che impedisce il salvataggio del campo personalizzato?

Aggiornamento: sperando oltre la speranza che il campo personalizzato fosse archiviato nel database, ho aggiunto una colonna alla tabella #__content con lo stesso nome e ho provato - nessuna fortuna.

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;
    }
}

/forme/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 renderizzato (senza etichetta)

<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>
22
GDP

L'AHA! moment - #__content non ha più la colonna params, quindi le seguenti regolazioni devono essere fatte affinché il plugin funzioni con componenti/tabelle con attribs invece di params (che sembra essere solo #__content dalla v3.2):

  1. Cambia il nome fields in "attribs"
  2. Cambia il nome fieldset in qualcosa di unico (ho usato il nome del plugin)
  3. Aggiungi una stringa di lingua per la scheda nella pagina di modifica del contenuto

/ forme/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"
19
GDP