Bagaimana cara membuat atribut multi pilih untuk pelanggan menggunakan skrip instalasi?


9

Saya mengikuti banyak artikel tetapi saya tidak dapat membuat atribut multi-pilih. dan saya mendapatkan kesalahan berikut.

a: 5: {i: 0; s: 50: "Model sumber" "tidak ditemukan untuk atribut" exinent1 ""; i: 1; s: 3008: "# 0 C: \ wamp \ www \ magento8 \ app \ code \inti.

dan skrip saya adalah:

<?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();

dan config.xml adalah:

<?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>

Anda harus mengatur model sumber daya EAV ...
Elavarasan

dapatkah Anda merujuk artikel?
sivakumar

Jawaban:


10

Saya pikir Anda membuat banyak kesalahan .. Ini,

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> 

Helper / Data.php:

<?php
class Exinent_Cusatt_Helper_Data extends Mage_Core_Helper_Abstract
{
}

Mode / Eav / Entitas / Atribut / Sumber / Pilihan Pelanggan14042122330.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-install-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();

Itu saja .. Cukup aktifkan modul Anda menyatakan kumpulan kode Anda, Dan jangan bingung dengan angka-angka .. Tidak <customerattribute1404212233_setup> hanya acak untuk Anda atribut identitas, untuk mencegah entri duplikat. ..Bersulang ..!


Atribut multiselect saya sebenarnya adalah ketentuan pengiriman. Dan saya membuat satu modul yang berisi entitas dengan dua kolom (istilah pengiriman, aktifkan / nonaktifkan). Jadi saya perlu memetakan entitas ini untuk membuat opsi atribut istilah pengiriman. .
sivakumar

1

Hai Elavarasan dan Sivakumar,

Ini bukan ide yang baik untuk memanggil kode opsi dalam keadaan statis ..... Anda hanya perlu mengambil menggunakan tabel 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 () seharusnya

 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()

    }
    }

Sebenarnya atribut multi-pilihan saya adalah istilah pengiriman. Dan saya membuat satu modul (menggunakan pembuat modul ultima) yang berisi entitas dengan dua kolom (istilah pengiriman, enable.disable). Jadi saya perlu memetakan entitas ini untuk membuat opsi atribut istilah pengiriman yang dibuat. Tolong beri beberapa arahan untuk ini.
sivakumar

saya telah memberitahu Anda. Perlu beberapa perubahan jawaban Elavaras. Hanya mengubah kode dalam kode model sumber
Amit Bera

ok terima kasih. sebagai contoh dapatkan semua opsi bersifat dinamis (mendapatkan opsi dari tabel syarat pengiriman). setelah menginstal skrip saya menonaktifkan beberapa catatan (syarat pengiriman) .jadi itu akan tercermin dalam informasi akun pelanggan?
sivakumar
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.