web-dev-qa-db-ja.com

カテゴリリストにカテゴリアイテムを表示する方法はありますか

私はチームのWebサイトのテーマを書いており、現在com_contactのc​​ategoryリストを使用してチームメンバーのリストを表示しています。すべてのメンバーは、「チームメンバー」と呼ばれる単一のカテゴリに属しています。私たちは組織構造を持っているため、以下に示すように、連絡先の並べ替えフィールドを使用して、組織レイヤーで並べ替えました。

Teammembers sorted by organizational layer but in single category

これをさらに一歩進めて、組織レイヤーのタイトルを表示し、代わりにcategoriesリストを使用して、メンバーを個別のサブカテゴリに分類し、サブカテゴリ内のコンテンツ(つまり、連絡先アイテム)をそれぞれのサブカテゴリタイトルの下にあるトップビューで表示します(以下を参照)。

Teammembers split into subcategories showing in categories view

親カテゴリのすべてのサブカテゴリ内に含まれるアイテムをレンダリングする方法はありますか?私が知る限りでは、サブカテゴリ(タイトル)のみをレンダリングでき、子はレンダリングできませんか?

4
Jan W

ようやく自分で解決しました。 com_contactcategorydefault_childrenテンプレートを変更して、別のテンプレートパーツ(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; ?>

default_catitemsに、現在のカテゴリのIDを持つすべての連絡先を収集するために、contact_detailsテーブルへのデータベースクエリを含めました。

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

並べ替えは、姓を最初に含む連絡先名を含むsortname2によって行われます。ここにハードコードするのはかなり醜いですが、後で修正します。

最後に、$resultsを繰り返し処理して、サブカテゴリに連絡先リストを生成します。これは、基本的には、マイナーな変更を加えたdefault_itemsテンプレートのクローンです。連絡先リストの内容によっては、ループの反復ごとに$item->slugを生成する必要がある場合があります(contact_detailsテーブルの一部ではありません)。

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

ために Category viewファイルdefault_children.phpタグの後<li...コードを追加:

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

    ?>

ために Custom Fields前のコードの後に​​最初の行を追加し、サイクルで各連絡先のカスタムフィールドを取得します。

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