จะสร้างแอททริบิวต์แบบเลือกหลายรายการสำหรับลูกค้าที่ใช้สคริปต์การติดตั้ง


9

ฉันกำลังติดตามบทความจำนวนมาก แต่ฉันไม่สามารถสร้างแอตทริบิวต์การเลือกหลายตัวได้ และฉันได้รับข้อผิดพลาดดังต่อไปนี้

a: 5: {i: 0; s: 50: "ไม่พบโมเดลต้นทาง" "สำหรับแอตทริบิวต์" exinent1 ""; i: 1; s: 3008: "# 0 C: \ wamp \ www \ magento8 \ app \ code \ หลัก

และสคริปต์ของฉันคือ:

<?php
$installer = $this;
$installer->startSetup();

$setup = new Mage_Eav_Model_Entity_Setup('core_setup');

$entityTypeId     = $setup->getEntityTypeId('customer');
$attributeSetId   = $setup->getDefaultAttributeSetId($entityTypeId);
$attributeGroupId = $setup->getDefaultAttributeGroupId($entityTypeId, $attributeSetId);

$setup->addAttribute('customer', 'exinent1', array(
    'input'         => 'multiselect', 
    'type'          => 'varchar', 
    'backend'       => 'eav/entity_attribute_backend_array',
    'label'         => 'exinent1',
    'visible'       => 1,
    'required'      => 0,
    'user_defined'  => 1,
    'option'        => array (
                'value' => array('optionone' => array('First Option'),
                         'optiontwo' => array('Second Option'),
                         'optionthree' => array('Third Option'),
                         )
                        ),

));

$setup->addAttributeToGroup(
 $entityTypeId,
 $attributeSetId,
 $attributeGroupId,
 'exinent1',
 '100'
);

$oAttribute = Mage::getSingleton('eav/config')->getAttribute('customer', 'exinent1');
$oAttribute->setData('used_in_forms', array('adminhtml_customer')); 
$oAttribute->save();

$setup->endSetup();

และ config.xml คือ:

<?xml version="1.0"?>
<config>
    <modules>
        <Exinent_Cusatt>
            <version>3.1.5.6</version>
        </Exinent_Cusatt>
    </modules>
    <global>
    <resources>
    <exinent_cusatt_setup>
        <setup>
            <module>Exinent_Cusatt</module>
        </setup>
    </exinent_cusatt_setup>
</resources>
    </global>
</config>

คุณต้องตั้งค่าโมเดลทรัพยากร EAV ...
Elavarasan

คุณสามารถอ้างอิงบทความใด ๆ
sivakumar

คำตอบ:


10

ฉันคิดว่าคุณทำผิดพลาดมากมาย .. คุณไปไหน

etc / config.xml

<?xml version="1.0"?>
<config>
  <modules>
    <Exinent_Cusatt>
      <version>0.1.0</version>
    </Exinent_Cusatt>
  </modules>
  <global>
    <helpers>
      <cusatt>
        <class>Exinent_Cusatt_Helper</class>
      </cusatt>
    </helpers>
    <models>
      <cusatt>
        <class>Exinent_Cusatt_Model</class>
        <resourceModel>cusatt_mysql4</resourceModel>
      </cusatt>
    </models>
    <resources>
      <customerattribute1404212233_setup>
        <setup>
          <module>Exinent_Cusatt</module>
          <class>Mage_Customer_Model_Entity_Setup</class>
        </setup>
        <connection>
          <use>core_setup</use>
        </connection>
      </customerattribute1404212233_setup>
      <customerattribute1404212233_write>
        <connection>
          <use>core_write</use>
        </connection>
      </customerattribute1404212233_write>
      <customerattribute1404212233_read>
        <connection>
          <use>core_read</use>
        </connection>
      </customerattribute1404212233_read>
    </resources>
  </global>
</config> 

ตัวช่วย / Data.php:

<?php
class Exinent_Cusatt_Helper_Data extends Mage_Core_Helper_Abstract
{
}

Mode / Eav / Entity / แอตทริบิวต์ / ที่มา / Customeroptions14042122330.php

<?php
class Exinent_Cusatt_Model_Eav_Entity_Attribute_Source_Customeroptions14042122330 extends Mage_Eav_Model_Entity_Attribute_Source_Abstract
{
    /**
     * Retrieve all options array
     *
     * @return array
     */
    public function getAllOptions()
    {
        if (is_null($this->_options)) {
            $this->_options = array(

                array(
                    "label" => Mage::helper("eav")->__("Myoption-1"),
                    "value" =>  1
                ),

                array(
                    "label" => Mage::helper("eav")->__("Myoption-2"),
                    "value" =>  2
                ),

                array(
                    "label" => Mage::helper("eav")->__("Myoption-3"),
                    "value" =>  3
                ),

                array(
                    "label" => Mage::helper("eav")->__("Myoption-4"),
                    "value" =>  4
                ),

            );
        }
        return $this->_options;
    }

    /**
     * Retrieve option array
     *
     * @return array
     */
    public function getOptionArray()
    {
        $_options = array();
        foreach ($this->getAllOptions() as $option) {
            $_options[$option["value"]] = $option["label"];
        }
        return $_options;
    }

    /**
     * Get a text for option value
     *
     * @param string|integer $value
     * @return string
     */
    public function getOptionText($value)
    {
        $options = $this->getAllOptions();
        foreach ($options as $option) {
            if ($option["value"] == $value) {
                return $option["label"];
            }
        }
        return false;
    }

    /**
     * Retrieve Column(s) for Flat
     *
     * @return array
     */
    public function getFlatColums()
    {
        $columns = array();
        $columns[$this->getAttribute()->getAttributeCode()] = array(
            "type"      => "tinyint(1)",
            "unsigned"  => false,
            "is_null"   => true,
            "default"   => null,
            "extra"     => null
        );

        return $columns;
    }

    /**
     * Retrieve Indexes(s) for Flat
     *
     * @return array
     */
    public function getFlatIndexes()
    {
        $indexes = array();

        $index = "IDX_" . strtoupper($this->getAttribute()->getAttributeCode());
        $indexes[$index] = array(
            "type"      => "index",
            "fields"    => array($this->getAttribute()->getAttributeCode())
        );

        return $indexes;
    }

    /**
     * Retrieve Select For Flat Attribute update
     *
     * @param int $store
     * @return Varien_Db_Select|null
     */
    public function getFlatUpdateSelect($store)
    {
        return Mage::getResourceModel("eav/entity_attribute")
            ->getFlatUpdateSelect($this->getAttribute(), $store);
    }
}

SQL / customerattribute1404212233_setup / mysql4 ติดตั้ง-0.1.0.php

<?php
$installer = $this;
$installer->startSetup();


$installer->addAttribute("customer", "exinent",  array(
    "type"     => "text",
    "backend"  => "",
    "label"    => "exinent1",
    "input"    => "multiselect",
    "source"   => "cusatt/eav_entity_attribute_source_customeroptions14042122330",
    "visible"  => true,
    "required" => false,
    "default" => "",
    "frontend" => "",
    "unique"     => false,
    "note"       => ""

    ));

        $attribute   = Mage::getSingleton("eav/config")->getAttribute("customer", "exinent");


$used_in_forms=array();

$used_in_forms[]="adminhtml_customer";
        $attribute->setData("used_in_forms", $used_in_forms)
        ->setData("is_used_for_customer_segment", true)
        ->setData("is_system", 0)
        ->setData("is_user_defined", 1)
        ->setData("is_visible", 1)
        ->setData("sort_order", 100)
        ;
        $attribute->save();



$installer->endSetup();

นั่นคือ .. เพียงแค่เปิดใช้งานโมดูลของคุณประกาศกลุ่มรหัสของคุณและอย่าสับสนกับตัวเลข .. <customerattribute1404212233_setup> มันเป็นเพียงการสุ่มไม่มีตัวตนแอตทริบิวต์คุณเพื่อป้องกันรายการที่ซ้ำกัน .. เธอ .. .. !


ที่จริงแล้วแอตทริบิวต์การเลือกหลายตัวของฉันคือเงื่อนไขการจัดส่งและฉันกำลังสร้างโมดูลหนึ่งซึ่งมีเอนทิตีที่มีสองคอลัมน์ (เงื่อนไขการจัดส่งเปิด / ปิดการใช้งาน) ดังนั้นฉันต้องแมปเอนทิตีนี้เพื่อสร้างตัวเลือก .
sivakumar

1

สวัสดี Elavarasan และ Sivakumar

มันไม่ควรเรียกรหัสตัวเลือกในแบบคงที่ ..... คุณเพียงแค่ต้องดึงข้อมูลโดยใช้ตาราง Eav

$attributeId = Mage::getResourceModel('eav/entity_attribute')->getIdByCode('customer','exinent1');
 $collection =Mage::getResourceModel('eav/entity_attribute_option_collection')
                ->setPositionOrder('asc')
                ->setAttributeFilter($attributeId)
                ->setStoreFilter(0)
                ->load();

Surcemodel getAllOptions () ควรเป็น

 public function getAllOptions()
    {

 if (is_null($this->_options)) {

        attributeId = Mage::getResourceModel('eav/entity_attribute')->getIdByCode('customer','attribute_name');
 $collection =Mage::getResourceModel('eav/entity_attribute_option_collection')
                ->setPositionOrder('asc')
                ->setAttributeFilter($attributeId)
                ->setStoreFilter(0)
                ->load();
        $this->_options = $collection->toOptionArray()

    }
    }

ที่จริงแล้วคุณสมบัติตัวเลือกหลายตัวของฉันคือเงื่อนไขการจัดส่งและฉันกำลังสร้างหนึ่งโมดูล (โดยใช้ผู้สร้างโมดูลขั้นสูงสุด) ซึ่งมีเอนทิตีที่มีสองคอลัมน์ (เงื่อนไขการจัดส่ง, enable.disable) กรุณาให้ทิศทางกับสิ่งนี้
sivakumar

ฉันได้บอกคุณต้องมีการเปลี่ยนแปลงคำตอบ Elavaras เพียงแค่เปลี่ยนรหัสในรหัสรุ่นแหล่งที่มา
Amit Bera

ตกลงขอบคุณตัวอย่างเช่นตัวเลือกทั้งหมดเป็นแบบไดนามิก (รับตัวเลือกจากตารางข้อกำหนดการจัดส่ง) หลังจากติดตั้งสคริปต์แล้วฉันปิดการใช้งานบางรายการ (เงื่อนไขการจัดส่ง) ดังนั้นมันจะสะท้อนให้เห็นในข้อมูลบัญชีลูกค้า?
sivakumar
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.