vendor/shopware/core/Content/Category/CategoryEntity.php line 16

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Shopware\Core\Content\Category;
  3. use Shopware\Core\Content\Category\Aggregate\CategoryTranslation\CategoryTranslationCollection;
  4. use Shopware\Core\Content\Cms\CmsPageEntity;
  5. use Shopware\Core\Content\Media\MediaEntity;
  6. use Shopware\Core\Content\Product\ProductCollection;
  7. use Shopware\Core\Content\Seo\MainCategory\MainCategoryCollection;
  8. use Shopware\Core\Content\Seo\SeoUrl\SeoUrlCollection;
  9. use Shopware\Core\Framework\DataAbstractionLayer\Entity;
  10. use Shopware\Core\Framework\DataAbstractionLayer\EntityIdTrait;
  11. use Shopware\Core\System\SalesChannel\SalesChannelCollection;
  12. use Shopware\Core\System\Tag\TagCollection;
  13. class CategoryEntity extends Entity
  14. {
  15.     use EntityIdTrait;
  16.     /**
  17.      * @var string|null
  18.      */
  19.     protected $parentId;
  20.     /**
  21.      * @var int
  22.      */
  23.     protected $autoIncrement;
  24.     /**
  25.      * @var string|null
  26.      */
  27.     protected $mediaId;
  28.     /**
  29.      * @var string|null
  30.      */
  31.     protected $name;
  32.     /**
  33.      * @var array|null
  34.      */
  35.     protected $breadcrumb;
  36.     /**
  37.      * @var string|null
  38.      */
  39.     protected $path;
  40.     /**
  41.      * @var int
  42.      */
  43.     protected $level;
  44.     /**
  45.      * @var bool
  46.      */
  47.     protected $active;
  48.     /**
  49.      * @var int
  50.      */
  51.     protected $childCount;
  52.     /**
  53.      * @var bool
  54.      */
  55.     protected $displayNestedProducts;
  56.     /**
  57.      * @var CategoryEntity|null
  58.      */
  59.     protected $parent;
  60.     /**
  61.      * @var CategoryCollection|null
  62.      */
  63.     protected $children;
  64.     /**
  65.      * @var CategoryTranslationCollection|null
  66.      */
  67.     protected $translations;
  68.     /**
  69.      * @var MediaEntity|null
  70.      */
  71.     protected $media;
  72.     /**
  73.      * @var ProductCollection|null
  74.      */
  75.     protected $products;
  76.     /**
  77.      * @var ProductCollection|null
  78.      */
  79.     protected $nestedProducts;
  80.     /**
  81.      * @var string|null
  82.      */
  83.     protected $afterCategoryId;
  84.     /**
  85.      * @var array|null
  86.      */
  87.     protected $customFields;
  88.     /**
  89.      * @var TagCollection|null
  90.      */
  91.     protected $tags;
  92.     /**
  93.      * @var string|null
  94.      */
  95.     protected $cmsPageId;
  96.     /**
  97.      * @var CmsPageEntity|null
  98.      */
  99.     protected $cmsPage;
  100.     /**
  101.      * @var array|null
  102.      */
  103.     protected $slotConfig;
  104.     /**
  105.      * @var SalesChannelCollection|null
  106.      */
  107.     protected $navigationSalesChannels;
  108.     /**
  109.      * @var SalesChannelCollection|null
  110.      */
  111.     protected $footerSalesChannels;
  112.     /**
  113.      * @var SalesChannelCollection|null
  114.      */
  115.     protected $serviceSalesChannels;
  116.     /**
  117.      * @var string|null
  118.      */
  119.     protected $externalLink;
  120.     /**
  121.      * @var bool
  122.      */
  123.     protected $visible;
  124.     /**
  125.      * @var string
  126.      */
  127.     protected $type;
  128.     /**
  129.      * @var string|null
  130.      */
  131.     protected $description;
  132.     /**
  133.      * @var string|null
  134.      */
  135.     protected $metaTitle;
  136.     /**
  137.      * @var string|null
  138.      */
  139.     protected $metaDescription;
  140.     /**
  141.      * @var string|null
  142.      */
  143.     protected $keywords;
  144.     /**
  145.      * @var MainCategoryCollection|null
  146.      */
  147.     protected $mainCategories;
  148.     /**
  149.      * @var SeoUrlCollection|null
  150.      */
  151.     protected $seoUrls;
  152.     public function getParentId(): ?string
  153.     {
  154.         return $this->parentId;
  155.     }
  156.     public function setParentId(?string $parentId): void
  157.     {
  158.         $this->parentId $parentId;
  159.     }
  160.     public function getMediaId(): ?string
  161.     {
  162.         return $this->mediaId;
  163.     }
  164.     public function setMediaId(?string $mediaId): void
  165.     {
  166.         $this->mediaId $mediaId;
  167.     }
  168.     public function getName(): ?string
  169.     {
  170.         return $this->name;
  171.     }
  172.     public function setName(?string $name): void
  173.     {
  174.         $this->name $name;
  175.     }
  176.     public function getPath(): ?string
  177.     {
  178.         return $this->path;
  179.     }
  180.     public function setPath(?string $path): void
  181.     {
  182.         $this->path $path;
  183.     }
  184.     public function getLevel(): int
  185.     {
  186.         return $this->level;
  187.     }
  188.     public function setLevel(int $level): void
  189.     {
  190.         $this->level $level;
  191.     }
  192.     public function getActive(): bool
  193.     {
  194.         return $this->active;
  195.     }
  196.     public function setActive(bool $active): void
  197.     {
  198.         $this->active $active;
  199.     }
  200.     public function getChildCount(): int
  201.     {
  202.         return $this->childCount;
  203.     }
  204.     public function setChildCount(int $childCount): void
  205.     {
  206.         $this->childCount $childCount;
  207.     }
  208.     public function getParent(): ?CategoryEntity
  209.     {
  210.         return $this->parent;
  211.     }
  212.     public function setParent(CategoryEntity $parent): void
  213.     {
  214.         $this->parent $parent;
  215.     }
  216.     public function getMedia(): ?MediaEntity
  217.     {
  218.         return $this->media;
  219.     }
  220.     public function setMedia(MediaEntity $media): void
  221.     {
  222.         $this->media $media;
  223.     }
  224.     public function getChildren(): ?CategoryCollection
  225.     {
  226.         return $this->children;
  227.     }
  228.     public function setChildren(CategoryCollection $children): void
  229.     {
  230.         $this->children $children;
  231.     }
  232.     public function getTranslations(): ?CategoryTranslationCollection
  233.     {
  234.         return $this->translations;
  235.     }
  236.     public function setTranslations(CategoryTranslationCollection $translations): void
  237.     {
  238.         $this->translations $translations;
  239.     }
  240.     public function getProducts(): ?ProductCollection
  241.     {
  242.         return $this->products;
  243.     }
  244.     public function setProducts(ProductCollection $products): void
  245.     {
  246.         $this->products $products;
  247.     }
  248.     public function getAutoIncrement(): int
  249.     {
  250.         return $this->autoIncrement;
  251.     }
  252.     public function setAutoIncrement(int $autoIncrement): void
  253.     {
  254.         $this->autoIncrement $autoIncrement;
  255.     }
  256.     public function getNestedProducts(): ?ProductCollection
  257.     {
  258.         return $this->nestedProducts;
  259.     }
  260.     public function setNestedProducts(ProductCollection $nestedProducts): void
  261.     {
  262.         $this->nestedProducts $nestedProducts;
  263.     }
  264.     public function getDisplayNestedProducts(): bool
  265.     {
  266.         return $this->displayNestedProducts;
  267.     }
  268.     public function setDisplayNestedProducts(bool $displayNestedProducts): void
  269.     {
  270.         $this->displayNestedProducts $displayNestedProducts;
  271.     }
  272.     public function getAfterCategoryId(): ?string
  273.     {
  274.         return $this->afterCategoryId;
  275.     }
  276.     public function setAfterCategoryId(string $afterCategoryId): void
  277.     {
  278.         $this->afterCategoryId $afterCategoryId;
  279.     }
  280.     public function getCustomFields(): ?array
  281.     {
  282.         return $this->customFields;
  283.     }
  284.     public function setCustomFields(?array $customFields): void
  285.     {
  286.         $this->customFields $customFields;
  287.     }
  288.     public function getTags(): ?TagCollection
  289.     {
  290.         return $this->tags;
  291.     }
  292.     public function setTags(TagCollection $tags): void
  293.     {
  294.         $this->tags $tags;
  295.     }
  296.     public function getCmsPage(): ?CmsPageEntity
  297.     {
  298.         return $this->cmsPage;
  299.     }
  300.     public function setCmsPage(CmsPageEntity $cmsPage): void
  301.     {
  302.         $this->cmsPage $cmsPage;
  303.     }
  304.     public function getCmsPageId(): ?string
  305.     {
  306.         return $this->cmsPageId;
  307.     }
  308.     public function setCmsPageId(string $cmsPageId): void
  309.     {
  310.         $this->cmsPageId $cmsPageId;
  311.     }
  312.     public function getSlotConfig(): ?array
  313.     {
  314.         return $this->slotConfig;
  315.     }
  316.     public function setSlotConfig(array $slotConfig): void
  317.     {
  318.         $this->slotConfig $slotConfig;
  319.     }
  320.     public function getNavigationSalesChannels(): ?SalesChannelCollection
  321.     {
  322.         return $this->navigationSalesChannels;
  323.     }
  324.     public function setNavigationSalesChannels(SalesChannelCollection $navigationSalesChannels): void
  325.     {
  326.         $this->navigationSalesChannels $navigationSalesChannels;
  327.     }
  328.     public function getFooterSalesChannels(): ?SalesChannelCollection
  329.     {
  330.         return $this->footerSalesChannels;
  331.     }
  332.     public function setFooterSalesChannels(SalesChannelCollection $footerSalesChannels): void
  333.     {
  334.         $this->footerSalesChannels $footerSalesChannels;
  335.     }
  336.     public function getServiceSalesChannels(): ?SalesChannelCollection
  337.     {
  338.         return $this->serviceSalesChannels;
  339.     }
  340.     public function setServiceSalesChannels(SalesChannelCollection $serviceSalesChannels): void
  341.     {
  342.         $this->serviceSalesChannels $serviceSalesChannels;
  343.     }
  344.     public function getExternalLink(): ?string
  345.     {
  346.         return $this->externalLink;
  347.     }
  348.     public function setExternalLink(string $externalLink): void
  349.     {
  350.         $this->externalLink $externalLink;
  351.     }
  352.     public function getVisible(): bool
  353.     {
  354.         return $this->visible;
  355.     }
  356.     public function setVisible(bool $visible): void
  357.     {
  358.         $this->visible $visible;
  359.     }
  360.     public function getType(): string
  361.     {
  362.         return $this->type;
  363.     }
  364.     public function setType(string $type): void
  365.     {
  366.         $this->type $type;
  367.     }
  368.     public function getDescription(): ?string
  369.     {
  370.         return $this->description;
  371.     }
  372.     public function setDescription(string $description): void
  373.     {
  374.         $this->description $description;
  375.     }
  376.     public function getBreadcrumb(): array
  377.     {
  378.         return array_values($this->getBreadcrumbMapping());
  379.     }
  380.     public function getPlainBreadcrumb(): array
  381.     {
  382.         return $this->getBreadcrumbMapping();
  383.     }
  384.     public function setBreadcrumb(?array $breadcrumb): void
  385.     {
  386.         $this->breadcrumb $breadcrumb;
  387.     }
  388.     public function buildSeoBreadcrumb(?string $navigationCategoryId): ?array
  389.     {
  390.         $categoryBreadcrumb $this->getBreadcrumbMapping();
  391.         // If the current SalesChannel is null ( which refers to the default template SalesChannel) or
  392.         // this category has no root, we return the full breadcrumb
  393.         if ($navigationCategoryId === null) {
  394.             return $categoryBreadcrumb;
  395.         }
  396.         // root case
  397.         if (count($categoryBreadcrumb) < 2) {
  398.             return null;
  399.         }
  400.         // Check where this category is located in relation to the navigation entry point of the sales channel
  401.         $salesChannelPos array_search($navigationCategoryIdarray_keys($categoryBreadcrumb), true);
  402.         if ($salesChannelPos !== false) {
  403.             // Remove all breadcrumbs preceding the navigation category
  404.             return array_slice($categoryBreadcrumb$salesChannelPos 1);
  405.         }
  406.         return $categoryBreadcrumb;
  407.     }
  408.     public function jsonSerialize(): array
  409.     {
  410.         // Make sure that the sorted breadcrumb gets serialized
  411.         $data parent::jsonSerialize();
  412.         $data['translated']['breadcrumb'] = $data['breadcrumb'] = $this->getBreadcrumb();
  413.         return $data;
  414.     }
  415.     public function getMainCategories(): ?MainCategoryCollection
  416.     {
  417.         return $this->mainCategories;
  418.     }
  419.     public function setMainCategories(MainCategoryCollection $mainCategories): void
  420.     {
  421.         $this->mainCategories $mainCategories;
  422.     }
  423.     public function getMetaTitle(): ?string
  424.     {
  425.         return $this->metaTitle;
  426.     }
  427.     public function setMetaTitle(?string $metaTitle): void
  428.     {
  429.         $this->metaTitle $metaTitle;
  430.     }
  431.     public function getMetaDescription(): ?string
  432.     {
  433.         return $this->metaDescription;
  434.     }
  435.     public function setMetaDescription(?string $metaDescription): void
  436.     {
  437.         $this->metaDescription $metaDescription;
  438.     }
  439.     public function getKeywords(): ?string
  440.     {
  441.         return $this->keywords;
  442.     }
  443.     public function setKeywords(?string $keywords): void
  444.     {
  445.         $this->keywords $keywords;
  446.     }
  447.     public function getSeoUrls(): ?SeoUrlCollection
  448.     {
  449.         return $this->seoUrls;
  450.     }
  451.     public function setSeoUrls(SeoUrlCollection $seoUrls): void
  452.     {
  453.         $this->seoUrls $seoUrls;
  454.     }
  455.     public function getApiAlias(): string
  456.     {
  457.         return 'category';
  458.     }
  459.     private function getBreadcrumbMapping(): array
  460.     {
  461.         $breadcrumb $this->getTranslation('breadcrumb');
  462.         if ($breadcrumb === null) {
  463.             return [];
  464.         }
  465.         if ($this->path === null) {
  466.             return $breadcrumb;
  467.         }
  468.         $parts array_slice(explode('|'$this->path), 1, -1);
  469.         $filtered = [];
  470.         foreach ($parts as $id) {
  471.             $filtered[$id] = $breadcrumb[$id];
  472.         }
  473.         $filtered[$this->getId()] = $breadcrumb[$this->getId()];
  474.         return $filtered;
  475.     }
  476. }