/** * Check whether attribute instance (attribute, backend, frontend or source) has method and applicable * * @param AbstractAttribute|\Magento\Eav\Model\Entity\Attribute\Backend\AbstractBackend|\Magento\Eav\Model\Entity\Attribute\Frontend\AbstractFrontend|\Magento\Eav\Model\Entity\Attribute\Source\AbstractSource $instance * @param string $method * @param array $args array of arguments * @return boolean */ protected function _isCallableAttributeInstance($instance, $method, $args) { if ($instance instanceof \Magento\Eav\Model\Entity\Attribute\Backend\AbstractBackend && ($method == 'beforeSave' || $method == 'afterSave')) { $attributeCode = $instance->getAttribute()->getAttributeCode(); if (isset($args[0]) && $args[0] instanceof \Magento\Framework\DataObject && $args[0]->getData($attributeCode) === false) { return false; } } return parent::_isCallableAttributeInstance($instance, $method, $args); }
/** * 2015-09-20 * Цель метода — перевод экранных названий свойств (товаров, разделов, покупателей и т.п.). * @see \Df\Framework\Plugin\Data\Form\Element\AbstractElement::afterGetEscapedValue() * @see \Magento\Eav\Model\Entity\Attribute\Frontend\AbstractFrontend::getLabel() * @param Sb $sb * @param string $result * @return string */ public function afterGetLabel(Sb $sb, $result) { df_state()->attributeSet($sb->getAttribute()); /** @var string[] $result */ /** * 2015-09-21 * Важно сразу привести результат к строке, * потому что иначе @see __() вернёт объект и отложит перевод на потом, * когда мы уже выпадем из контекста свойства (finally ниже). */ try { $result = (string) __($result); } finally { df_state()->attributeUnset(); } return $result; }