Magento показать и изменить поле номера отслеживания в обзоре заказа - PullRequest
0 голосов
/ 04 февраля 2012

Кто-нибудь знает, как программно показать и сделать поле редактируемым для поля номера отслеживания в обзоре заказа?

Я думаю об этом.

шаг 1. Сначала включите отображение поля отслеживания в Grid.php, так что продолжайте ... У кого-нибудь есть пример, как добавить столбец?(и в этом отношении скрыть существующий столбец)

Добавьте это в /etc/config.xml под событиями, чтобы Magento знал, как вызывать

<core_block_abstract_prepare_layout_before>
    <observers>
    <SNH_ShipMailInvoice_Observer_addTrackingColumnToGrid>
        <type>model</type>
        <class>SNH_ShipMailInvoice_Model_Observer</class>
        <method>addTrackingColumnToGrid</method>
    </SNH_ShipMailInvoice_Observer_addTrackingColumnToGrid>
    </observers>
</core_block_abstract_prepare_layout_before>

шаг 2.a Затем заполните таблицу с кодом отслеживания, если применимо

Поэтому сначала добавьте поле в /Model/Observer.php (которое отвечает на шаг 1)

public function addTrackingColumnToGrid($observer)
{
// this will return the block name for every block triggered by the observer
$block = $observer->getEvent()->getBlock();

// filter - we only want the block for the sales order grid
if ($block instanceof Mage_Adminhtml_Block_Sales_Order_grid){
    // well, that was easy!
    $block->addColumn('tracking_number', array(
        'header' => Mage::helper('sales')->__('Tracking number'),
        'index' => 'tracking_number',
        'type' => 'input',
        'width' => '120px',
        'renderer' => 'SNH_ShipMailInvoice_Block_Adminhtml_Renderer_addTrackingColumnToGrid'
    ));

}
}

шаг 2.b Затем нам нужно заполнить поле доступной информацией для отслеживания

'renderer' => 'SNH_ShipMailInvoice_Block_Adminhtml_Renderer_addTrackingColumnToGrid'

должен вызвать addTrackingColpBlock / Adminhtml / Renderer / addTrackingColumnToGrid.php

* ТЕКУЩАЯ ПРОБЛЕМА: ОШИБКА ** Вот где я получаю свою белую страницу нетответ

шаг 2.c Поиск номера отслеживания для заказа в строке.В настоящее время не проверено / не подтверждено

// HOW DO I POPULATE VAR $order for each line? 
$shipmentCollection = Mage::getResourceModel('sales/order_shipment_collection')->setOrderFilter($order)->load();

foreach ($shipmentCollection as $shipment){     
    // This will give me the shipment IncrementId, but not the actual tracking information.
    foreach($shipment->getAllTracks() as $tracknum) {
        $tracknums[]=$tracknum->getNumber(); }  
        // How to show the tracking information     
        // CODE HERE 
    }
}

шаг 3 Затем, когда я нажимаю опцию выпадающего меню Masssaction (уже запрограммировано), бэкэнд должен обрабатывать только выбранные элементы и сохранять идентификатор отслеживания для отгрузки.(который создается вскоре после этого)

(и после этого продолжить счет и отправить)

Заранее спасибо

1 Ответ

3 голосов
/ 05 февраля 2012

Если я могу предложить что-то попроще:

  1. Добавьте столбец с номером отслеживания.
  2. Если номер для отслеживания не существует, ссылка «Добавить отслеживание».
  3. Если номер отслеживания существует, укажите номер отслеживания в виде гиперссылки. Также под ним есть ссылка «Добавить отслеживание» для нескольких номеров отслеживания на заказ.
  4. При нажатии на ссылку «Добавить отслеживание» ссылка преобразуется в текстовое поле. При щелчке номера отслеживания (если имеется), номер преобразования преобразуется в текстовое поле, предварительно заполненное значением номера отслеживания (для редактирования).
  5. Нажатие на кнопку преобразует текстовые поля обратно в текстовые ссылки после сохранения. Я рекомендую «загрузку» визуальной подсказки во время процесса сохранения.

Как добавить столбец в сетку заказа клиента

Настройка наблюдателя событий. (Вы можете использовать перезапись в файле config.xml, но это может привести к конфликтам с другими модулями.)

<adminhtml>
    <events>
        <core_block_abstract_prepare_layout_before>
            <observers>
                <Namespace_Module_Observer_addTrackingColumnToGrid>
                    <type>model</type>
                    <class>Namespace_Module_Observer</class>
                    <method>addTrackingColumnToGrid</method>
                </Namespace_Module_Observer_addTrackingColumnToGrid>
            </observers>
        </core_block_abstract_prepare_layout_before>
    </events>
</adminhtml>

Создайте своего наблюдателя в ./app/code/local/Namespace/Module/Model/Observer.php. Это должно выглядеть примерно так.

<?php
class Namespace_Module_Model_Observer
{
    public function addTrackingColumnToGrid($observer)
    {
        // this will return the block name for every block triggered by the observer
        $block = $observer->getEvent()->getBlock();

        // filter - we only want the block for the sales order grid
        if ($block instanceof Mage_Adminhtml_Block_Sales_Order_grid){

            // well, that was easy!
            $block->addColumn('tracking_number', array(
                'header' => Mage::helper('sales')->__('Tracking number')
            ));

        }
    }
}

Попробуйте поискать в Mage_Adminhtml_Block_Widget_Grid подсказки о том, как использовать метод addColumn. Это в значительной степени универсально для всех сеток админки Magento, что приятно. Если вы хотите добавить пользовательские функции (помимо простого извлечения данных), тем не менее, есть очень хороший шанс выяснить, как применять «средства визуализации».

Как только вы выяснили эту часть, вам просто нужно настроить контроллер Ajax и добавить немного JavaScript для передачи информации об обновлении на ваш контроллер.

Это довольно широкий вопрос, поэтому я не могу сделать все это для вас (без написания расширения), но постараюсь помочь вам в этом.

Что бы это ни стоило, вы можете заглянуть в модуль Tracking Import на Creativemgroup.com. Word on the street - готовящаяся к выпуску версия этого модуля, включающая в себя необходимую функцию редактирования на месте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...