vendor/store.shopware.com/moorlmagazine/src/Core/Content/MagazineArticle/Cms/MagazineArticleListingCmsElementResolver.php line 22

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace MoorlMagazine\Core\Content\MagazineArticle\Cms;
  3. use MoorlFoundation\Core\Content\Cms\FoundationListingCmsElementResolver;
  4. use MoorlMagazine\Core\Content\MagazineArticle\MagazineArticleEntity;
  5. use Shopware\Core\Content\Cms\Aggregate\CmsSlot\CmsSlotEntity;
  6. use Shopware\Core\Content\Cms\DataResolver\Element\ElementDataCollection;
  7. use Shopware\Core\Content\Cms\DataResolver\ResolverContext\EntityResolverContext;
  8. use Shopware\Core\Content\Cms\DataResolver\ResolverContext\ResolverContext;
  9. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  10. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsAnyFilter;
  11. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
  12. class MagazineArticleListingCmsElementResolver extends FoundationListingCmsElementResolver
  13. {
  14.     public function getType(): string
  15.     {
  16.         return 'magazine-article-listing';
  17.     }
  18.     public function enrich(CmsSlotEntity $slotResolverContext $resolverContextElementDataCollection $result): void
  19.     {
  20.         $data = new MagazineArticleListingStruct();
  21.         $slot->setData($data);
  22.         $request $resolverContext->getRequest();
  23.         $salesChannelContext $resolverContext->getSalesChannelContext();
  24.         $navigationId $this->getNavigationId($resolverContext);
  25.         $criteria = new Criteria();
  26.         $criteria->addAssociation('media');
  27.         $criteria->addAssociation('creator.avatar');
  28.         $this->enrichCmsElementResolverCriteriaV2($slot$criteria$resolverContext);
  29.         /* Enrich additional filters */
  30.         $config $slot->getFieldConfig();
  31.         $listingSourceConfig $config->get('listingSource');
  32.         if ($listingSourceConfig && $listingSourceConfig->getValue() === 'static') {
  33.             $magazineCategoryIdConfig $config->get('magazineCategoryId');
  34.             if ($magazineCategoryIdConfig && $magazineCategoryIdConfig->getValue()) {
  35.                 $criteria->addFilter(new EqualsFilter(
  36.                     'moorl_magazine_article.categories.id',
  37.                     $magazineCategoryIdConfig->getValue()
  38.                 ));
  39.             }
  40.         }
  41.         /* If slider on article detail page, hide articles from other sw categories */
  42.         if ($resolverContext instanceof EntityResolverContext && $resolverContext->getEntity() instanceof MagazineArticleEntity) {
  43.             /** @var MagazineArticleEntity $magazineArticle */
  44.             $magazineArticle $resolverContext->getEntity();
  45.             if ($magazineArticle->getSwCategories()->count()) {
  46.                 $ids array_values($magazineArticle->getSwCategories()->getIds());
  47.                 $criteria->addFilter(new EqualsAnyFilter('moorl_magazine_article.swCategories.id'$ids));
  48.                 $criteria->addState('swCategories');
  49.             }
  50.         }
  51.         $listing $this->listingRoute
  52.             ->load($navigationId$request$salesChannelContext$criteria)
  53.             ->getResult();
  54.         $data->setListing($listing);
  55.     }
  56. }