2017-01-31 4 views
0

私はエクステンションエクステンション(TYPO3 7)に連絡先の簡単なモデルを持っています。 人は名前と画像を持っています。システムカテゴリのリストビューのテンプレート

ここまではっきりしています。

しかし、すべての人のカテゴリがある

そのため、ここで説明したように、私は、システムカテゴリを使用します(彼の作品などをオフィス、マーケティングなど。): https://wiki.typo3.org/TYPO3_6.0#Adding_categories_to_own_models_without_using_Extension_Builder

Web経由で人を作成する場合>リスト、私はカテゴリを割り当てることができます。

テンプレートの質問 私の連絡先をデバッグすると、以下のような画面が表示されます。

enter image description here

私はすべてのカテゴリ(見出し)は、それの担当者に示されているリストを持っていると思います。

これを行う方法? このロジックはテンプレート内かコントローラー内のみにありますか?

誰かがこれの例ですか?

敬具 マルクス

答えて

1

私はあなたが必要とする必要なロジックが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(); 
} 

を次に流体中のあなたはこのような何かを行うことができます

関連する問題