Quantcast
Channel: Backend – Marcel Schmidt Wiki / Neuigkeiten
Viewing all articles
Browse latest Browse all 10

Magento Aktionen im Product-Grid erweitern und Produkte schnell anpassen (add Massaction Option to Productgrid)

$
0
0

Folgend möchte ich zeigen, wie man die Aktionen im Product-Grid erweitert und somit ganz einfach ein Produktattribut für mehrere Produkte direkt im Grid verändern können, ohne jedes Produkt extra aufrufen zu müssen. Wenn ein Zusatztool wie „Enhanced Product Grid“ eingesetzt wird (dieses erweitert die Spalten des Standard-Grids), dann muss die Action-Funktion auch in den Controller des Zusatztools eingetragen werden, sonst erhalten man einen 404 Fehler, da der Controller bereits überschrieben wurde und nicht zweimal überschrieben werden kann.

Gibt es im System die Extension „Flagbit“ -> „ChangeAttributeSet“ dann sollte diese erweitert werden.

Mit dem folgenden Beispiel kann man KategorieIds direkt über das Grid für mehrere Produkte setzen.

Dateien anlegen:
——————-
/add/code/core/local/M28visions/ChangeAttribute/etc/config.xml
/add/code/core/local/M28visions/ChangeAttribute/Model/Observer.php
/add/code/core/local/M28visions/ChangeAttribute/controllers/Adminhtml/Catalog/ProductController.php
/app/etc/modules/M28visions_ChangeAttribute.xml

Inhalte:
——————–
/add/code/core/local/M28visions/Changeattribute/etc/config.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?xml version="1.0" encoding="UTF-8"?>
<config>
	<modules>
		<M28visions_ChangeAttribute>
			<version>2.0.0</version>
		</M28visions_ChangeAttribute>
	</modules>
 
	<global>
        <models>
            <m28visions_changeattribute>
                <class>M28visions_ChangeAttribute_Model</class>
            </m28visions_changeattribute>
		</models>
	</global>
    <adminhtml>        
        <events>
            <adminhtml_block_html_before>
                <observers>
                    <m28visions_changeattribute>
                        <type>singleton</type>
                        <class>m28visions_changeattribute/observer</class>
                        <method>addMassactionToProductGrid</method>
                    </m28visions_changeattribute>
                </observers>
            </adminhtml_block_html_before>
		</events>        
    </adminhtml>
 
    <admin>
        <routers>
            <adminhtml>
                <args>
                    <modules>
                        <M28visions_ChangeAttribute before="Mage_Adminhtml">M28visions_ChangeAttribute_Adminhtml</M28visions_ChangeAttribute>
                    </modules>
                </args>
            </adminhtml>
        </routers>
    </admin>		
 
</config>

/add/code/core/local/M28visions/ChangeAttribute/Model/Observer.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
/**
 * ChangeAttribute Observer Model
 *
 */
class M28visions_ChangeAttribute_Model_Observer
{
 
    /**
     * add Massaction Option to Productgrid
     * 
     * @param $observer Varien_Event
     */
    public function addMassactionToProductGrid($observer)
    {
        $block = $observer->getBlock();
        if (($block instanceof Mage_Adminhtml_Block_Catalog_Product_Grid)
                || ($block instanceof TBT_Enhancedgrid_Block_Catalog_Product_Grid)) {
            $sets = Mage::getResourceModel('eav/entity_attribute_set_collection')
                ->setEntityTypeFilter(Mage::getModel('catalog/product')->getResource()->getTypeId())
                ->load()
                ->toOptionHash();
 
            $block->getMassactionBlock()->addItem('m28visions_setcategory', array(
                'label'=> Mage::helper('catalog')->__('Kategorie setzen'),
                'url'  => $block->getUrl('*/*/setcategory', array('_current'=>true)),
                'additional' => array(
                    'visibility' => array(
                        'name' => 'category_ids',
                        'type' => 'text',
                        'class' => 'required-entry',
                        'label' => Mage::helper('catalog')->__('Category')
                    )
                )
            ));
 
        }
    }
}

/add/code/core/local/M28visions/ChangeAttribute/controllers/Adminhtml/Catalog/ProductController.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?php
/**
 * ChangeAttribute Controller
 *
 */
class M28visions_ChangeAttribute_Adminhtml_Catalog_ProductController extends Mage_Adminhtml_Controller_Action
{
 
	/**
	 * Product list page
	 */
 
	public function setcategoryAction()
	{
		$productIds = $this->getRequest()->getParam('product');
		$storeId = (int)$this->getRequest()->getParam('store', 0);
		if (!is_array($productIds)) {
			$this->_getSession()->addError($this->__('Please select product(s)'));
		}
		else {
			try {
				foreach ($productIds as $productId) {
					$product = Mage::getSingleton('catalog/product')
						->unsetData()
						->setStoreId($storeId)
						->load($productId)
						->setCategoryIds($this->getRequest()->getParam('category_ids'))
						->setIsMassupdate(true)
						->save();
				}
				Mage::dispatchEvent('catalog_product_massupdate_after', array('products'=>$productIds));
				$this->_getSession()->addSuccess(
					$this->__('Total of %d record(s) were successfully updated', count($productIds))
				);
			}
			catch (Exception $e) {
				$this->_getSession()->addException($e, $e->getMessage());
			}
		}
		$this->_redirect('adminhtml/catalog_product/index/', array());
	}	
 
}

/app/etc/modules/M28visions_ChangeAttribute.xml

1
2
3
4
5
6
7
8
<config>
	<modules>
		<M28visions_ChangeAttribute>
			<active>true</active>
			<codePool>local</codePool>
		</M28visions_ChangeAttribute>
	</modules>
</config>

Viewing all articles
Browse latest Browse all 10