Magento ограничить продукты администратора - PullRequest
1 голос
/ 19 декабря 2011

В настоящее время я работаю над Magento, и мне просто интересно, знает ли кто-нибудь, где я могу изменить коллекцию, используемую для Mage_Adminhtml_Catalog_ProductController (app / code / core / Mage / Adminhtml / controllers /Catalog/ProductController.php)? Какой метод я переписываю / создаю, чтобы изменить отображаемые продукты?

РЕДАКТИРОВАТЬ1: Я бы предпочел использовать наблюдателей, т.е. к какому событию мне нужно применить свой код?

EDIT2: лучше всего добавить сюда то, чего я пытаюсь достичь; Я добавил дополнительный атрибут к продуктам, который указывает, какой администратор добавил этот конкретный продукт. Теперь в панели администратора, когда пользователь просматривает список продуктов, он видит только продукты, в которых атрибутом является его идентификатор администратора.

РЕДАКТИРОВАТЬ3: Я только что наткнулся на catalog_product_load_after наблюдателя событий, и я не уверен, что это правильный, но это то, что у меня есть:

confix.xml

<?xml version="1.0"?>
<config>
    <adminhtml>
        <events>
            <catalog_product_load_after> <!-- Name of Event -->
                <observers>
                    <load_after> <!-- Any Unique Identifier -->
                        <type>singleton</type>
                        <class>Drench_Admindetails_Model_Observer</class> <!-- Over Model Class -->
                        <method>loadAfter</method> <!-- name of function -->
                    </load_after>
                </observers>
            </catalog_product_load_after>
        </events>
    </adminhtml>
</config>

и Model / Observer.php

<?php
class Drench_Admindetails_Model_Observer{
    public function loadAfter(){
        fb('testasd'); // this just a firephp call
    }
}

Ответы [ 2 ]

1 голос
/ 19 декабря 2011

Вы можете слушать catalog_product_collection_load_before или catalog_product_collection_load_after.

Чтобы найти интересующее вас событие, используйте технику Alan Storm: отредактируйте метод app / Mage.php dispatchEvent (), добавив эту строку в начале:

Mage::log('Event: ' . $name, null, 'events.log');

Это запишет все события в файл /var/log/events.log.
Я бы поставил ссылку на оригинальный пост Алана, но сейчас не могу его найти: если кто-нибудь найдет его, я обновлю свой ответ.

1 голос
/ 19 декабря 2011

Самый быстрый способ - скопировать этот файл

app/code/core/Mage/Adminhtml/Block/Catalog/Product/Grid.php

в локальную область и добавьте новый фильтр в функцию _prepareCollection ().

Однако это не может быть улучшено. Для решения с поддержкой обновления я предлагаю создать новый модуль Magento и добавить туда фильтр для функции _prepareCollection ().

...