web-dev-qa-db-ja.com

フィルターフォームフィールドをレイアウトに手動でレンダリングする

カスタムコンポーネントのフロントエンドでsearchtoolsフィルターを使用しています。

だから私は私のテンプレートにフィールドを表示しています:

<?php echo JLayoutHelper::render('joomla.searchtools.default', array('view' => $this)); ?>

すべてが正常に動作しますが、モバイルおよびタブレットでは、searchtoolsは検索フィールドのみを表示し、その他すべてを非表示にします。これいらない。カスタムコンポーネントなので、彼の表示を制御する要素にモバイルでもすべてのフィルターを表示したいと思います。

したがって、私はtmpl/default.phpファイルでフィールドを好きなようにレンダリングすることにしました。問題は、レンダリングされているフィールドがないことです。

ここにコードがあります:ビューで:

$this->filterForm = $this->get('FilterForm');
JLog::add('filterform: ' . print_r($this->filterForm, TRUE), JLog::DEBUG, 'com_contract-site-ContractView');

そしてログ

DEBUG 127.0.0.1 com_contract-site-contractview  filterform: Joomla\CMS\Form\Form Object
(
    [data:protected] => Joomla\Registry\Registry Object
        (
            [data:protected] => stdClass Object
                (
                    [list] => stdClass Object
                        (
                            [limit] => 20
                        )
                )
            [initialized:protected] => 
            [separator] => .
        )    
    [xml:protected] => SimpleXMLElement Object
        (
            [fields] => Array
                (
                    [0] => SimpleXMLElement Object
                        (
                            [@attributes] => Array
                                (
                                    [name] => filter
                                )    
                            [field] => Array
                                (
                                    [0] => SimpleXMLElement Object
                                        (
                                            [@attributes] => Array
                                                (
                                                    [name] => search
                                                    [type] => text
                                                    [label] => COM_CONTRACT_CONTRACTS_SEARCH_IN_TITLE
                                                    [hint] => JSEARCH_FILTER
                                                    [class] => js-stools-search-string
                                                )

                                        )

                                    [1] => SimpleXMLElement Object
                                        (
                                            [@attributes] => Array
                                                (
                                                    [name] => published
                                                    [type] => status
                                                    [label] => JOPTION_SELECT_PUBLISHED
                                                    [description] => JOPTION_SELECT_PUBLISHED_DESC
                                                    [onchange] => this.form.submit();
                                                )

                                            [option] => JOPTION_SELECT_PUBLISHED
                                        )
                                    )
                        )
                    [1] => SimpleXMLElement Object
                        (
                            [@attributes] => Array
                                (
                                    [name] => list
                                )

                            [field] => SimpleXMLElement Object
                                (
                                    [@attributes] => Array
                                        (
                                            [name] => limit
                                            [type] => limitbox
                                            [class] => input-mini
                                            [default] => 25
                                            [label] => COM_CONTENT_LIST_LIMIT
                                            [description] => COM_CONTRACT_LIST_LIMIT_DESC
                                            [onchange] => this.form.submit();
                                        )

                                )

                        )

                )

        )

    [repeat] => 
)

だから私はすべてのフィールドを取得しましたが、フィールドはレンダリングされません。

tmpl/default.php

<?php echo $this->filterForm->renderField('search'); ?>
<?php echo $this->filterForm->renderField('published'); ?>
<?php echo $this->filterForm->renderField('clientlist'); ?>

など...

ありがとうございました

1
mixahlos

グループ名をrenderField()の2番目のパラメータとして含めます。例:

echo $this->filterForm->renderField('published', 'filter');
echo $this->filterForm->renderField('limit', 'list');

または、ループを実行する場合:

foreach ($this->filterForm->getGroup('filter') as $field)
{
    echo $field->renderField();
}

また、コンポーネントのフォルダーに/layouts/joomla/searchtools/default.phpのカスタムバージョンを作成し、そこにあるCSSクラスを削除することもできます。フォルダー構造を維持すると、デフォルトのサブレイアウトをコピーすることなくロードできます。

2
Sharky