где заполняется 'log_visitor_online' ?

[10 ноября 2016 г.]    Российская сборка Magento 2.49.12
Magento 2: модули и услуги
#1 Ярослав Федорук
  • Группа: Пользователь
  • Сообщений: 26
  • Регистрация: 23.01.2011

02.11.2011 13:15

При залогинивании на сайт, таблица остается пустой. Никак не могу найти где она должна заполнятся
Греп выдал такие результаты.
grep -rn --exclude-dir=.svn --include=*\.php 'log_visitor_online' .

Цитата

./app/code/core/Mage/Log/sql/log_setup/mysql4-upgrade-0.7.4-0.7.5.php:33:CREATE TABLE `{$installer->getTable('log_visitor_online')}` (
./app/code/core/Mage/Log/Model/Visitor/Online.php:77: return Mage::app()->loadCache('log_visitor_online_prepare_at');
./app/code/core/Mage/Log/Model/Visitor/Online.php:91: Mage::app()->saveCache($time, 'log_visitor_online_prepare_at');

И все. Нигде никакого insert-а.

#2 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8884
  • Регистрация: 20.02.2010

02.11.2011 13:19

Magento, к счастью, практически не обращается к базе данных напрямую через SQL.
Вместо этого Magento использует свой вариант ORM.
Учётный объект "посетитель сайта" сохраняется в базе данных посредством вызова метода save класса Mage_Log_Model_Visitor_Online.

#3 Ярослав Федорук
  • Группа: Пользователь
  • Сообщений: 26
  • Регистрация: 23.01.2011

02.11.2011 14:04

Посмотрел, все равно не могу найти.
В Классе Mage_Log_Model_Visitor_Online такой функции нет. Есть в родителе. Хорошо создаем здесь.

Цитата

class Mage_Log_Model_Visitor_Online extends Mage_Core_Model_Abstract
{
.............


public function save(){
parent::save();
die('Mage_Log_Model_Visitor_Online');
}
}

Залогиниваемся на сайт... и ничего. Функция не вызывается.

#4 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8884
  • Регистрация: 20.02.2010

02.11.2011 14:13

Да, вы правы, объекты класса Mage_Log_Model_Visitor_Online сохраняются в базе данных нестандартным для Magento способом.
Сохранение происходит в ресурсной для Mage_Log_Model_Visitor_Online модели Mage_Log_Model_Resource_Visitor_Online путём вызова метода prepare.

Обратите ещё внимание, что в устаревших версиях Magento ресурсные модели имеют другие правила именования.
В устаревших версиях Magento надо смотреть класс Mage_Log_Model_Mysql4_Visitor_Online.

#5 Ярослав Федорук
  • Группа: Пользователь
  • Сообщений: 26
  • Регистрация: 23.01.2011

02.11.2011 14:41

Да, спасибо. Пытаюсь найти вызов, ставлю die:

Цитата

class Mage_Log_Model_Mysql4_Visitor_Online extends Mage_Core_Model_Mysql4_Abstract
{
protected function _construct()
{
die('test1');
$this->_init('log/visitor_online', 'visitor_id');
}

public function prepare(Mage_Log_Model_Visitor_Online $object)
{
die('test2');

Логин проходит без проблем, die не срабатывают.И Вот смотрите, еще например прохожу грепом

Цитата

grep -rn --exclude-dir=.svn --include=*\.php 'log/customer' .

нахожу что табличка 'log_customer' заполняется здесь

Цитата

./app/code/core/Mage/Log/Model/Mysql4/Visitor.php:157: $write->insert($this->getTable('log/customer'), array(

апдейтится здесь

Цитата

./app/code/core/Mage/Log/Model/Mysql4/Visitor.php:168: $write->update($this->getTable('log/customer'),


видно явные запросы в базу данных. Но ничего подобного нет для 'log_visitor_online'
деалю так

Цитата

grep -rn --exclude-dir=.svn --include=*\.php 'log/visitor_online' .

и на выходе

Цитата

./app/code/core/Mage/Log/sql/log_setup/mysql4-upgrade-0.7.5-0.7.6.php:32:$installer->getConnection()->modifyColumn($installer->getTable('log/visitor_online'), 'remote_addr', 'bigint(20) NOT NULL');
./app/code/core/Mage/Log/Model/Mysql4/Visitor/Online.php:44: $this->_init('log/visitor_online', 'visitor_id');
./app/code/core/Mage/Log/Model/Mysql4/Visitor/Online/Collection.php:50: $this->_init('log/visitor_online');
./app/code/core/Mage/Log/Model/Visitor/Online.php:46: $this->_init('log/visitor_online');
./app/code/core/Mage/Adminhtml/Block/Customer/Online/Grid.php:56: $collection = Mage::getModel('log/visitor_online')
./app/code/local/Mage/Adminhtml/Block/Customer/Online/Grid.php:56: $collection = Mage::getModel('log/visitor_online')


ни инсерта, ни апдейта, ничего... как будто мадженто вообще не трогает ее никогда.

#6 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8884
  • Регистрация: 20.02.2010

02.11.2011 15:02

Вызов метода Mage_Log_Model_Resource_Visitor_Online::prepare происходит в методе Mage_Adminhtml_Block_Customer_Online_Grid::_prepareCollection

Поделиться темой: