用户模块在MAGENTO系统中的应用点;

  • Frontend 的注册,登陆, 结合购物车管理
  • 用户中心
  • 后台backend的用户管理以及相应的操作(包括用户管理,查看用户信息,用户组等)

 

 

在MAGENTO系统中,Customer模块所使用的是EAV的设计方式,也就是说customer相关的数据是通过magento内置的API来调用处理的。

 

 

所涉及到的API:

对于用户模块的API可以从以下的三个方面来考虑;

  • 针对当前用户(获得当前用户的数据信息)
  • 针对后台管理用户
  • 普通用户的删除,添加,修改,查询等
  • 用户与地址之间的对应API

 

 

1, 针对当前的用户(已经登陆而产生的session)

 

针对customer login(是否登陆)

Mage::getSingleton('customer/session')->isLoggedIn() 返回boolean

if(Mage::getSingleton('customer/session')->isLoggedIn()) {

}

 

 

2.由session得到当前用户(CUSTOMER)相关信息的API

 

得到当前customerentity:

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

 

 

 

 

  1. 用户的查询,添加,修改,删除操作

    涉及到的Resourcecustomer

针对某一个用户;

$customer->load($customer->getId());

 

 

删除

Load()来获得某一个customer,进而调用delete方法来删除

$customer->load($customer->getId());

 

$customer->delete();

 

 

查询 List()

获得所有的customer

 

 

 

 

  1. 用户与地址之间的对应API

涉及到的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方式来实现)。

 

 

 

对用户功能扩展的思考

  1.  

  2.  

     

  3. 用户登陆: 现在主流网站已经提供三种登陆方式,包括手机号登陆,邮箱登陆,用户名登陆,默认情况下只有邮箱登陆在MAGENTO中使用,如何添加使用另外的个人信息来登陆?

 

 

在用户模块实践中,个人所产生的问题:

  1. 移除多余的信息: removeAttribute()方法无法正常的移除多余的属性,如

$setup->removeAttribute('customer', 'firstname');

 

$setup->removeAttribute('customer', 'lastname');

 

 

  1. 在MAGENTO1.6中所添加的字段无法添加到entity中(已经实现添加到数据库表中)。

 

 

  1. 在启动多种方式登陆时,无法使用customize module的方式来override loginPost这个action,从而导致无法使用customize module的controller来重写处理login的action.

 

posted on 2012-11-20 10:07  myjavawork  阅读(1201)  评论(0编辑  收藏  举报