it-swarm.com.de

Manuelles Rendern von Filterformularfeldern im Layout

Ich verwende die Searchtools-Filter im Frontend einer benutzerdefinierten Komponente.

Daher zeige ich die Felder in meiner Vorlage an:

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

Alles funktioniert einwandfrei, aber auf dem Handy und dem Tablet zeigen die Suchtools nur das Suchfeld an und verbergen alles andere. Ich will das nicht. Ist eine benutzerdefinierte Komponente, so möchte ich alle Filter auch in Mobilgeräten in einem Element anzeigen, das ich über seine Sichtbarkeit kontrolliere.

Also habe ich beschlossen, die Felder in meiner tmpl/default.php -Datei so darzustellen, wie ich es mag. Das Problem ist, dass kein Feld gerendert wird.

Hier ist der Code: In der Ansicht:

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

Und das Protokoll

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] => 
)

Also habe ich alle Felder bekommen, aber es wird kein Feld gerendert.

tmpl/default.php

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

etc ...

Vielen Dank

1
mixahlos

Fügen Sie den Gruppennamen als zweiten Parameter in renderField() ein, z.

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

Oder wenn Sie eine Schleife ausführen möchten:

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

Sie können auch eine benutzerdefinierte Version von /layouts/joomla/searchtools/default.php Im Ordner Ihrer Komponente erstellen und dort die CSS-Klassen entfernen. Wenn Sie die Ordnerstruktur beibehalten, können Standard-Unterlayouts geladen werden, ohne dass diese kopiert werden müssen.

2
Sharky