it-swarm.com.de

Wie verwende ich ein benutzerdefiniertes Layout mit JForm-Unterformularfeldern?

Ich möchte einige Formulare in meiner Komponente wiederverwenden. Das Unterformularfeld erledigt den Job. Ich muss jedoch einige Felder und/oder Feldgruppen entfernen, wenn das Unterformular angezeigt wird.

Ich habe versucht, die JForm -Methoden removeGroup() und removeField() zu verwenden, sie werden jedoch nicht aus dem Unterformular entfernt.

Ich denke, ein neues Layout ist der richtige Weg. Ich könnte das Layout im Feld anstelle von layout='joomla.form.field.subform.default' Angeben.
Würde das funktionieren?

Wenn ja, wie implementiere ich das benutzerdefinierte Layout?
Beispiele wären sehr willkommen.

5
nimble

So platzieren Sie ein Unterformular (Joomla! 3.6+) in einem anderen "Master" -Formular und verwenden ein benutzerdefiniertes Layout:

1) Verwenden Sie in der Master-JForm-XML-Datei den Feldtyp Unterformular.

<field name= "fieldname"
    description= "Field name description"
    type= "subform"
    label= "Field Label"
    required= "true"
    formsource= "/administrator/components/com_mycomponent/models/forms/myform.xml"
    layout="myfolder.mylayoutfile"
/>

formsource ist der Pfad zum zu rendernden JForm-XML-Unterformular.

layout ist der Pfad für die Punktnotation zur benutzerdefinierten Layoutdatei. Sie müssen einen Ordner "layouts" in der Verzeichnisstruktur Ihrer Komponente haben. Es wäre also com_mycomponent/layouts. Unter dem Ordner layouts können Sie weitere Ordner anlegen (falls Sie dies wünschen). Im obigen Beispiel ist "myfolder" ein Ordner unter "layouts" und "mylayoutfile" die benutzerdefinierte PHP Layoutdatei in diesem Ordner. Geben Sie in der Punktnotation nicht "layouts" an Pfad und fügen Sie dem Dateinamen nicht .php hinzu.

2) Dies ist ein Beispiel-Layout PHP Datei, die für Ihre Zwecke geändert werden kann.

<?php
defined('_JEXEC') or die;
extract($displayData);

$form = $forms[0];
?>

<div class="subform-wrapper">
    <?php foreach($form->getGroup('') as $field): ?>
        <?php echo $field->renderField(); ?>
    <?php endforeach; ?>
</div>
2
nimble

Bearbeitet, um eine feldtypspezifische Antwort für Unterformulare hinzuzufügen:

Wenn Sie es richtig betrachtet haben, können Sie ganz einfach Ihr eigenes Layout an den Teilformular-Feldtyp anhängen.

Erstellen Sie einen layouts -Ordner im selben übergeordneten Komponentenordner (Site oder Administrator) wie die XML-Datei und fügen Sie Ihr Layout ein:

-com_myComponent 
    - controllers
    - layouts
        - mylayout.php
    - models
        - forms

Fügen Sie layout="mylayout" Zu Ihrem Teilformularfeld in Ihrem XML hinzu und los geht's.

Einfacher geht es nicht!

Sollten Sie auch beachten, dass die Namen Ihrer Layout-Dateien mit denen der Standarddateien identisch sein können, werden Ihre immer geladen, wenn Konflikte auftreten. Obwohl es zum Beispiel ein Unterformularlayout mit dem Namen default.php Gibt, können Sie Ihr default.php Trotzdem benennen, und es funktioniert einwandfrei.

Antwort vor der Bearbeitung:

Hier ist ein Beispiel, wie Sie ein Layout aus einem meiner Layouts einfügen können:

<?php echo JLayoutHelper::render('layouts.dupebutton', $dupeData, JPATH_COMPONENT_ADMINISTRATOR); ?>
  • Das erste Argument lautet 'layoutFolder.layoutName'.
  • Das zweite Argument sind die Daten, die an das Layout übergeben werden sollen (Sie übergeben Ihr Formular/Ihre Felder).
  • Der dritte Pfad ist der Basispfad für die Suche nach dem Layoutordner/der Layoutdatei (in diesem Fall der Pfad zur Administratorinstallation meiner Komponente).

Sie müssen etwas Ähnliches hinzufügen, wenn Ihr Layout gerendert werden soll.

Mein com_myComponent Ordner in Joomlas administrator Ordner (dh JPATH_COMPONENT_ADMINISTRATOR) Hat diese Struktur:

-com_myComponent 
    - classes
    - controllers
    - layouts
        - dupebutton.php
        - anotherlayout.php

Der Layout-Helfer von Joomla übergibt die von Ihnen angegebenen Daten beim Rendern an das Layout. Wenn das Layout gerendert wird, enthält es eine vorab zugewiesene Variable mit dem Namen $displayData. Sie können diese Variable einfach so wie sie ist verwenden, aber es scheint eine Joomla-Konvention zu sein, diese Zeile in die <?php - Tags oben in Ihren Layoutdateien einzufügen:

$data = $displayData;

Jetzt müssen Sie nur noch das Layout mit den gewünschten Formularfeldern erstellen. Lassen Sie es mich wissen, wenn Sie auch Beispiele dafür möchten, aber es hört sich so an, als ob Sie bereits wissen, wie.

Im Übrigen bin ich mir ziemlich sicher, dass es tatsächlich möglich ist, aus Formular-Untergruppen auszuwählen, aber die Syntax ist nicht sehr intuitiv oder gut dokumentiert - das letzte Mal, als ich es versuchte, gab ich es auf, so wie Sie es jetzt sind.

Es gibt auch mehrere Möglichkeiten, um das zu erreichen, was Sie wollen. Es gibt Alternativen zur Verwendung eines Layouts. Trotzdem ist es eine so gute Lösung wie jede andere, also bleibe ich dabei.

4
chrBrd