I've followed this tutorial exactly through step 2. I actually placed all of the files except those in the design directory that he has available for download into my app directory. Coincidentally, I am also trying to add the "school" attribute so so far I have not changed a thing. I see "school" in eav_attribute table. The module is listed as enabled in system>configuration>advanced>module output. I have reindexed and flushed cache, logged in and out. I still cannot see a "school" attribute when I try to edit a customer. I am using vs 1.7. Should this field be found in the "account information" tab for the customer? Is there anything outdated about this tutorial?
This is all in the code download, but for reference (he was missing the close of php tags, so I added those too):
controllers/IndexController.php
<?php
class Excellence_Profile_IndexController extends Mage_Core_Controller_Front_Action
{
public function indexAction()
{
$this->loadLayout();
$this->renderLayout();
}
}
?>
etc/config.xml
<?xml version="1.0"?>
<config>
<modules>
<Excellence_Profile>
<version>0.1.0</version>
</Excellence_Profile>
</modules>
<frontend>
<routers>
<profile>
<use>standard</use>
<args>
<module>Excellence_Profile</module>
<frontName>profile</frontName>
</args>
</profile>
</routers>
<layout>
<updates>
<profile>
<file>profile.xml</file>
</profile>
</updates>
</layout>
</frontend>
<admin>
<routers>
<profile>
<use>admin</use>
<args>
<module>Excellence_Profile</module>
<frontName>profile</frontName>
</args>
</profile>
</routers>
</admin>
<global>
<fieldsets>
<checkout_onepage_quote>
<customer_school>
<to_customer>school</to_customer>
</customer_school>
</checkout_onepage_quote>
<customer_account>
<school>
<to_quote>customer_school</to_quote>
</school>
</customer_account>
</fieldsets>
</global>
<global>
<fieldsets>
<customer_account>
<school><create>1</create><update>1</update><name>1</name></school>
</customer_account>
</fieldsets>
</global>
<global>
<models>
<profile>
<class>Excellence_Profile_Model</class>
<resourceModel>profile_mysql4</resourceModel>
</profile>
<profile_mysql4>
<class>Excellence_Profile_Model_Mysql4</class>
<entities>
<profile>
<table>profile</table>
</profile>
</entities>
</profile_mysql4>
</models>
<resources>
<profile_setup>
<setup>
<module>Excellence_Profile</module>
<class>Mage_Customer_Model_Entity_Setup</class>
</setup>
<connection>
<use>core_setup</use>
</connection>
</profile_setup>
<profile_write>
<connection>
<use>core_write</use>
</connection>
</profile_write>
<profile_read>
<connection>
<use>core_read</use>
</connection>
</profile_read>
</resources>
<blocks>
<profile>
<class>Excellence_Profile_Block</class>
</profile>
</blocks>
<helpers>
<profile>
<class>Excellence_Profile_Helper</class>
</profile>
</helpers>
</global>
</config>
Model/Entity/School
<?php
class Excellence_Profile_Model_Entity_School extends Mage_Eav_Model_Entity_Attribute_Source_Abstract
{
public function getAllOptions()
{
if ($this->_options === null) {
$this->_options = array();
$this->_options[] = array(
'value' => '',
'label' => 'Choose Option..'
);
$this->_options[] = array(
'value' => 1,
'label' => 'School1'
);
$this->_options[] = array(
'value' => 2,
'label' => 'School2'
);
$this->_options[] = array(
'value' => 3,
'label' => 'School3'
);
}
return $this->_options;
}
}
?>
Best Answer
Without having looked at the files he has available for download, this is the background what i needed to have a new customer attribute display in the admin account.
Check the things listed here to find the bug.
First, check the attribute is listed in the
eav_attribute
table, and also in thecustomer_eav_attribute
table, which references the former by theattribute_id
.If the record in
customer_eav_attribute
is missing, Magento won't be able to use the attribute.Check the
customer_eav_attribute.is_visible
column value is1
.Next, check the
customer_form_attribute
table.Make sure the
adminhtml_customer
is part of the result set.If all that is okay, the final thing that could be missing is that the attribute isn't assigned to the correct attribute set.
In Magento, customers always share the same attribute set. In the database it can be found using the query
Or, in PHP, using
To check if the attribute is associated with that attribute set, look at the
eav_entity_attribute
table.This table isn't normalized like many other tables in Magento, and it's not very readable because it only contains id's.
To confirm your attribute is associated with the default attribute set, filter by your
attribute_id
value, and check the value of theattribute_set_id
column.If all these factors are correct, one last thing that might be causing a problem is the custom source model, if you are using a select or multiselect attribute input type.
A quick way to check if that is the problem is to change the
eav_attribute.frontend_input
column totext
. Then the attribute input field should appear in the backend as a text input field.If that is the case, then you know what to fix next (that is, the source model).
If all these factory are correct, your field will be visible in the backend of Magento.