web-dev-qa-db-fra.com

Rendre manuellement les champs de formulaire de filtre dans la présentation

J'utilise les filtres des outils de recherche au début d'un composant personnalisé.

J'affiche donc les champs de mon modèle:

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

Tout fonctionne bien, mais dans le mobile et la tablette, les outils de recherche affichent uniquement le champ de recherche et cachent tout le reste. Je ne veux pas ça. Est un composant personnalisé donc je veux afficher tous les filtres même dans mobile dans un élément que je contrôle sa visibilité.

J'ai donc décidé de rendre les champs comme je le souhaite dans mon fichier tmpl/default.php. Le problème est qu'aucun champ n'est en cours de rendu.

Voici le code: Dans la vue:

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

Et le journal

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

Donc, j'ai tous les champs, mais aucun champ n'est rendu.

tmpl/default.php

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

etc ...

Merci

1
mixahlos

Incluez le nom du groupe en tant que second paramètre dans renderField(), par exemple:

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

Ou si vous voulez exécuter une boucle:

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

Vous pouvez également créer une version personnalisée de /layouts/joomla/searchtools/default.php dans le dossier de votre composant et supprimez les classes CSS. Si vous conservez la structure des dossiers, il sera possible de charger les sous-couches par défaut sans avoir à les copier.

2
Sharky