it-swarm-es.tech

¿Cómo consultar y mostrar una lista de etiquetas anidadas para un padre particular en el front end como enlaces?

¿Cuál es la mejor manera de consultar la base de datos para generar una lista de etiquetas que coincidan con un elemento primario en particular y mostrarlas en la parte frontal como un enlace con el título y la identificación de la etiqueta?

Esto es para un componente joomla mvc personalizado que utiliza dos campos de etiqueta joomla: "categorías" y "colección".

Una vez que tenga la lista de etiquetas, pasaré la identificación de la etiqueta como una variable a la página con jinput para limitar los resultados en la vista de lista de componentes.

3
user2097091

Para generar una lista de etiquetas, puede tomar el método getTagTreeArray () de la clase JHelperTags como base y modificarlo según sus necesidades; puede completar la matriz resultante no solo con las ID, pero también con los nombres de las etiquetas. Luego, en la interfaz puede usar el método getTagRoute () de la clase TagsHelperRoute para obtener el enlace de la etiqueta.

Espero que esto ayude.

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>';
}

Además, para obtener todas las etiquetas principales ordenadas desde la raíz del formulario hasta el nivel de profundidad actual:

<?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>';
}

Tenga en cuenta: es posible que deba verificar la propiedad publicada, ya que obtendrá todas las etiquetas , incluso las que están en la papelera. 1 está publicado, 0 está oculto, -2 está en la papelera, 2 está archivado.

Ver https://api.joomla.org/cms-3/classes/Joomla.CMS.Router.Route.html también.

0
Marcel