Сетка заказов Magento, приобретенная в магазине в одной строке


Это не самый конструктивный вопрос для разработки Magento. Но это, безусловно, то, что приводит меня в замешательство...

В сетке заказов magento на задней панели мы видим, что заказ занимает несколько строк пространства. 3 вместо 1 [в колонке, купленной в (Магазине)]. Это потому, что у нас есть многоэтажный магазин. Результат заключается в том, что мы видим 1/3 от обычного количества заказов на 1 экране. Ничего особенного, но я хочу кое-что изменить.

Мой вопрос: Как могу ли я изменить текст в столбце, купленном в (Магазине)? Я бы хотел, чтобы это было имя представления магазина или домен магазина. И, возможно, при наведении курсора мыши отображается заголовок, который показывает всю последовательность. Пример ниже.

Я смотрю на/app/code/core/Mage/Adminhtml/Block/Sales/Order/Grid.php но не знаю, как идти дальше и на самом деле изменить это.

@Mage/Ebay: Также я думаю, что это должно быть что-то, что можно включить/выключить в конфигурации на будущее версии.

enter image description here

Author: snh_nl, 2014-02-22

2 answers

Вы находитесь в нужном месте, чтобы начать свое расследование по адресу app/code/core/Mage/Adminhtml/Block/Sales/Order/Grid.php. Взгляд на _prepareColumns() указывает на средство визуализации для этого столбца:

protected function _prepareColumns()
{
    //snip...

    if (!Mage::app()->isSingleStoreMode()) {
        $this->addColumn('store_id', array(
            'header'    => Mage::helper('sales')->__('Purchased From (Store)'),
            'index'     => 'store_id',
            'type'      => 'store',
            'store_view'=> true,
            'display_deleted' => true,
        ));
    }

    //snip...
}

type приведет к тому, что этот столбец будет отображен методом Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Store::render():

public function render(Varien_Object $row)
{
    $out = '';
    $skipAllStoresLabel = $this->_getShowAllStoresLabelFlag();
    $skipEmptyStoresLabel = $this->_getShowEmptyStoresLabelFlag();
    $origStores = $row->getData($this->getColumn()->getIndex());

    if (is_null($origStores) && $row->getStoreName()) {
        $scopes = array();
        foreach (explode("\n", $row->getStoreName()) as $k => $label) {
            $scopes[] = str_repeat(' ', $k * 3) . $label;
        }
        $out .= implode('<br/>', $scopes) . $this->__(' [deleted]');
        return $out;
    }

    if (empty($origStores) && !$skipEmptyStoresLabel) {
        return '';
    }
    if (!is_array($origStores)) {
        $origStores = array($origStores);
    }

    if (empty($origStores)) {
        return '';
    }
    elseif (in_array(0, $origStores) && count($origStores) == 1 && !$skipAllStoresLabel) {
        return Mage::helper('adminhtml')->__('All Store Views');
    }

    $data = $this->_getStoreModel()->getStoresStructure(false, $origStores);

    foreach ($data as $website) {
        $out .= $website['label'] . '<br/>';
        foreach ($website['children'] as $group) {
            $out .= str_repeat('&nbsp;', 3) . $group['label'] . '<br/>';
            foreach ($group['children'] as $store) {
                $out .= str_repeat('&nbsp;', 6) . $store['label'] . '<br/>';
            }
        }
    }

    return $out;
}

Какой ужасный метод! Самое большее, классы блоков должны обрабатывать логику представления и подготавливать данные для визуализации в контексте шаблона. Здесь мы видим негибкое сочетание логики и разметки. Поэтому у вас есть два варианта настройки это:

  1. перепишите этот метод так, чтобы выходные данные были помечены так, как вам нравится, или
  2. перепишите класс сетки, чтобы изменить используемый тип средства визуализации.

Любой случай может быть оправдан. Вариант № 1 является наиболее прямым, но он, вероятно, повлияет на другие представления, которые используют тот же рендер. Если это то, чего вы хотите, тогда идите на это. Для последнего вы должны объявить пользовательскую группу классов блоков модулей, переписать класс сетки заказов на продажу и указать ваш пользовательский визуализатор в параметре type.

Вы не одиноки в том, что просите eBay/Magento сделать это более гибким. Существует проект хакатона, который сделал сетки настраиваемыми в XML, и В Magento 2 это указано в качестве функции.

 1
Author: benmarks, 2014-02-22 15:41:43

Я установил значение store_view в значение false в файле/app/code/core/Mage/Adminhtml/Block/Sales/Order/Grid.php

Было бы здорово, если бы можно было установить это через конфигурацию в бэкэнде

    if (!Mage::app()->isSingleStoreMode()) {
        $this->addColumn('store_id', array(
            'header'    => Mage::helper('sales')->__('Purchased From (Store)'),
            'index'     => 'store_id',
            'type'      => 'store',
            'store_view'=> false,
            'display_deleted' => true,
        ));
    }

И редактировать/app/code/core/Mage/Adminhtml/Block/Widget/Grid/Column/Renderer/Store.php

Визуализация функций

/**        foreach ($data as $website) {
            $out .= $website['label'] . '<br/>';
            foreach ($website['children'] as $group) {
                $out .= str_repeat('&nbsp;', 3) . $group['label'] . '<br/>';
                foreach ($group['children'] as $store) {
                    $out .= str_repeat('&nbsp;', 6) . $store['label'] . '<br/>';
                }
            }
        }
**/

НОВАЯ СТРОКА:

foreach ($data as $website) { $out .= $website['label'];}

И в то время как при этом изменилась ширина столбца даты $this->AddColumn('created_at'

  • Наш формат даты не является AM/PM и установлен на 24 часа в конфигурация->каталог
  • и почему эта строка даты должна быть длиннее ширины столбца?
 1
Author: snh_nl, 2014-03-15 19:33:33