私はあなたが必要とする必要なロジックがGroupedForなViewHelperや他の多くを使用して流体で可能であると思います。人は複数のカテゴリを持つことができるので、これはViewhelpersの巨大な入れ子になるので、たとえ可能であってもこれを使用することをお勧めできません。この種の論理はコントローラ、モデル、リポジトリに属します。
このロジックを解決するには複数の方法があります。
/**
* @var \TYPO3\CMS\Extbase\Domain\Repository\CategoryRepository
* @inject
*/
protected $categoryRespoitory = NULL;
/**
* action list
* @return void
*/
public function listAction()
{
$allCategories = $this->categoryRespoitory->findAll();
$categoriesWithContacts = [];
/** @var \TYPO3\CMS\Extbase\Domain\Model\Category $category */
foreach($allCategories as $category) {
$contactsInCategory= $this->contactRepository->findByCategory($category);
if($contactsInCategory->count()>0) {
$categoriesWithContacts[] = [
'category' => $category,
'contacts' => $contactsInCategory
];
}
}
$this->view->assignMultiple([
'categoriesWithContacts' => $categoriesWithContacts
]);
}
ツールをインストールしたり拡張を再インストールでCategoryRespository必要となりますクリアキャッシュを注入:ここは...コントローラに
コントローラをこれを実現する方法の例です。あなたはContactRepositoryでこの機能を必要とする
多分:
<f:for each="{categoriesWithContacts}" as="categoryWithContact">
{categoryWithContact.category.title}
<f:for each="{categoryWithContact.contacts}" as="contact">
{contact.name}
</f:for>
</f:for>
: /**
* @param \TYPO3\CMS\Extbase\Domain\Model\Category $category
* @return array|\TYPO3\CMS\Extbase\Persistence\QueryResultInterface
*/
public function findByCategory(\TYPO3\CMS\Extbase\Domain\Model\Category $category) {
$query = $this->createQuery();
return $query->matching($query->contains('categories', $category))->execute();
}
を次に流体中のあなたはこのような何かを行うことができます