src/Document/Areabrick/SsFilterGrid.php line 14

Open in your IDE?
  1. <?php
  2. namespace App\Document\Areabrick;
  3. use Pimcore\Model\Document;
  4. use Pimcore\Model\Document\Editable\Area\Info;
  5. use Symfony\Component\HttpFoundation\Response;
  6. use ToolboxBundle\Document\Areabrick\AbstractAreabrick;
  7. use Pimcore\Model\DataObject;
  8. use Pimcore\Model\DataObject\TagCategory;
  9. class SsFilterGrid extends AbstractAreabrick
  10. {
  11.     public function action(Document\Editable\Area\Info $info): ?Response
  12.     {
  13.         $successStories DataObject\SuccessStories::getList([
  14.             'order' => 'desc'
  15.         ]);
  16.         $allowedTags = [];
  17.         foreach ($successStories as $story) {
  18.             $tags array_map(fn($tag) => $tag->getId(), $story->getRealTags());
  19.             $allowedTags array_unique(array_merge($allowedTags$tags));
  20.         }
  21.         
  22.         $TagCategories TagCategory::getList();
  23.         // build tags array with allowedTags (all tags that are linked to at least one successStory)
  24.         $tags = [];
  25.         foreach ($TagCategories as $TagCat) {
  26.             $TagCatTags $TagCat->getTags();
  27.             $tagsArr = [];
  28.             foreach ($TagCatTags as $Tag) {
  29.                 if(in_array($Tag->getId(), $allowedTags)) {
  30.                     $tagsArr[$Tag->getId()] = [
  31.                         "name" => $Tag->getName(),
  32.                         "selected" => false,
  33.                     ];
  34.                 }
  35.             }
  36.             $tags[$TagCat->getId()] = [
  37.                 "name" => $TagCat->getName(),
  38.                 "id" => $TagCat->getId(),
  39.                 "tags" => $tagsArr
  40.             ];
  41.         }
  42.         $info->setParams([
  43.             'tags' => $tags// tags are set once here and re-evaluated with each filter call to ServiceController::getFilteredSuccessStories
  44.             'filters' => $tags// filters are set once when loading the brick and track the inputs in the frontend
  45.             'allowedTags' => $allowedTags
  46.         ]);
  47.         return parent::action($info); // TODO: Change the autogenerated stub
  48.     }
  49.     public function getTemplateDirectoryName():string
  50.     {
  51.         // this method is only required if your brick name (e.g. my_brick or myBrick)
  52.         // differs from the view template name (e.g. ss_filter_grid)
  53.         return 'ss_filter_grid';
  54.     }
  55.     public function getTemplate(): string
  56.     {
  57.         // this method is only required if your brick name (e.g. my_brick or myBrick)
  58.         // differs from the view template name (e.g. ss_filter_grid)
  59.         return sprintf('areas/%s/view.%s'$this->getTemplateDirectoryName(), $this->getTemplateSuffix());
  60.     }
  61.     public function getName():string
  62.     {
  63.         return 'Success Story Filter Grid';
  64.     }
  65.     public function getDescription():string
  66.     {
  67.         return 'Success Story Filter Grid';
  68.     }
  69.     public function getIcon():string
  70.     {
  71.         return '/static/areas/ss_filter_grid/icon.svg';
  72.     }
  73. }