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