*/ abstract class Mage_Eav_Block_Adminhtml_Attribute_Edit_Options_Abstract extends Mage_Adminhtml_Block_Widget { public function __construct() { parent::__construct(); $this->setTemplate('catalog/product/attribute/options.phtml'); } /** * Preparing layout, adding buttons * * @return Mage_Eav_Block_Adminhtml_Attribute_Edit_Options_Abstract */ protected function _prepareLayout() { $this->setChild('delete_button', $this->getLayout()->createBlock('adminhtml/widget_button') ->setData(array( 'label' => Mage::helper('eav')->__('Delete'), 'class' => 'delete delete-option' ))); $this->setChild('add_button', $this->getLayout()->createBlock('adminhtml/widget_button') ->setData(array( 'label' => Mage::helper('eav')->__('Add Option'), 'class' => 'add', 'id' => 'add_new_option_button' ))); return parent::_prepareLayout(); } /** * Retrieve HTML of delete button * * @return string */ public function getDeleteButtonHtml() { return $this->getChildHtml('delete_button'); } /** * Retrieve HTML of add button * * @return string */ public function getAddNewButtonHtml() { return $this->getChildHtml('add_button'); } /** * Retrieve stores collection with default store * * @return Mage_Core_Model_Mysql4_Store_Collection */ public function getStores() { $stores = $this->getData('stores'); if (is_null($stores)) { $stores = Mage::getModel('core/store') ->getResourceCollection() ->setLoadDefault(true) ->load(); $this->setData('stores', $stores); } return $stores; } /** * Retrieve attribute option values if attribute input type select or multiselect * * @return array */ public function getOptionValues() { $attributeType = $this->getAttributeObject()->getFrontendInput(); $defaultValues = $this->getAttributeObject()->getDefaultValue(); if ($attributeType == 'select' || $attributeType == 'multiselect') { $defaultValues = explode(',', $defaultValues); } else { $defaultValues = array(); } switch ($attributeType) { case 'select': $inputType = 'radio'; break; case 'multiselect': $inputType = 'checkbox'; break; default: $inputType = ''; break; } $values = $this->getData('option_values'); if (is_null($values)) { $values = array(); $optionCollection = Mage::getResourceModel('eav/entity_attribute_option_collection') ->setAttributeFilter($this->getAttributeObject()->getId()) ->setPositionOrder('desc', true) ->load(); foreach ($optionCollection as $option) { $value = array(); if (in_array($option->getId(), $defaultValues)) { $value['checked'] = 'checked="checked"'; } else { $value['checked'] = ''; } $value['intype'] = $inputType; $value['id'] = $option->getId(); $value['sort_order'] = $option->getSortOrder(); foreach ($this->getStores() as $store) { $storeValues = $this->getStoreOptionValues($store->getId()); if (isset($storeValues[$option->getId()])) { $value['store'.$store->getId()] = htmlspecialchars($storeValues[$option->getId()]); } else { $value['store'.$store->getId()] = ''; } } $values[] = new Varien_Object($value); } $this->setData('option_values', $values); } return $values; } /** * Retrieve frontend labels of attribute for each store * * @return array */ public function getLabelValues() { $values = array(); $values[0] = $this->getAttributeObject()->getFrontend()->getLabel(); // it can be array and cause bug $frontendLabel = $this->getAttributeObject()->getFrontend()->getLabel(); if (is_array($frontendLabel)) { $frontendLabel = array_shift($frontendLabel); } $storeLabels = $this->getAttributeObject()->getStoreLabels(); foreach ($this->getStores() as $store) { if ($store->getId() != 0) { $values[$store->getId()] = isset($storeLabels[$store->getId()]) ? $storeLabels[$store->getId()] : ''; } } return $values; } /** * Retrieve attribute option values for given store id * * @param integer $storeId * @return array */ public function getStoreOptionValues($storeId) { $values = $this->getData('store_option_values_'.$storeId); if (is_null($values)) { $values = array(); $valuesCollection = Mage::getResourceModel('eav/entity_attribute_option_collection') ->setAttributeFilter($this->getAttributeObject()->getId()) ->setStoreFilter($storeId, false) ->load(); foreach ($valuesCollection as $item) { $values[$item->getId()] = $item->getValue(); } $this->setData('store_option_values_'.$storeId, $values); } return $values; } /** * Retrieve attribute object from registry * * @return Mage_Eav_Model_Entity_Attribute_Abstract */ public function getAttributeObject() { return Mage::registry('entity_attribute'); } }