custom/plugins/SasBlogModule/src/Content/Cms/DataResolver/SasCmsSlotsDataResolver.php line 44

  1. <?php declare(strict_types=1);
  2. namespace Sas\BlogModule\Content\Cms\DataResolver;
  3. use Sas\BlogModule\Content\Blog\BlogEntriesEntity;
  4. use Sas\BlogModule\Content\Blog\DataResolver\BlogDetailCmsElementResolver;
  5. use Shopware\Core\Content\Cms\Aggregate\CmsSection\CmsSectionCollection;
  6. use Shopware\Core\Content\Cms\Aggregate\CmsSlot\CmsSlotCollection;
  7. use Shopware\Core\Content\Cms\CmsPageEntity;
  8. use Shopware\Core\Content\Cms\DataResolver\CmsSlotsDataResolver;
  9. use Shopware\Core\Content\Cms\DataResolver\Element\CmsElementResolverInterface;
  10. use Shopware\Core\Content\Cms\DataResolver\ResolverContext\ResolverContext;
  11. class SasCmsSlotsDataResolver extends CmsSlotsDataResolver
  12. {
  13.     private CmsSlotsDataResolver $decorated;
  14.     /**
  15.      * @var CmsElementResolverInterface[]
  16.      */
  17.     private array $resolvers;
  18.     /**
  19.      * @param CmsElementResolverInterface[] $resolvers
  20.      */
  21.     public function __construct(CmsSlotsDataResolver $decoratediterable $resolvers)
  22.     {
  23.         $this->decorated $decorated;
  24.         foreach ($resolvers as $resolver) {
  25.             $this->resolvers[$resolver->getType()] = $resolver;
  26.         }
  27.     }
  28.     /**
  29.      * Resolves the data for the given slots.
  30.      * It calls the decorated resolve method to get resolved slot.
  31.      * Then it checks if there are any slot that needs to be resolved by BlogDetailCmsElementResolver.
  32.      * If so, it calls the decorated resolve method again to resolve the data for the slot.
  33.      * Otherwise, it skips the slot.
  34.      */
  35.     public function resolve(CmsSlotCollection $slotsResolverContext $resolverContext): CmsSlotCollection
  36.     {
  37.         $slots $this->decorated->resolve($slots$resolverContext);
  38.         foreach ($slots as $slotId => $slot) {
  39.             $resolver $this->resolvers[$slot->getType()] ?? null;
  40.             if (!$resolver instanceof BlogDetailCmsElementResolver) {
  41.                 continue;
  42.             }
  43.             $blog $slot->getData();
  44.             if (!$blog instanceof BlogEntriesEntity) {
  45.                 continue;
  46.             }
  47.             $cmsPage $blog->getCmsPage();
  48.             if (!$cmsPage instanceof CmsPageEntity) {
  49.                 continue;
  50.             }
  51.             $cmsSections $cmsPage->getSections();
  52.             if (!$cmsSections instanceof CmsSectionCollection) {
  53.                 continue;
  54.             }
  55.             $contentSlots $cmsSections->getBlocks()->getSlots();
  56.             $contentSlots $this->decorated->resolve($contentSlots$resolverContext);
  57.             $cmsSections->getBlocks()->setSlots($contentSlots);
  58.             $slot->setData($blog);
  59.             $slots->set($slotId$slot);
  60.         }
  61.         return $slots;
  62.     }
  63. }