我有一个extbase扩展名(TYPO3 7),其中包含一个简单的联系人模型。 这个人有一个名字和一张照片。
到目前为止,这很清楚。
但每个人都有一个类别(例如他工作的地方。办公室,市场营销等)
因此我使用系统类别,如下所述: https://wiki.typo3.org/TYPO3_6.0#Adding_categories_to_own_models_without_using_Extension_Builder
通过网络创建人时>列表,我可以分配一个类别。
现在提出模板的问题: 如果我调试我的联系人,我会得到如下屏幕的输出。
我希望有一个列表,其中显示每个类别(标题)与其联系人。
怎么做? 这个逻辑只在模板中还是在控制器中?
有人为此做过一个例子吗?
祝你好运 马库斯
答案 0 :(得分:1)
我想使用Fluid可以使用GroupedFor ViewHelper和许多其他所需的逻辑。因为一个人可以有多个类别,这将成为Viewhelpers的巨大嵌套,所以即使可能,我也不建议使用Fluid。这种逻辑属于控制器,模型和存储库。
有多种方法可以解决这个问题。 以下是如何在控制器中实现此功能的示例...
控制器:
/**
* @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中使用此功能:
/**
* @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();
}
然后在Fluid你可以这样做:
<f:for each="{categoriesWithContacts}" as="categoryWithContact">
{categoryWithContact.category.title}
<f:for each="{categoryWithContact.contacts}" as="contact">
{contact.name}
</f:for>
</f:for>