Müşteriye özel özellik ekleme


64

Müşteri veya yönetici tarafından düzenlenemeyen bir müşteri kaydına, yalnızca programlı olarak bir özellik eklemek için basit bir yola ihtiyacımız var. Temel olarak, Magento ile birleştirilmiş bir ExpressionEngine sitemiz var.

Web hizmeti üzerinden kimlik doğrulaması yapıyoruz ve kimlik doğrulamasından geri aldığımız bazı JSON'ları müşterinin kaydına kaydetmek ve her giriş yaptıklarında güncellemek istiyoruz.

Ayrıca, gönderi adresi gibi ödeme işlemindeki bilgileri değiştirirlerse verilerin değiştirilmesini isteriz. Daha sonra verileri şu anda her bir siparişle yaptığımız gibi web servisimize geri göndereceğiz.

MageWorx'un Özel Seçenekler uzantısına sahip özel bir özellik kullanarak her bir üründe bazı JSON'ları sakladığımız için bunu yapmak zor mu?

Burada Çevrimiçi Modül Oluşturucu'yu kullandım http://www.silksoftware.com/magento-module-creator/ ancak modül kurulduktan sonra değerin nasıl değiştirileceğinden veya alınacağından emin değilim.

Bunun için bir uzantı yazmayı nereden öğrenebilirim?



Bu özellik değerini 'customer_entity' veritabanı tablosuna kaydetmek istersem ne yapmalıyım? @Marius
Kazim Noorani

1
@KazimNoorani Eğer doğrudan değerini kaydetmek istiyorsanız customer_entitytablonun (aşağıdaki cevabımı bakınız) masaya ve niteliğini ekler komut sütun eklemek gelen türünü değiştirmeniz gerekiyor varchariçin static.
Marius

@Marius Tabloda zaten bir sütun ekledim customer_entity. Ve benim özellik de 'select' türünde. Özellik değerimi doğrudan customer_entitytablodaki 'custom_column' dizininde kaydetmek istiyorum . Bu nasıl yapılır?
Kazim Noorani,

1
Verileri ana tabloya kaydetmek isteseniz de, hala static tipine sahip bir niteliğe ihtiyacınız var.
Marius

Yanıtlar:


68

/app/code/local/Your/Customattribute/sql/your_customattribute_setup/install-0.1.0.php

<?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", "customattribute",  array(
    "type"     => "varchar",
    "backend"  => "",
    "label"    => "Custom Attribute",
    "input"    => "text",
    "source"   => "",
    "visible"  => true,
    "required" => false,
    "default" => "",
    "frontend" => "",
    "unique"     => false,
    "note"       => "Custom Attribute"
));

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

$setup->addAttributeToGroup(
    $entityTypeId,
    $attributeSetId,
    $attributeGroupId,
    'customattribute',
    '999'  //sort_order
);

$used_in_forms=array();

$used_in_forms[]="adminhtml_customer";
//$used_in_forms[]="checkout_register";
//$used_in_forms[]="customer_account_create";
//$used_in_forms[]="customer_account_edit";
//$used_in_forms[]="adminhtml_checkout";
        $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();

/app/code/local/Your/Customattribute/etc/config.xml

 <?xml version="1.0"?>
    <config>
        <modules>
            <Your_Customattribute>
                <version>0.1.0</version>
            </Your_Customattribute>
        </modules>
        <global>

            <resources>
                <Your_Customattribute_setup>
                    <setup>
                        <module>Your_Customattribute</module>
                        <class>Mage_Customer_Model_Entity_Setup</class>
                    </setup>
                    <connection>
                        <use>core_setup</use>
                    </connection>
                </Your_Customattribute_setup>
                <Your_Customattribute_write>
                    <connection>
                        <use>core_write</use>
                    </connection>
                </Your_Customattribute_write>
                <Your_Customattribute_read>
                    <connection>
                        <use>core_read</use>
                    </connection>
                </Your_Customattribute_read>
            </resources>
        </global>

    </config>

Uygulamanın / etc / modules / Your_Customattribute.xml

  <?xml version="1.0"?>
    <config>
        <modules>
            <Your_Customattribute>
                <active>true</active>
                <codePool>local</codePool>
                <version>0.1.0</version>
            </Your_Customattribute>
        </modules>
    </config>

Sonra kullanmak veya düzenlemek için kullanın:

$customer = Mage::getModel('customer/customer')->load($custid);
$customer->getCustomattribute();
$customer->setCustomattribute($yourjson);

Oturum açma etkinliği için etkinlik gözlemcileri oluşturmanız gerekecek, burada cevaplandı: Başarılı oturum açtıktan sonra müşteri verilerini gözlemciden nasıl alabilirim?

ve ayrıca, müşteri hesaplarını hesaba katarak adreslerini değiştirmeleri durumunda muhtemel gözlemciler ve birincisi, ne için olduğunuza bağlı olarak farklı yerlerde olabilecek teklif için.


Customer_band_sku nedir?
MB34

Üzgünüm, artık yarattığım oydu.
Willboudle

Peki setCustomAttribute () verileri ayarlamak için nasıl çalışır?
MB34

Kullanıcı oturum açtığında verinin nasıl ayarlanacağına dair bir örneğiniz var mı?
MB34

1
İyi çalışıyor .. Bu özelliği yönetici panelinde + müşteri kılavuzunda nasıl göstereceğinizi de söyleyebilir misiniz
aravind

9

Kendinizi özel modül geçersiz kılma sınıfları olarak oluşturmanız ve verilerinizin web servisinize iletilmesini istediğiniz olaylara takılmanız gereken birçok özel işlev vardır . Öznitelik devam ettiği sürece, özel modülünüzü oluşturduğunuzda ve bunun için config.xmlyukarıdaki öğreticideki gibi bir kurulum kaynağı tanımladığınızda , daha sonra kurulum komut dosyanızda şöyle bir şey yapabilirsiniz:

[Module_path] / SQL / [resource_node_defined_in_config_xml] / mysql4-kurulurken [module_version_number] php

$installer = $this;

$installer->startSetup ();

$setup = Mage::getModel ( 'customer/entity_setup' , 'core_setup' );

    //add budget
    $setup->addAttribute('customer', 'budget', array(
        'type' => 'decimal',
        'input' => 'text',
        'label' => 'Budget',
        'global' => 1,
        'visible' => 1,
        'required' => 0,
        'user_defined' => 0,
        'default' => '',
        'visible_on_front' => 1,
        'source' =>   NULL,
        'comment' => 'This is a budget'
    ));

$installer->endSetup ();

user_definedsystemniteliği, ayarlandığı takdirde 0admin'den silme özelliğini devre dışı bırakan bir özellik yapar .


0

Çekirdek hata ayıklama işleminden sonra magento'nun dosyanın data / Companyname_Modulname_setup / veya sql / Companyname_Modulname_setup / içinde olmasını beklediğini öğrendim .

Ve bunun yerine, mysql4-data-upgrade-OLDVERSION-NEWVERSION.phpörneğinmysql4-data-upgrade-0.1.0-0.1.0.phpmysql4-install-0.1.0.php

En azından Magento 1.9.3'da

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.