/**
  * 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);
 }
Example #2
0
 /**
  * 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;
 }