it-swarm.com.de

Gibt es eine Möglichkeit, Kategorieelemente in der Kategorienliste anzuzeigen?

Ich schreibe ein Thema für unsere Team-Website und verwende derzeit die Kategorie y aus com_contact, um eine Liste unserer Teammitglieder anzuzeigen. Alle Mitglieder sind in einer einzigen Kategorie mit dem Namen "Teammitglieder". Wir haben eine Organisationsstruktur, daher habe ich die Sortierfelder der Kontakte verwendet, um sie nach Organisationsebenen zu sortieren, wie unten dargestellt:

Teammembers sorted by organizational layer but in single category

Ich möchte noch einen Schritt weiter gehen und die Titel der Organisationsebenen zeigen, was mich zu der Schlussfolgerung führte, dass ich mit einer Kategorie besser dran bin ies stattdessen auflisten, die Mitglieder in separate Unterkategorien aufteilen und den Inhalt (dh die Kontaktelemente) innerhalb der Unterkategorien in der Draufsicht unter den jeweiligen Unterkategorietiteln anzeigen (siehe unten).

Teammembers split into subcategories showing in categories view

Gibt es eine Möglichkeit, die in allen Unterkategorien einer übergeordneten Kategorie enthaltenen Elemente zu rendern? Soweit ich das beurteilen kann, kann ich nur die Unterkategorie (Titel) selbst rendern und nicht deren Kinder?

4
Jan W

Ich habe es endlich selbst gelöst. Ich habe mein com_contactcategorydefault_children Template geändert, um ein anderes Template-Teil (genannt catitems) zu laden:

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

In default_catitems Habe ich der Tabelle contact_details Eine Datenbankabfrage hinzugefügt, um alle Kontakte mit der ID der aktuellen Kategorie zu erfassen:

<?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();
?>

Die Sortierung erfolgt nach sortname2, Das die Kontaktnamen mit dem Nachnamen zuerst enthält. Es ist ziemlich hässlich, das hier fest codiert zu haben, aber ich werde das später beheben.

Schließlich iteriere ich über $results, Um meine Kontaktliste in der Unterkategorie zu generieren, die im Grunde ein Klon der Vorlage default_items Mit geringfügigen Änderungen ist. Abhängig vom Inhalt der Kontaktliste muss möglicherweise in jeder Schleifeniteration $item->slug Generiert werden (ist nicht Teil der Tabelle contact_details):

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

Zum Category view im Ordner default_children.php after tag <li... Code hinzufügen:

    <?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();

    ?>

Zum Custom Fields Füge die erste Zeile nach dem vorherigen Code hinzu und erhalte im Zyklus ein benutzerdefiniertes Feld für jeden Kontakt:

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