カスタムコンポーネントのフロントエンドで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'); ?>
など...
ありがとうございました
グループ名を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クラスを削除することもできます。フォルダー構造を維持すると、デフォルトのサブレイアウトをコピーすることなくロードできます。