0

我是 Magento 的新手。我正在尝试添加显示在客户网格上的最后一个登录值。它返回一个空值。我已经阅读了其他教程,但它并没有太大帮助。Magento 版本是 1.7。这是我的代码:

        $customer = Mage::getSingleton('customer/session')->getCustomer();  
        $logCustomer = Mage::getModel('log/customer')->load($customer  ->getId());  
        $lastVisited = $logCustomer->getLoginAt();

    $this->addColumn('$lastVisited', array(
        'header'    => Mage::helper('customer')->__('Last Login'),
        'type'      => 'datetime',
        'align'     => 'center',
        'index'     => '$lastVisited',
        'gmtoffset' => true
    ));
4

2 回答 2

1

Magento 将登录时间存储在下表中: log_customer 而且,此数据会定期清理(请参阅:Mage_Log_Model_Resource_Log::_cleanCustomers通过 Magento cron 触发)。

有不同的方法来处理你的任务。

1)非持久性 - 我只是想看看最近的数据(我可以忽略 log_customer 定期清理)

在这种情况下,您可以只依赖来自log_customer管理客户网格的数据并将其显示在其中。扩展 Mage_Adminhtml_Block_Customer_Grid 并在 _prepareCollection 中添加以下内容:

$collection->getSelect()->columns(array('last_login_at' => new Zend_Db_Expr ("(SELECT login_at
FROM  `log_customer` 
WHERE customer_id =e.entity_id
ORDER BY log_id DESC 
LIMIT 1)")));

前:$this->setCollection($collection);

注意:使用适当的 Magento 函数来获取 log_customer 表名,我的查询只是举例

2) Persistent - 我想一直看到数据

  1. 向客户实体添加一个新属性,称为:(last_login_at 日期时间)。
  2. 向事件添加观察者以custom_login更新此属性。
  3. 使用addColumn网格中的函数来显示这个新属性。

@user1414056

关于您的代码:

  • bixe 提出了一个公平的观点'$lastVisited'(这只是表明缺乏 php 编程经验
  • 您似乎对编程也很陌生(通常),因为 addColumn 只被调用一次......您如何期望您的代码有意义?

有了对 Zend 框架和 OOP 编程的更好理解,您将能够使用 Magento 实际工作并完成工作。

于 2012-10-18T15:15:32.023 回答
-1

你的 '$lastVisited' 不能工作:在 php 变量中,只有当它们在双引号中时才会在字符串中进行评估。

编辑:

好的,magento 的列系统仅在链接到网格的集合中可用时才显示值..

您必须添加要在网格集合中显示的日志信息。例如,看看Mage_Adminhtml_Block_Customer_Online_Grid::_prepareCollection()

完成后,您将添加您的列:

$this->addColumn('login_at', array(
        'header'    => Mage::helper('customer')->__('Last Login'),
        'type'      => 'datetime',
        'align'     => 'center',
        'index'     => 'login_at',
        'gmtoffset' => true
    ));
于 2012-10-17T12:18:37.147 回答