|
Автор |
Сообщение |
den
Старожил
Зарегистрирован: 31.01.2006 Сообщения: 13870 Откуда: Кировоград, Украина
|
|
|
|
Есть в Magento 1.x такой отчет: брошенные корзины. Когда юзер заходит на сайт, набросает что-то в корзину, а потом не доводит покупку до логического конца. Этот отчет и отображает такие ситуации.
Проблема в том, что этот отчет по умолчанию сортируется только по полю updated_at и в панели админа этот порядок никак не изменить. Грид тоже без возможности сортировки.
По умолчанию порядок сортировки хард-кодирован в функции prepareForAbandonedReport:
Код: |
public function prepareForAbandonedReport($storeIds, $filter = null)
{
$this->addFieldToFilter('items_count', array('neq' => '0'))
->addFieldToFilter('main_table.is_active', '1')
->addSubtotal($storeIds, $filter)
->addCustomerData($filter)
[b] ->setOrder('updated_at');[/b]
if (is_array($storeIds) && !empty($storeIds)) {
$this->addFieldToFilter('store_id', array('in' => $storeIds));
}
return $this;
} |
Меня это мало устраивает. Точнее мне то пофиг вообще (чем меня реже трогают, тем мне лучше), менеджеры жалуются, что не могут полноценно работать с гридом. Ну да, выгрузить грид в CSV, а потом в excel сделать сортировку - занятие то еще.
В общем полез искать решение. Решение далось не сразу, но все свои пробы и ошибки выкладывать не буду. Сразу результат.
Итак, лезем в app/code/core/Mage/Adminhtml/Block/Report/Shopcart/Abandoned. Открываем файл Grid.php. Собственно, он там будет один, так что даже косоглазые не промахнутся.
Сначала нам нужно реализовать возможность сортировки по заданным колонкам грида. Для этого находим вызовы метода addColumn() - в функции _prepareColumns() и для нужных нам (менеджерам) колонок делаем sortable = true:
Код: |
$this->addColumn('updated_at', array(
'header' =>Mage::helper('reports')->__('Updated At'),
'width' =>'170px',
'type' =>'datetime',
'index' =>'updated_at',
'filter_index'=>'main_table.updated_at',
[b] 'sortable' =>true[/b]
)); |
Можно сохранить файл прямо сейчас и открыть отчет снова. Возможность сортировки будет, но самой сортировки - нет. То есть кликнуть по столбцу и изменить порядок сортировки можно, но коллекция будет выводиться в прежнем порядке.
Теперь идем в функцию _prepareCollection() добавляем код:
Код: |
$sort = $this->getRequest()->getParam('sort');
$dir = $this->getRequest()->getParam('dir');
if (isset($sort) && isset($dir)) {
$collection->getSelect()->order("$sort $dir");
} |
Когда мы кликаем на заголовке и выбираем порядок сортировки передаются два параметра - sort (название столбца) и dir (направление - asc или desc). Собственно, все что нам остается - это отсортировать коллекцию, что мы и делаем методом order. Приведенный кусок кода нужно вставить перед строкой:
Код: |
$this->setCollection($collection); |
Собственно все, надеюсь, сэкономил кому-то пару десятков, а то и сотен баксов. |
|
Вернуться к началу |
dhsilabs@jabber.ru |
|
|
Сергей Борисович
Завсегдатай
Зарегистрирован: 13.10.2012 Сообщения: 760
|
|
|
|
Грид , это что ? |
|
Вернуться к началу |
|
|
den
Старожил
Зарегистрирован: 31.01.2006 Сообщения: 13870 Откуда: Кировоград, Украина
|
|
|
|
Сетка, таблица |
|
Вернуться к началу |
dhsilabs@jabber.ru |
|
|
Сергей Борисович
Завсегдатай
Зарегистрирован: 13.10.2012 Сообщения: 760
|
|
|
|
Понятно. |
|
Вернуться к началу |
|
|
|
|
 Главная страница сайта
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|