So speichern Sie benutzerdefinierte Felder in Core-Komponenten


22

Ich versuche, jedem #__content-Element ein einzelnes, einfaches Feld hinzuzufügen, und ich habe das Lernprogramm unter Hinzufügen benutzerdefinierter Felder zu Kernkomponenten , in dem "Kontakt" durch "Inhalt" ersetzt wird, sehr sorgfältig befolgt . Ich habe jetzt ein installierbares Plugin, das die Registerkarte / das Feld im Bearbeitungsformular für Admin-Inhaltselemente erfolgreich enthält 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 Verwaltungswebsite 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, das verhindert, dass das benutzerdefinierte Feld gespeichert wird?

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>

Ich erinnere mich, dass ich dies in Aktion gesehen habe, als der Feldname NICHT auf params gesetzt war und das zusätzliche Feld; Aber das ist ein bisschen hässlich und erfordert nach jedem Upgrade eine gewisse Wartung. So sehr ich es auch mag, diese Art von Dingen zum Laufen zu bringen, haben Sie sich stattdessen überlegt, das Plug-in für Benutzerprofile zu verwenden, um ein Ergebnis zu erzielen?
Riccardo Zorn

Meine Daten sind für den Inhalt, nicht für den Benutzer ... nur das Tutorial ist für Kontakte
GDP

Es tut mir leid, aber ich war mir nicht sicher. Hängen Sie einfach das Ereignis onContentAfterSave ein und übernehmen Sie den Speicherteil
Riccardo Zorn,

Vielen Dank dafür. Ich habe versucht, das für den größten Teil eines Tages zu regeln. Ich bin ziemlich neu in der Entwicklung von Joomla-Plugins, daher verlasse ich mich auf die Beispiele, um mich zum Laufen zu bringen. Kann ich nur die Sprachdateien bestätigen - passen diese zu den Plug-in-Dateien oder zum vorhandenen Sprachordner? oder spielt es keine rolle

Ich habe Dateien immer an der gleichen Stelle abgelegt, an der sie von einer Joomla-Erweiterung abgelegt wurden, in diesem Fall also im Ordner / languages.
BIP

Antworten:


19

Die AHA! moment - #__content hat die paramsSpalte nicht mehr , daher müssen die folgenden Anpassungen vorgenommen werden, damit das Plugin mit Komponenten / Tabellen mit attribsstatt funktioniert params(was ab v3.2 nur noch #__content zu sein scheint):

  1. Ändern Sie den fieldsNamen in "attribs"
  2. Ändern Sie den fieldsetNamen in einen eindeutigen Namen (ich habe den Namen des Plugins verwendet)
  3. Fügen Sie eine Sprachzeichenfolge für die Registerkarte auf der Inhaltsbearbeitungsseite 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-DE.plg_content_pass.ini

COM_CONTENT_GDP_FIELDSET_LABEL="My Custom Fields"

Kann ich hier eine Frage dazu stellen? oder soll ich eine neue frage erstellen? es hängt damit zusammen? Grundsätzlich muss ich wissen, wie man der Artikelbearbeitungsansicht mehr als eine Registerkarte hinzufügt. Es scheint, dass Sie mit forms / extra.xml nur eine Registerkarte erstellen können. Ich habe verschiedene Varianten der Aufteilung der XML-Datei in Feldgruppen ausprobiert, aber kein Glück. Nur eine Registerkarte.
Jonnypixel

Sie sollten eine neue Frage zu diesem Thema erstellen und einen Link zu dieser Frage / Antwort hinzufügen, falls dies im Zusammenhang steht.
Bogowoe
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.