10

I have create a following custom attribute using modules.

This is Dropdown-list attribute for Customer.

It should be displayed on checkout page (Customer As Guest/Existing user) Customer Account Page, Customer Account Create/ Register Page, Admin Customer Edit Page.

Currently I am able see attribute on Admin Section in Customer Address.

I want this attribute to show on Checkout Page also in customer address section.

I have check billing.phtml file, As there other attribute are statically written, But I am not sure How to write custom attribute in billing.phtml as its dropdown-list. and which other file are necessary to update to view this attribute. Please let me know where I am doing wrong or anything else to add in my code.

Any guidance would be appreciated.

Below is my code -

File Name - /app/code/local/PS/PB/etc/config.xml

<?xml version="1.0"?>
<config>
  <modules>
    <PS_PB>
      <version>0.1.0</version>
    </PS_PB>
  </modules>
  <global>
    <helpers>
      <pb>
        <class>PS_PB_Helper</class>
      </pb>
    </helpers>
    <models>
      <pb>
        <class>PS_PB_Model</class>
        <resourceModel>pb_mysql4</resourceModel>
      </pb>
    </models>
    <resources>
      <customerattribute1462360584_setup>
        <setup>
          <module>PS_P</module>
          <class>Mage_Customer_Model_Entity_Setup</class>
        </setup>
        <connection>
          <use>core_setup</use>
        </connection>
      </customerattribute1462360584_setup>
      <customerattribute1462360584_write>
        <connection>
          <use>core_write</use>
        </connection>
      </customerattribute1462360584_write>
      <customerattribute1462360584_read>
        <connection>
          <use>core_read</use>
        </connection>
      </customerattribute1462360584_read>
    </resources>
  </global>
</config> 

File - /app/code/local/PS/PB/Helper/Data.php

<?php
class PS_PB_Helper_Data extends Mage_Core_Helper_Abstract
{
}

File - /app/code/local/PS/PB/Model/Eav/Entity/Attribute/Source/Customeroptions14623605840.php

<?php
class PS_PB_Model_Eav_Entity_Attribute_Source_Customeroptions14623605840 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")->__("End Consumer / DIY"),
                    "value" =>  1
                ),

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

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

            );
        }
        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);
    }
}

File - /app/code/local/PS/PB/sql/customerattribute1462360584_setup

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


    $installer->addAttribute("customer_address", "cstpb",  array(
        "type"     => "int",
        "backend"  => "",
        "label"    => "Primary Business",
        "input"    => "select",
        "source"   => "pb/eav_entity_attribute_source_customeroptions14623605840",
        "visible"  => true,
        "required" => true,
        "default" => "",
        "frontend" => "",
        "unique"     => false,
        "note"       => ""

        ));

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


    $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";
    $used_in_forms[]="adminhtml_customer_address";
    $used_in_forms[]="customer_register_address";
    $used_in_forms[]="customer_address_edit";
            $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();

XML File - /app/etc/modules/PS_PB.xml

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

Updates

After making the correction in config.xml file its working fine.

To check errors in config.xml open this file in browser after editing in > any editor so it will show error.

Now The attribute is showing checkout page and admin customer page and customer my account section but in this section. I am not able to update it. Which fields needs to be added in config.xml fot customer_account tags.

I have added like this in config.xml

<customer_account>
   <primary_business>
       <create>1</create>
         <update>1</update>
   </primary_business>
</customer_account>
Rahul
  • 763
  • 1
  • 12
  • 45
  • Do you still have problems showing the attribute on the checkout pages? Which Magento version are you using? – codedge May 06 '16 at 08:29
  • Furthermore why did you add the attribute to the `customer address` and not to `customer`? As I understand a `service technician` f. ex. is something that is related to a customer and _not_ an address. – codedge May 06 '16 at 08:34
  • @codedge Yes I still having issue with adding attribute. Now My attribute is added to front end and checkout page, But I want to add it with Firecheckout Model not with Core Magento Files. Which fields needs to add in config file to call any class and its method. – Rahul May 08 '16 at 19:05
  • If you use Firecheckout you either customize the Firecheckout extension yourself or you create a rewrite of the Firecheckout model with on of your PS_PB models. As Firecheckout is a paid extension I cannot test it. – codedge May 09 '16 at 09:49
  • Yes, I am using Firechekout. In latest version create attribute functionality is available. But our extension have lot of customization and we are using old one and currently dont want to update it. Please check updates on question. – Rahul May 09 '16 at 09:55

1 Answers1

1

Your install script code appears right to me although I did not run it to test.

First, make sure your install script is executing.

Second,

You can create the "customer attribute" through the admin by navigating to Customers > Attributes > Manage Attributes.

http://awesomescreenshot.com/0b35uq1542

Magento should be displaying your attribute in the configured areas if it is behaving the way it should. I would recommend starting by manually creating the attribute and seeing if it showing up. If it is not, it is possible that your theme or other extensions have overridden the code responsible for rendering those attributes.

Once you know the theme is rendering what you want, where you want, you can create a sandbox script to load your attribute and get the data. Looking at the "Admin" created attribute data normally shows me what I missed.

Something like this:

<?php

require_once('app/Mage.php');
Mage::app()->setCurrentStore('0');
$attribute_id = 9999; // YOU ADMIN CREATED ATTRIBUTE ID
$attributeModel = Mage::getModel('eav/attribute')->load($attribute_id);
var_dump($attributeModel->getData());
Steven Zurek
  • 535
  • 5
  • 18
  • 1
    Managing customer attribs in Magento directly is a EE feature. Thats why the It need to be installed via a custom extension in the CE - the code provided in the OP works. – codedge May 09 '16 at 08:55