私はチームのWebサイトのテーマを書いており、現在com_contact
のcategoryリストを使用してチームメンバーのリストを表示しています。すべてのメンバーは、「チームメンバー」と呼ばれる単一のカテゴリに属しています。私たちは組織構造を持っているため、以下に示すように、連絡先の並べ替えフィールドを使用して、組織レイヤーで並べ替えました。
これをさらに一歩進めて、組織レイヤーのタイトルを表示し、代わりにcategoriesリストを使用して、メンバーを個別のサブカテゴリに分類し、サブカテゴリ内のコンテンツ(つまり、連絡先アイテム)をそれぞれのサブカテゴリタイトルの下にあるトップビューで表示します(以下を参照)。
親カテゴリのすべてのサブカテゴリ内に含まれるアイテムをレンダリングする方法はありますか?私が知る限りでは、サブカテゴリ(タイトル)のみをレンダリングでき、子はレンダリングできませんか?
ようやく自分で解決しました。 com_contact
category
default_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; ?>
ために 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);
}