web-dev-qa-db-fra.com

Comment interroger et afficher une liste de balises imbriquées pour un parent particulier sur le front-end sous forme de liens?

Quel est le meilleur moyen d'interroger la base de données pour générer une liste de balises correspondant à un parent particulier et s'afficher sur le serveur sous forme de lien avec le titre et l'ID de balise?

Cela concerne un composant joomla mvc personnalisé qui utilise deux champs de balise joomla: "categories" et "collection".

Une fois que j'ai la liste des balises, je passerai ensuite l'identifiant de balise en tant que variable à la page avec jinput pour limiter les résultats dans la vue liste des composants.

3
user2097091

Pour générer une liste de balises, vous pouvez utiliser la base getTagTreeArray () de JHelperTags class et la modifier pour répondre à vos besoins - vous pouvez renseigner le tableau résultant non seulement avec les ID, mais aussi avec les noms de balises. Ensuite, vous pouvez utiliser la méthode getTagRoute () de TagsHelperRoute class pour obtenir le lien de la balise.

J'espère que cela t'aides.

3
Dmitry Rekun
<?php
defined('_JEXEC') or die; // Joomla
$parent_tag_id=12345; // your tag id here
JLoader::register('TagsHelperRoute', JPATH_BASE . '/components/com_tags/helpers/route.php');
$tags_tree=JTable::getInstance('Tag', 'TagsTable')->getTree($parent_tag_id);
// Show children:
foreach($tags_tree as $tags_tree_id=>$tags_tree_item) {
    echo 'DEBUG: ';
    echo ' id:'    . $tags_tree_item->id;
    echo ' level:' . $tags_tree_item->level;
    echo ' path:'  . $tags_tree_item->path;
    $link=TagsHelperRoute::getTagRoute($tags_tree_item->id . ':' . $tags_tree_item->path);
    echo ' link: ' . JRoute::_( $link, true, 1);
    echo '<br>';
}

De plus, pour que toutes les balises parentes commandées soient classées de la racine au niveau de profondeur actuel:

<?php
defined('_JEXEC') or die; // Joomla
$tag_id=12345; // your tag id here
$parent_tags=JTable::getInstance('Tag', 'TagsTable')->getPath($tag_id);
// Show parents and self:
foreach($parent_tags as $parent_tags_id=>$parent_tags_item) {
    echo 'DEBUG: ';
    echo ' id:'        . $parent_tags_item->id;
    echo ' level:'     . $parent_tags_item->level;
    echo ' path:'      . $parent_tags_item->path;
    echo ' published:' . $parent_tags_item-->published;
    echo '<br>';
}

Remarque: vous devrez peut-être vérifier la propriété publiée, car vous obtiendrez toutes les balises , même celles qui sont supprimées. 1 est publié, 0 est caché, -2 est mis à la corbeille, 2 est archivé.

Voir https://api.joomla.org/cms-3/classes/Joomla.CMS.Router.Route.html également.

0
Marcel