it-swarm.com.de

Überschreiben von Kernkomponenten-Modellformular-XML

Ich möchte den Feldtyp für die Links des Artikels von Eingabetext zu Dropdown-Liste mit internen Menüelementen ändern. Ich bin auf der Suche nach einem bequemen Weg, dies mit einem Minimum an Arbeit zu tun.

Ich kann nirgendwo finden, ob es eine Möglichkeit gibt, eine einfache Überschreibung zu erstellen, indem das XML an einem anderen Ort platziert wird. Ist das überhaupt möglich?

Was wäre sonst der beste Ansatz?

3
FFrewin

Der Standardansatz wäre wahrscheinlich, ein Plug-in zu verwenden, um das JForm-Objekt abzufangen, nachdem das XML verarbeitet wurde, aber bevor es das Modell verlassen hat, um Ihre Änderungen vorzunehmen. Ein Beispiel für diese Funktion wäre wie folgt:

function onContentPrepareForm($form, $data)
{
    if (!($form instanceof JForm))
    {
        $this->_subject->setError('JERROR_NOT_A_FORM');
        return false;
    }

    // Check we are manipulating a valid form.
    $name = $form->getName();
    if (!in_array($name, array('com_content.article')))
    {
        return true;
    }

    $form->loadFile('__PATH_ALTERNATE_XML_FILE__');

    return true;
}

loadFile hat standardmäßig den $reset Flag auf true gesetzt. Wenn also Felder mit demselben Namen vorhanden sind, sollten diese durch die neue Version ersetzt werden. Dies würde nicht wie ein regulärer Ausdruck funktionieren, Sie müssten also das gesamte Feld definieren, nicht nur das neue Stück. Es sollte jedoch einfach sein, Ihre separate Datei an einem Ort zu speichern, der von Updates nicht betroffen ist (wie im Plugin-Ordner!).

Wenn dies nicht offensichtlich ist, ist es am besten, dieses Plugin als content zu definieren.

5
David Fritsch

das xml-overrides-plugin klingt ordentlich ( Form XML Override ). Wenn ich das richtig verstehe, willst du das Urla-Feld im ändern, oder? Ich denke, der einfachste Weg ist wahrscheinlich die Verwendung eines SQL-Feldtyps anstelle des Menüfeldtyps ( SQL-Feldtyp ). Ihre Felddefinition könnte etwa so aussehen:

<fields name="urls" label="COM_CONTENT_FIELD_URLS_OPTIONS">
    <field name="urla" type="sql" validate="url"
    filter="url" label="COM_CONTENT_FIELD_URLA_LABEL"
    description="COM_CONTENT_FIELD_URL_DESC" 
    key_field="url" value_field="title"
    query="select concat('index.php?Itemid=', cast(id as char)) url, 
    concat(repeat('    ', (level-1)), menutype,'-',title) as title
    from #__menu where client_id=0 and id != 1 order by menutype, lft"
    ><option value="">-- Select internal menu --</option></field>
</fields>

Dadurch werden alle Site-Menüelemente aufgelistet und eine URL zu jedem Menüelement zurückgegeben. Auf diese Weise erhält das Feld urla (oder urlb oder urlc) einen akzeptierten Wert zurück.

2
jonasfh

Ich habe ein Plugin gefunden, das genau dies tut: Ermöglicht XML-Überschreibungen. Plugin JED Seite ist hier: Form XML Override

Aber ich bin immer noch auf der Suche nach einem benutzerdefinierten Weg, um dies zu erreichen.

Aktualisieren:

Ich habe das Plugin getestet und es funktioniert super. Meine konkrete Idee, das Texteingabefeld für Links durch eine Liste der verfügbaren Menüelemente zu ersetzen, war jedoch nicht ideal, da das Feld nicht den Datentyp speichert, den die Menüelementliste bereitstellt. Für dieses spezielle Bedürfnis sollte ich das anders machen.

1
FFrewin