Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
Design.php
Go to the documentation of this file.
1 <?php
6 namespace Magento\Catalog\Model;
7 
17 {
18  const APPLY_FOR_PRODUCT = 1;
19 
20  const APPLY_FOR_CATEGORY = 2;
21 
27  protected $_design = null;
28 
32  protected $_localeDate;
33 
43  public function __construct(
44  \Magento\Framework\Model\Context $context,
45  \Magento\Framework\Registry $registry,
46  \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
47  \Magento\Framework\View\DesignInterface $design,
48  \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
49  \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
50  array $data = []
51  ) {
52  $this->_localeDate = $localeDate;
53  $this->_design = $design;
54  parent::__construct($context, $registry, $resource, $resourceCollection, $data);
55  }
56 
63  public function applyCustomDesign($design)
64  {
65  $this->_design->setDesignTheme($design);
66  return $this;
67  }
68 
75  public function getDesignSettings($object)
76  {
77  if ($object instanceof \Magento\Catalog\Model\Product) {
78  $currentCategory = $object->getCategory();
79  } else {
80  $currentCategory = $object;
81  }
82 
83  $category = null;
84  if ($currentCategory) {
85  $category = $currentCategory->getParentDesignCategory($currentCategory);
86  }
87 
88  if ($object instanceof \Magento\Catalog\Model\Product) {
89  if ($category && $category->getCustomApplyToProducts()) {
90  return $this->_mergeSettings($this->_extractSettings($category), $this->_extractSettings($object));
91  } else {
92  return $this->_extractSettings($object);
93  }
94  } else {
95  return $this->_extractSettings($category);
96  }
97  }
98 
105  protected function _extractSettings($object)
106  {
107  $settings = new \Magento\Framework\DataObject();
108  if (!$object) {
109  return $settings;
110  }
111  $date = $object->getCustomDesignDate();
112  if (array_key_exists(
113  'from',
114  $date
115  ) && array_key_exists(
116  'to',
117  $date
118  ) && $this->_localeDate->isScopeDateInInterval(
119  null,
120  $date['from'],
121  $date['to']
122  )
123  ) {
124  $settings->setCustomDesign(
125  $object->getCustomDesign()
126  )->setPageLayout(
127  $object->getPageLayout()
128  )->setLayoutUpdates(
129  (array)$object->getCustomLayoutUpdate()
130  );
131  }
132  return $settings;
133  }
134 
142  protected function _mergeSettings($categorySettings, $productSettings)
143  {
144  if ($productSettings->getCustomDesign()) {
145  $categorySettings->setCustomDesign($productSettings->getCustomDesign());
146  }
147  if ($productSettings->getPageLayout()) {
148  $categorySettings->setPageLayout($productSettings->getPageLayout());
149  }
150  if ($productSettings->getLayoutUpdates()) {
151  $update = array_merge($categorySettings->getLayoutUpdates(), $productSettings->getLayoutUpdates());
152  $categorySettings->setLayoutUpdates($update);
153  }
154  return $categorySettings;
155  }
156 }
$resource
Definition: bulk.php:12
_mergeSettings($categorySettings, $productSettings)
Definition: Design.php:142
$settings
Definition: bootstrap.php:29
__construct(\Magento\Framework\Model\Context $context, \Magento\Framework\Registry $registry, \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate, \Magento\Framework\View\DesignInterface $design, \Magento\Framework\Model\ResourceModel\AbstractResource $resource=null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection=null, array $data=[])
Definition: Design.php:43