web-dev-qa-db-fra.com

Le nouvel attribut "showon" concerne-t-il uniquement les formulaires back-end?

J'ai essayé d'utiliser l'attribut showon form field dans un formulaire frontal sans résultat de travail.

Même l'exemple cité ne fonctionne pas: https://docs.joomla.org/Form_field#Showon

Est-ce qu'il manque quelque chose? Dois-je inclure un certain script manuellement lorsque je veux l'utiliser dans l'interface?

J'utilise joomla 3.4.1, front-end est un modèle T3, au cas où cela serait important.

Des idées ou des solutions?

EDIT: le formulaire

<?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>

Le gabarit

<?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>

EDIT 2: trouvé une solution dans les fichiers joomla core

si le code de modèle ci-dessus est mis à jour à partir de:

<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>

À:

<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>

ça marche

SOi je suis supposé ajouter manuellement cette partie tout le temps?

Docu ne dit rien à ce sujet, j'ai besoin de charger le fichier cms.js manuellement et de construire le control-grouptag moi-même? Semble étrange

7
Andreas

Je suppose que c’est un problème lié au cœur du système. Votre modèle/Joomla ne charge pas JS pour cette fonctionnalité, il suffit d’ajouter JS /media/jui/js/cms.js dans votre contrôleur où vous chargez le formulaire.

cordialement

2
Lanah

Cela devrait fonctionner aussi longtemps que votre formulaire est généré avec JForm. Si vous créez vous-même le code HTML pour le formulaire, vous devrez peut-être ajouter manuellement le code et le balisage nécessaires. Essayez de rendre le champ en utilisant <?php echo $this->form->renderField('title'); ?> ou, dans le cas contraire, vous pouvez utiliser <?php echo $this->form->renderField($field->fieldname); ?>. Cela semble fonctionner dans mon cas.

2
Bakual