Come salvare i campi personalizzati nei componenti principali


22

Sto cercando di aggiungere un singolo campo semplice per ogni 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 - senza 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;
    }
}

/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 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>

Ricordo di averlo visto in azione con il nome del campo NON impostato su params e il campo aggiuntivo; ma è un po 'brutto e richiederà un po' di manutenzione dopo ogni aggiornamento. Per quanto mi piaccia far funzionare questo genere di cose, al fine di ottenere risultati, hai preso in considerazione l'idea di utilizzare l'approccio plug-in del profilo utente?
Riccardo Zorn,

I miei dati sono per i contenuti, non per l'utente ... solo il tutorial è per i contatti
PIL

Mi dispiace non sono stato chiaro, basta agganciare l'evento onContentAfterSave e gestire la parte salvante
Riccardo Zorn,

Grazie mille per questo. Ho cercato di risolvere questo problema per la parte migliore di una giornata. Sono abbastanza nuovo nello sviluppo del plugin Joomla, quindi faccio affidamento sugli esempi per farmi andare avanti. Posso solo confermare i file delle stringhe di lingua: questi vanno con i file del plugin o nella cartella della lingua esistente? O non importa?

Metto sempre i file nello stesso posto in cui li metterebbe un'estensione Joomla, cioè la cartella / languages ​​in questo caso.
PIL,

Risposte:


19

L'AHA! moment - #__content non ha più la paramscolonna, quindi è necessario apportare le seguenti modifiche affinché il plug-in funzioni con componenti / tabelle attribsanziché params(che sembra essere solo #__content a partire dalla v3.2):

  1. Cambia il fieldsnome in "attribs"
  2. Cambia il fieldsetnome 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

/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"

posso fare una domanda al riguardo qui? o dovrei creare una nuova domanda? è legato a questo? Fondamentalmente ho bisogno di sapere come aggiungere più di una scheda alla vista di modifica dell'articolo. Sembra che il form / extra.xml ti consenta di creare solo una scheda. Ho provato diverse varianti di dividere il file XML in set di campi, ma senza fortuna. Solo una scheda.
Jonnypixel,

È necessario creare una nuova domanda a riguardo e aggiungere un collegamento a questa domanda / risposta, se correlati.
Bogowoe,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.