web-dev-qa-db-fra.com

Est-il possible d'afficher les éléments de catégorie dans la liste des catégories

J'écris un thème pour le site de notre équipe et j'utilise actuellement la liste catégor y de com_contact pour afficher une liste des membres de notre équipe. Tous les membres sont dans une seule catégorie appelée "membres de l'équipe". Nous avons une structure organisationnelle. J'ai donc utilisé les champs de tri des contacts pour les trier par couches organisationnelles, comme indiqué ci-dessous:

Teammembers sorted by organizational layer but in single category

Je veux aller un peu plus loin en montrant les titres des couches organisationnelles, ce qui m'a amené à conclure que je ferais mieux d'utiliser une catégorie liste à la place, divisant les membres en sous-catégories distinctes et affichant le contenu (c.-à-d. éléments de contact) à l’intérieur des sous-catégories dans la vue de dessus sous le titre de leur sous-catégorie respective (voir ci-dessous).

Teammembers split into subcategories showing in categories view

Est-il possible de rendre les éléments contenus dans toutes les sous-catégories d'une catégorie parente? Autant que je sache, je ne peux que rendre la sous-catégorie (les titres) eux-mêmes et non leurs enfants?

4
Jan W

Je l'ai finalement résolu moi-même. J'ai modifié mon com_contactcategorydefault_children template pour charger une autre partie du template (appelée catitems):

<?php if ($child->numitems > 0 ) :
    $this->children[$child->id] = $child->getChildren();
    $this->category = $child;
    $this->maxLevel--;
    echo $this->loadTemplate('catitems');
    $this->category = $child->getParent();
    $this->maxLevel++;
endif; ?>

Dans default_catitems J'ai ajouté une requête à la base de données contact_details table pour rassembler tous les contacts avec l'ID de la catégorie actuelle:

<?php
$db = JFactory
::getDbo();
$query = $db->getQuery(true);
$query->select($db->quoteName(array('name', 'alias', 'con_position', 'email_to', 'telephone', 'fax', 'image', 'published', 'access', 'id')));
$query->from($db->quoteName('#__contact_details'));
$query->where($db->quoteName('catid') . ' = '. $db->quote($cat_id));
$query->order('sortname2 ASC');
$db->setQuery($query);

$results = $db->loadObjectList();
?>

Le tri est effectué par sortname2 qui contient les noms de contact avec le nom de famille en premier. Assez moche d'avoir ce code en dur ici, mais je réglerai ça plus tard.

Enfin, j'itère sur $results pour générer ma liste de contacts dans la sous-catégorie, qui est essentiellement un clone du default_items modèle avec des modifications mineures. En fonction du contenu de la liste de contacts, il peut être nécessaire de générer $item->slug dans chaque itération de boucle (ne fait pas partie de la contact_details table):

<?php $item->slug=$item->id .':'. $item->alias; ?>
4
Jan W

Pour Category view dans le fichier default_children.php après le tag <li... ajouter le code:

    <?php

    // Get Category Model data
    $categoryModel = JModelLegacy::getInstance('Category', 'ContactModel', array('ignore_request' => true));

    $categoryModel->setState('category.id', $child->id);
    $categoryModel->setState('list.ordering', 'a.name');
    $categoryModel->setState('list.direction', 'asc');
    $categoryModel->setState('filter.published', 1);

    $contacts = $categoryModel->getItems();

    ?>

Pour Custom Fields ajoute la première ligne après le code précédent et, au cours du cycle, obtient un champ personnalisé pour chaque contact:

JLoader::register('FieldsHelper', JPATH_ADMINISTRATOR . '/components/com_fields/helpers/fields.php');
foreach($contacts as $contactItem) {
    $currentContFields[] = FieldsHelper::getFields('com_contact.contact', $contactItem, true);
}
0
Yegor Kaliberda