/** * Block constructor. * * @param \Magento\Backend\Block\Template\Context $context Templating context. * @param \Magento\Framework\Data\Form\Element\Factory $elementFactory Form element factory. * @param \Magento\Rule\Block\Conditions $conditions Rule conditions block. * @param \Smile\ElasticsuiteCatalogRule\Model\RuleFactory $ruleFactory Search rule factory. * @param array $data Additional data. */ public function __construct(\Magento\Backend\Block\Template\Context $context, \Magento\Framework\Data\Form\Element\Factory $elementFactory, \Magento\Rule\Block\Conditions $conditions, \Smile\ElasticsuiteCatalogRule\Model\RuleFactory $ruleFactory, array $data = []) { $this->elementFactory = $elementFactory; $this->conditions = $conditions; $this->rule = $ruleFactory->create(); parent::__construct($context, $data); }
/** * {@inheritDoc} */ public function afterLoad($object) { $attributeCode = $this->getAttributeCode(); $attributeData = $object->getData($attributeCode); if (!is_object($attributeData)) { $rule = $this->ruleFactory->create(); $rule->setStoreId($object->getStoreId()); if ($attributeData !== null && is_string($attributeData)) { $attributeData = unserialize($attributeData); } if ($attributeData !== null && is_array($attributeData)) { $rule->getConditions()->loadArray($attributeData); } $object->setData($attributeCode, $rule); } return $this; }
/** * {@inheritDoc} */ public function execute() { $conditionId = $this->getRequest()->getParam('id'); $typeData = explode('|', str_replace('-', '/', $this->getRequest()->getParam('type'))); $className = $typeData[0]; $rule = $this->ruleFactory->create(); $model = $this->_objectManager->create($className)->setId($conditionId)->setType($className)->setRule($rule)->setPrefix('conditions'); $model->setElementName($this->getRequest()->getParam('element_name')); if (!empty($typeData[1])) { $model->setAttribute($typeData[1]); } $result = ''; if ($model instanceof AbstractCondition) { $model->setJsFormObject($this->getRequest()->getParam('form')); $result = $model->asHtmlRecursive(); } $this->getResponse()->setBody($result); }