web-dev-qa-db-fra.com

Comment obtenir une liste non ordonnée de balises d'article dans la vue de blog de catégorie?

Je travaille sur un remplacement pour com_content catégorie vue de blog et nécessite une liste non ordonnée de balises d’article dans blog.php. Chaque balise doit être enveloppée dans un <li>

<li>[tag]</li>
<li>[tag]</li>
<li>[tag]</li>
<li>[tag]</li>

Après une recherche intense, j'ai trouvé le code suivant:

<select>
            <option value=""><?php echo JText::_('JOPTION_SELECT_TAG'); ?></option>
            <?php echo JHtml::_('select.options', JHtml::_('tag.options', true, true), 'value', 'text', $this->state->get('filter.tag')); ?>
</select>

ce qui me donne une liste déroulante pour toutes les balises.

Screenshot

Comment puis-je le changer pour une liste non ordonnée?

Mise à jour:

J'ai beaucoup joué mais je n'arrive pas à avoir la liste de balises en haut de mon blog de catégorie. Le code de johanpw fonctionne, mais uniquement pour chaque article, afin d’obtenir des doublons. Existe-t-il un moyen d'obtenir chaque étiquette d'article de la catégorie/sous-catégorie sélectionnée une seule fois dans une liste?

Peut-être que cela doit être fait par un template tel que le template blog_children.php pour rendre toutes les balises qui seront ensuite chargées dans le blog.php.

Mes compétences de codage sont trop faibles pour résoudre ce problème :(

2
Peter Reill

Eh bien, si je vous ai bien compris, vous souhaitez afficher dans vos pages de blogs de catégories différentes, toutes les balises impliquées dans ces catégories. Je dirais que vous feriez mieux d'utiliser un module pour afficher les balises dans votre page de blog. Vous devrez trouver ou développer quelque chose qui offre la possibilité de filtrer par catégories - vous n'êtes pas sûr qu'il en existe déjà une. Faites une recherche dans JED for Tags Modules, vous avez peut-être de la chance.

Cependant, voici une solution rapide et plutôt sale.

Pour chaque page de blog de catégorie, vous pouvez rassembler toutes les balises des articles contenus en utilisant les éléments suivants:

  1. En plus du fichier, commencez par:

    $tags = array();
    
  2. Dans la liste des articles principaux, juste en dessous de $this->item = & $item;:

    $this->item = & $item;
    foreach ($this->item->tags->itemTags as $itemTag) {
        $tags[$itemTag->title] = $itemTag;
    }
    echo $this->loadTemplate('item');
    
  3. Même code dans le foreach des articles d'intro:

    $this->item = & $item;
    foreach ($this->item->tags->itemTags as $itemTag) {
        $tags[$itemTag->title] = $itemTag;
    }
    echo $this->loadTemplate('item');
    
  4. Vous avez maintenant terminé avec un tableau de $tags.

    Vous pouvez maintenant parcourir le tableau pour obtenir toutes les balises présentes dans les articles disponibles dans cette page de blog.

    <div id="tagsListBox" class="tagsListBox">
        <ul id="tagsList" class="tagsList">
            <?php 
            foreach ($tags as $tag) { ?>
                <li><?php echo $tag->title; ?></li>
            <?php } ?>
        </ul>
    </div>
    

Enveloppez votre liste dans une div et donnez à vos éléments des identifiants et des classes spéciaux, afin de pouvoir la positionner où vous voulez dans la page, en utilisant des CSS spéciaux. Placez-le en dehors de l’une quelconque des boucles foreach des articles principaux/d’introduction, par exemple. au-dessus du début de la section de liens des articles: <?php if (!empty($this->link_items)) : ?>

Encore une fois, ce n’est pas la solution la plus élégante, mais pourrait vous donner ce que vous voulez jusqu’à trouver quelque chose de mieux.

0
FFrewin

Essayez le code suivant et voyez si cela vous donne le résultat souhaité:

<ul>
  <?php foreach ($this->item->tags->itemTags as $tag) : 
    echo "<li>" . $tag->title . "</li>"; 
  endforeach; ?>
</ul>

Remplacer $tag->title avec $tag->alias si vous préférez afficher l'alias.

3
johanpw