2012-01-18 9 views
7

मैं एक नया उत्पाद विशेषता जोड़ना चाहता हूं जो सभी विकल्पों के रूप में सभी सीएमएस पृष्ठों के साथ एक ड्रॉप-डाउन सूची प्रस्तुत करता है। मैंने एक एक्सटेंशन बनाया और इंस्टॉल स्क्रिप्ट के माध्यम से यह विशेषता जोड़ना चाहता था। लेकिन इस चलाने के बाद, Magento eav_entity_type तालिका ...Magento: एक सीएमएस पृष्ठ का चयन करने के लिए कस्टम उत्पाद विशेषता

भ्रष्ट क्या मैं अब तक की कोशिश की:

MySQL4 से स्थापित-0.1.0.php:

$installer = $this; 

$setup = new Mage_Eav_Model_Entity_Setup('core_setup'); 

$installer->startSetup(); 

$setup->addAttribute('catalog_product', 'test_report', array(
    'label' => 'Test report', 
    'required' => false, 
    'input' => 'select', 
    'source' => 'cmspageselect/entity_source', 
    'default' => 'none', 
    'position' => 1, 
    'sort_order' => 3, 
)); 

$installer->endSetup(); 

cmspageselect के लिए स्रोत/entity_source वर्ग:

class Mandarin_CMSPageSelect_Model_Source extends Mage_Eav_Model_Entity_Attribute_Source_Abstract { 
    /** 
    * Retrieve Full Option values array 
    * 
    * @param bool $withEmpty  Add empty option to array 
    * @return array 
    */ 
    public function getAllOptions($withEmpty = true) 
    { 
     $storeId = $this->getAttribute()->getStoreId(); 
     if (!is_array($this->_options)) { 
      $this->_options = array(); 
     } 
     if (!isset($this->_options[$storeId])) { 
      $collection = Mage::getResourceModel('cms/page_collection') 
       ->setPositionOrder('asc') 
       ->setStoreFilter($this->getAttribute()->getStoreId()) 
       ->load(); 
      $this->_options[$storeId] = $collection->toOptionIdArray(); 
     } 

     $options = $this->_options[$storeId]; 
     if ($withEmpty) { 
      array_unshift($options, array('label' => '', 'value' => '')); 
     } 

     return $options; 
    } 

    /** 
    * Get a text for option value 
    * 
    * @param string|integer $value 
    * @return string 
    */ 
    public function getOptionText($value) 
    { 
     $isMultiple = false; 
     if (strpos($value, ',')) { 
      $isMultiple = true; 
      $value = explode(',', $value); 
     } 

     $options = $this->getAllOptions(false); 

     if ($isMultiple) { 
      $values = array(); 
      foreach ($options as $item) { 
       if (in_array($item['value'], $value)) { 
        $values[] = $item['label']; 
       } 
      } 
      return $values; 
     } 

     foreach ($options as $item) { 
      if ($item['value'] == $value) { 
       return $item['label']; 
      } 
     } 
     return false; 
    } 
} 

जैसा कि मैंने कहा, बजाय नई विशेषता "test_report" बनाने के बजाय, Magento सिर्फ eav_entity_type टा भ्रष्ट ble। क्या हुआ इसके बारे में कोई त्रुटि संदेश नहीं था और न ही लॉग प्रविष्टि थी।

मैं इस तरह की विशेषता कैसे बना सकता हूं?

धन्यवाद, Aeno

+0

क्या आप cmspageselect/entity_source क्लास के लिए अपना स्रोत कोड प्रदान कर सकते हैं? –

+0

मैंने स्रोत – aeno

+0

शामिल करने के लिए प्रश्न संपादित किया है आप तालिका को भ्रष्ट कैसे कर रहे हैं? –

उत्तर

4

$installer वर्ग ही विशेषता जोड़ने के लिए सक्षम होना चाहिए, मैं तुम्हें Entity_Setup वर्ग लोड करने के लिए की जरूरत है विश्वास नहीं है।

$installer = $this; 
$installer->startSetup(); 

$installer->addAttribute('catalog_product', 'test_report', array(
    'label' => 'Test report', 
    'required' => false, 
    'input' => 'select', 
    'source' => 'cmspageselect/entity_source', 
    'default' => 'none', 
    'position' => 1, 
    'sort_order' => 3, 
)); 

$installer->endSetup(); 

उसके अलावा मुझे लगता है कि अपने स्रोत मूल्य गलत है, सरणी में स्रोत तत्व द्वारा पहचानने, आप अपने मॉडल Mandarin_CMSPageSelect_Model_Entity_Source नामकरण किया जाना चाहिए। मुझे लगता है कि आपने Magento को अपने मॉडल को लोड करने के लिए कहने के लिए config.xml में उचित <models> तत्व में जोड़ा है।

+0

आपके उत्तर के लिए धन्यवाद, कैग। लेकिन वह चाल नहीं करता है। अपने कोड का उपयोग करते समय, मुझे 'अपरिभाषित विधि Mage_Core_Model_Resource_Setup :: addAttribute() 'पर कॉल करें। मैंने आपके स्रोत मॉडल का नाम बदल दिया जैसा आपने बताया था। – aeno

+0

$ setup-> addAttribute() का उपयोग करते समय अंत में काम किया। मुझे अपने स्रोत मॉडल को थोड़ा सा ट्विक करना पड़ा, क्योंकि setPositionOrder() और setStoreFilter() को cms/page_collection में उपयोग नहीं किया जा सकता है। – aeno

संबंधित मुद्दे