Проблема переопределения коллекции моделей
В настоящее время я пытаюсь создать модуль для исправления основной ошибки Magento, как описано здесь , однако после этого и перехода к Отчеты > Корзина покупок > Брошенные тележки , я получаю следующую ошибку:
Неустранимая ошибка: Вызов функции-члена prepareForAbandonedReport() на логическом в/home/stagestickers4/public_html/app/code/core/Mage/Adminhtml/Block/Report/Shopcart/Abandoned/Grid.php в режиме онлайн 57
App/etc/modules/COMPANY_AbandonCart.xml
<?xml version="1.0"?>
<config>
<modules>
<COMPANY_AbandonCart>
<active>true</active>
<codePool>local</codePool>
</COMPANY_AbandonCart>
</modules>
</config>
App/code/local/COMPANY/AbandonCart/Model/Resource/Quote/Collection.php
<?php
class COMPANY_AbandonCart_Model_Resource_Quote_Collection extends Mage_Reports_Model_Resource_Quote_Collection
{
public function addCustomerData($filter = null)
{
$customerEntity = Mage::getResourceSingleton('customer/customer');
$attrFirstname = $customerEntity->getAttribute('firstname');
$attrFirstnameId = (int) $attrFirstname->getAttributeId();
$attrFirstnameTableName = $attrFirstname->getBackend()->getTable();
$attrLastname = $customerEntity->getAttribute('lastname');
$attrLastnameId = (int) $attrLastname->getAttributeId();
$attrLastnameTableName = $attrLastname->getBackend()->getTable();
$attrMiddlename = $customerEntity->getAttribute('middlename');
$attrMiddlenameId = (int) $attrMiddlename->getAttributeId();
$attrMiddlenameTableName = $attrMiddlename->getBackend()->getTable();
$attrEmail = $customerEntity->getAttribute('email');
$attrEmailTableName = $attrEmail->getBackend()->getTable();
$adapter = $this->getSelect()->getAdapter();
$customerName = $adapter->getConcatSql(array('cust_fname.value', 'cust_mname.value', 'cust_lname.value',), ' ');
$this->getSelect()
->joinInner(
array('cust_email' => $attrEmailTableName),
'cust_email.entity_id = main_table.customer_id',
array('email' => 'cust_email.email')
)
->joinInner(
array('cust_fname' => $attrFirstnameTableName),
implode(' AND ', array(
'cust_fname.entity_id = main_table.customer_id',
$adapter->quoteInto('cust_fname.attribute_id = ?', (int) $attrFirstnameId),
)),
array('firstname' => 'cust_fname.value')
)
->joinLeft(
array('cust_mname' => $attrMiddlenameTableName),
implode(' AND ', array(
'cust_mname.entity_id = main_table.customer_id',
$adapter->quoteInto('cust_mname.attribute_id = ?', (int) $attrMiddlenameId),
)),
array('middlename' => 'cust_mname.value')
)
->joinInner(
array('cust_lname' => $attrLastnameTableName),
implode(' AND ', array(
'cust_lname.entity_id = main_table.customer_id',
$adapter->quoteInto('cust_lname.attribute_id = ?', (int) $attrLastnameId)
)),
array(
'lastname' => 'cust_lname.value',
'customer_name' => $customerName
)
);
$this->_joinedFields['customer_name'] = $customerName;
$this->_joinedFields['email'] = 'cust_email.email';
if ($filter) {
if (isset($filter['customer_name'])) {
$likeExpr = '%' . $filter['customer_name'] . '%';
$this->getSelect()->where($this->_joinedFields['customer_name'] . ' LIKE ?', $likeExpr);
}
if (isset($filter['email'])) {
$likeExpr = '%' . $filter['email'] . '%';
$this->getSelect()->where($this->_joinedFields['email'] . ' LIKE ?', $likeExpr);
}
}
return $this;
}
}
App/code/local/COMPANY/AbandonCart/etc/config.xml##
<?xml version="1.0"?>
<config>
<modules>
<COMPANY_AbandonCart>
<version>0.0.1</version>
</COMPANY_AbandonCart>
</modules>
<global>
<models>
<reports_resource>
<rewrite>
<quote_collection>COMPANY_AbandonCart_Resource_Quote_Collection</quote_collection>
</rewrite>
</reports_resource>
</models>
</global>
</config>
Я читал, что расширение коллекции немного отличается от расширения обычной модели - угадывание какой-то проблемы XML-related
?
2 answers
Ваше имя XML-класса неверно. Ваш класс модели
COMPANY_AbandonCart_Model_Resource_Quote_Collection
Но в вашем XML-переписывании говорится
COMPANY_AbandonCart_Resource_Quote_Collection
Редактировать:
- Это может быть основано на oppion, но я бы не стал исправлять ошибки в ядре с помощью перезаписей. Я бы скопировал исправленный файл в
local
кодовый пул (приложение/код/локальный/Mage/Reports/Model/Resource/Quote/Collection.php) - Исправляя это, вы также можете заменить другой
joinInner
наjoinLeft
- Возможно, используйте Magento-LTS вместо этого, где эта ошибка уже была исправлена;)
Измените свой app/code/local/COMPANY/AbandonCart/etc/config.xml с помощью приведенного ниже кода исправлена фатальная ошибка:
<?xml version="1.0"?>
<config>
<modules>
<COMPANY_AbandonCart>
<version>0.0.1</version>
</COMPANY_AbandonCart>
</modules>
<global>
<models>
<reports_resource>
<rewrite>
<quote_collection>COMPANY_AbandonCart_Model_Resource_Quote_Collection</quote_collection>
</rewrite>
</reports_resource>
</models>
</global>
</config>