custom/plugins/WbfkExtensions/src/CmsElementResolver/ImageButtonBoxElementResolver.php line 40

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace WbfkExtensions\CmsElementResolver;
  4. use Shopware\Core\Content\Cms\Aggregate\CmsSlot\CmsSlotEntity;
  5. use Shopware\Core\Content\Cms\DataResolver\CriteriaCollection;
  6. use Shopware\Core\Content\Cms\DataResolver\Element\AbstractCmsElementResolver;
  7. use Shopware\Core\Content\Cms\DataResolver\Element\ElementDataCollection;
  8. use Shopware\Core\Content\Cms\DataResolver\ResolverContext\ResolverContext;
  9. use Shopware\Core\Content\Media\MediaDefinition;
  10. use Shopware\Core\Content\Media\MediaEntity;
  11. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  12. class ImageButtonBoxElementResolver extends AbstractCmsElementResolver
  13. {
  14. protected const ELEMENT_TYPE = 'image-button-box';
  15. public function getType(): string
  16. {
  17. return static::ELEMENT_TYPE;
  18. }
  19. public function collect(CmsSlotEntity $slot, ResolverContext $resolverContext): ?CriteriaCollection
  20. {
  21. $config = $slot->getFieldConfig();
  22. $mediaDesktop = $config->get('mediaDesktop');
  23. $criteriaCollection = new CriteriaCollection();
  24. if ($mediaDesktop && $mediaDesktop->getValue() !== null) {
  25. $criteria = new Criteria([$mediaDesktop->getValue()]);
  26. $criteriaCollection->add('desktop_' . $mediaDesktop->getValue(), MediaDefinition::class, $criteria);
  27. }
  28. return $criteriaCollection;
  29. }
  30. public function enrich(CmsSlotEntity $slot, ResolverContext $resolverContext, ElementDataCollection $result): void
  31. {
  32. $config = $slot->getFieldConfig();
  33. $desktop = $this->getMedia('desktop', $config->get('mediaDesktop'), $result);
  34. $slot->assign(
  35. [
  36. 'images' => [
  37. 'desktop' => $desktop
  38. ]
  39. ]
  40. );
  41. }
  42. private function getMedia($size, $mediaConfig, $result)
  43. {
  44. if ($mediaConfig->isStatic()) {
  45. $mediaID = $mediaConfig->getValue();
  46. $searchResult = $result->get($size . '_' . $mediaID);
  47. if ($searchResult) {
  48. /** @var MediaEntity|null $media */
  49. return $searchResult->get($mediaID);
  50. }
  51. }
  52. return false;
  53. }
  54. }