在MAGENTO系统中,Customer模块所使用的是EAV的设计方式,也就是说customer相关的数据是通过magento内置的API来调用处理的。
对于用户模块的API可以从以下的三个方面来考虑;
针对customer login(是否登陆)
Mage::getSingleton('customer/session')->isLoggedIn() 返回boolean
if(Mage::getSingleton('customer/session')->isLoggedIn()) {
}
2.由session得到当前用户(CUSTOMER)相关信息的API
得到当前customer的entity:
Mage::getSingleton('customer/session')->getCustomer();
由当前entity所产生的API
Mage::getSingleton('customer/session')->getCustomerId();
Mage::getSingleton('customer/session')->getId();
Mage::getSingleton('customer/session')->getCustomer()->getName();
Mage::getSingleton('customer/session')->getUsername(true);
(string)Mage::getSingleton('customer/session')->getCustomer()->getEmail();
如果对customer model添加了自定义的字段(如在MAGENTO系统上添加手机号,QQ号,微博号等),则可以根据EAV ORM的映射依次内推。
与当前用户产生的默认运输方式
Mage::getSingleton('customer/session')->getCustomer()->getDefaultShipping()
BILL
Mage::getSingleton('customer/session')->getCustomer()->getDefaultBilling()
TIPS: 由于shipping,bill有着一对多的关系(如一个用户可以填写多个运输地址等,详细的bill API将参考BILL 以及order相关的API.
3. 针对后台
针对admin后台是否登陆
Mage::getSingleton('admin/session')->isLoggedIn()
后台管理员相关的information
Mage::getSingleton('admin/session')->getUser()->getFirstname()
Mage::getSingleton('admin/session')->getUser()->getLastname())
Mage::getSingleton('admin/session')->getUser()->getId()
Mage::getSingleton('admin/session')->getUser()->getExtra()
涉及到的Resource :customer
针对某一个用户;
$customer->load($customer->getId());
删除
Load()来获得某一个customer,进而调用delete方法来删除
$customer->load($customer->getId());
$customer->delete();
查询 List()
获得所有的customer
涉及到的Resource: customer_address
用户与地址之间的绑定
$address = Mage::getModel('customer/address');
$address->setId(null)->setIsDefaultBilling(DATA)->setIsDefaultShipping();
$customer->addAddress($address);
用户处理在数据库中的反映包括:customer address, customer, customer group.
根据EAV的设计原则,所涉及到的表都应该包括有entity, attribute, attribute_存储类型。
针对customer:
customer_entity
customer_entity_decimal
customer_entity_datetime
customer_entity_varchar
customer_entity_text
TIPS: 依次customer address也方式也一样(当然除customer_group外,它使用非EAV方式来实现)。
对用户功能扩展的思考
在用户模块实践中,个人所产生的问题:
$setup->removeAttribute('customer', 'firstname');
$setup->removeAttribute('customer', 'lastname');