it-swarm.com.de

So speichern Sie benutzerdefinierte Felder in Core-Komponenten

Ich versuche, jedem #__content-Element ein einzelnes, einfaches Feld hinzuzufügen, und ich habe das Tutorial unter Hinzufügen benutzerdefinierter Felder zu Kernkomponenten sehr sorgfältig befolgt, wobei "Kontakt" durch "Inhalt" ersetzt wird. Ich habe jetzt ein installierbares Plugin, das die Registerkarte/das Feld im Bearbeitungsformular für Admin-Inhaltselemente erfolgreich einschließt und mit Ausnahme dieser lästigen Funktion zum "Speichern" hervorragend funktioniert.

Der einzige Hinweis zum Speichern ist (wieder Inhalt statt Kontakt):

Die zusätzlichen Felder werden aus der Datei forms/contact.xml in das Plugin-Verzeichnis geladen. Es ist wichtig, dass sich diese Felder in einem fields-Element befinden, dessen name-Eigenschaft auf "params" festgelegt ist. Wenn Sie diesen Eigenschaftsnamen nicht festlegen, werden die Felder auf der Verwaltungssite angezeigt, die Werte werden jedoch nicht gespeichert.

Die Tatsache, dass dieser Warnhinweis vorhanden ist, legt für mich nahe, dass Joomla wissen sollte, dass die Felder vorhanden sind, und dass der Kerncode damit umgeht.

Hier ist das einfache Feld, das ich brauche - für den Benutzer unsichtbar, aber dennoch kritisch, und bei weitem nicht die Notwendigkeit eines CCK, es zu speichern.
Was ist falsch/fehlt, um das Speichern des benutzerdefinierten Felds zu verhindern?

Update: In der Hoffnung, dass das benutzerdefinierte Feld in der Datenbank gespeichert wurde, habe ich der Tabelle #__content den gleichen Namen hinzugefügt und versucht - kein Glück.

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>

Gerendertes HTML (ohne das Etikett)

<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

Die AHA! Moment - #__content enthält nicht mehr die Spalte params, daher müssen die folgenden Anpassungen vorgenommen werden, damit das Plugin mit Komponenten/Tabellen mit attribs anstelle von params (welche) funktioniert scheint ab v3.2 nur noch #__content zu sein):

  1. Ändern Sie den fields Namen in "attribs"
  2. Ändern Sie den Namen fieldset in einen eindeutigen Namen (ich habe den Namen des Plugins verwendet)
  3. Fügen Sie eine Sprachzeichenfolge für die Registerkarte auf der Seite zur Inhaltsbearbeitung hinzu

/ forms/content.xml

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

de.plg_content_pass.ini

COM_CONTENT_GDP_FIELDSET_LABEL="My Custom Fields"
19
GDP