web-dev-qa-db-ja.com

新しい 'showon'属性はバックエンドフォーム専用ですか?

フロントエンドフォームでshowonフォームフィールド属性を使用してみましたが、機能しませんでした。

ここに示した例でも機能しません: https://docs.joomla.org/Form_field#Showon

不足しているものはありますか?フロントエンドで使用する場合、特定のスクリプトを手動で含める必要がありますか?

私はjoomla 3.4.1を使用しています。問題がある場合に備えて、フロントエンドはT3テンプレートです。

アイデアや解決策はありますか?

編集:フォーム

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

テンプレート

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

編集2:joomlaコアファイルで解決策を見つけました

上記のテンプレートコードが次のように更新された場合:

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

できます

だから私はいつもこの部分を手動で追加することになっていますか?

Docuはこれについて何も述べていません、私は手動でcms.jsファイルをロードして自分でcontrol-grouptagを構築する必要がありますか?奇妙に見える

7
Andreas

それはシステムコアに関連する問題だと思います、あなたのテンプレート/ Joomlaはその機能のためにJSをロードしません、ただJSを追加します/media/jui/js/cms.jsフォームをロードするコントローラ内。

よろしく

2
Lanah

JFormを使用してフォームが生成されている限り、機能します。フォームのHTMLを自分で作成する場合、必要なコードとマークアップを手動で追加する必要がある場合があります。 <?php echo $this->form->renderField('title'); ?>を使用してフィールドをレンダリングしてみてください。または、foreachの場合は<?php echo $this->form->renderField($field->fieldname); ?>を使用できます。これは私の場合はうまくいくようです。

2
Bakual