Ist das neue Attribut 'showon' nur für Back-End-Formulare gültig?

7

Ich habe versucht, das Feldattribut showon form in einem Front-End-Formular ohne Arbeitsergebnisse zu verwenden.

Nicht einmal das hier angegebene Beispiel funktioniert: https://docs.joomla.org/Form_field#Showon

Fehlt etwas, muss ich ein bestimmtes Skript manuell einfügen, wenn ich es im Frontend verwenden möchte?

Ich verwende Joomla 3.4.1, Frontend ist eine T3-Vorlage, falls es darauf ankommt.

Irgendwelche Ideen oder Lösungen?

EDIT: Das Formular

<?xml version="1.0" encoding="utf-8"?>
<form>
    <fieldset name="main">  
        <field name="foo" type="list"  >
            <option value="1">JYES</option>
            <option value="0">JNO</option>
        </field>

        <field name="bar" type="text" showon="foo:1" />

        <field name="foo2" type="text"  />

        <field name="bar2" type="text" showon="foo2:1" />
    </fieldset>  
</form>

Die Vorlage

<?php
defined('_JEXEC') or die('Restricted access');
JHtml::_('behavior.tooltip');
JHtml::_('behavior.formvalidation');

?>

<form action="...>"
      method="post" 
    onsubmit="return false;" 
    name="adminForm" id="adminForm" class="form-validate">
    <div class="form-horizontal adminform">
        <fieldset class="">
            <legend><?php echo 'test'; ?></legend>
                <div class="span6">
                    <?php foreach ($this->form->getFieldset() as $field): ?>
                        <div class="control-group">
                            <div class="control-label"><?php echo $field->label; ?></div>
                            <div class="controls"><?php echo $field->input; ?></div>
                        </div>
                    <?php endforeach; ?>
                </div>
        </fieldset>
    </div>
    <?php echo JHtml::_('form.token'); ?>
</form>

BEARBEITEN 2: Eine Lösung in Joomla-Kerndateien gefunden

Wenn der obige Vorlagencode aktualisiert wurde von:

<div class="span6">
    <?php foreach ($this->form->getFieldset() as $field): ?>
        <div class="control-group">
            <div class="control-label"><?php echo $field->label; ?></div>
            <div class="controls"><?php echo $field->input; ?></div>
        </div>
    <?php endforeach; ?>
</div>

Zu:

<div class="span6">
    <?php foreach ($this->form->getFieldset() as $field): ?>
        <?php
        $class = '';
        $rel = '';
        if ($showon = $field->getAttribute('showon')) {
            JHtml::_('jquery.framework');
            JHtml::_('script', 'jui/cms.js', false, true);
            $id = $this->form->getFormControl();
            $showon = explode(':', $showon, 2);
            $class = ' showon_' . implode(' showon_', explode(',', $showon[1]));
            $rel = ' rel="showon_' . $id . '[' . $showon[0] . ']"';
        }
        ?>
        <div class="control-group<?php echo $class; ?>"<?php echo $rel; ?>>
            <div class="control-label"><?php echo $field->label; ?></div>
            <div class="controls"><?php echo $field->input; ?></div>
        </div>
    <?php endforeach; ?>
</div>

Es klappt

Soll ich diesen Teil die ganze Zeit manuell hinzufügen?

Docu sagt nichts darüber aus, ich muss die Datei cms.js manuell laden und den Control-Grouptag selbst erstellen? Erscheint merkwürdig

Andreas
quelle
Können Sie bitte den von Ihnen verwendeten Code anzeigen?
Lodder
Ich habe das Formular und den tmpl-Code hinzugefügt
Andreas

Antworten:

2

Ich denke, es ist ein Problem im Zusammenhang mit dem Systemkern. Ihre Vorlage / Joomla lädt JS für diese Funktionalität nicht. Fügen Sie einfach JS /media/jui/js/cms.jsin Ihren Controller ein, in den Sie das Formular laden.

Grüße

Lanah
quelle
Das Hinzufügen nur des Skripts funktioniert nicht. Ich muss auch den Code hinzufügen, um das richtige übergeordnete Kontrollgruppendiv zu erstellen, wie in EDIT 2 gezeigt. Keine der Aktionen wird im Dokument beschrieben.
Andreas
2

Es sollte funktionieren, solange Ihr Formular mit JForm erstellt wird. Wenn Sie Ihren HTML-Code für das Formular selbst erstellen, müssen Sie möglicherweise den erforderlichen Code und das Markup manuell hinzufügen. Versuchen Sie, das Feld mit <?php echo $this->form->renderField('title'); ?>oder im Falle des foreach zu rendern, das Sie verwenden könnten. <?php echo $this->form->renderField($field->fieldname); ?> Dies scheint in meinem Fall zu funktionieren.

Bakual
quelle
Ich werde es als Sohn versuchen, wenn ich etwas Zeit habe. Ich generiere das Formular auf die "Standard" Weise, wie in den meisten Tutorials gezeigt. Und ich bin sicher, ich habe es schon einmal benutzt, um es auszuprobieren, und brauchte diese Reifen nicht. Ich vermute (wirklich nur zu diesem Zeitpunkt erraten), dass es mit den Updates zu tun hat. Diese Joomla war einmal eine 3.0 und wurde im Laufe der Zeit auf 3.4 aktualisiert
Andreas
Updates sollten keinen Unterschied machen. Die Verwendung von JForm zum Generieren des Formulars macht jedoch einen Unterschied.
Bakual