Как в Magento CE 1.4 сменить прикладной тип товара нестандартными правками ядра, лишившись при этом возможности обновления Magento?

[16 июля 2019 г.]    Российская сборка Magento 2.52.2
Magento 2: модули и услуги
magereport.com: составление перечня необходимых для установки заплаток SUPEE
#1 dimekh
  • Группа: Пользователь
  • Сообщений: 107
  • Регистрация: 14.04.2010

19.02.2011 10:54

В маженто 1.4 пользовался этим методом:

1. в файле: app/code/core/Mage/Adminhtml/Block/Catalog/Product/Grid.php

перед строкой:

$this->getMassactionBlock()->addItem('attributes', array(


добавлял:

$sets = Mage::getResourceModel('eav/entity_attribute_set_collection')
            ->setEntityTypeFilter(Mage::getModel('catalog/product')->getResource()->getTypeId())
            ->load()
            ->toOptionHash();
        array_unshift($statuses, array('label'=>'', 'value'=>''));
        $this->getMassactionBlock()->addItem('attribute_set', array(
             'label'=> Mage::helper('catalog')->__('Change attribute set'),
             'url'  => $this->getUrl('*/*/massAttributeSet', array('_current'=>true)),
             'additional' => array(
                    'visibility' => array(
                         'name' => 'attribute_set',
                         'type' => 'select',
                         'class' => 'required-entry',
                         'label' => Mage::helper('catalog')->__('Изменить набор атрибутов'),
                         'values' => $sets
                     )
             )
        ));


2. в файле: app/code/core/Mage/Adminhtml/controllers/Catalog/ProductController.php

перед строкой:

protected function _isAllowed()


добавлял блок:

public function massAttributeSetAction()
    {
        $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)
                        ->setAttributeSetId($this->getRequest()->getParam('attribute_set'))
                        ->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()->addError($e->getMessage());
            }
        }
        $this->_redirect('*/*/', array('store'=>(int)$this->getRequest()->getParam('store', 0)));
    }


После изменения кода в magento commerce 1.4 появляется возможность смены набора атрибутов (attribute set) для уже добавленного товара.
Проверяем: в админ-панели заходим в главном меню затем “Catalog” – “Manage products” и в поле “Actions” должен появиться пункт “Изменить набор атрибутов“.

но в magento 1.5 этот вариант не работает. У кого-нибудь есть идеи на этот счет?

#2 dimekh
  • Группа: Пользователь
  • Сообщений: 107
  • Регистрация: 14.04.2010

15.04.2011 09:44

Кстати грохнул старую компиляцию, усе заработало и в 1.5
Пользуйтесь.

#3 rootvm
  • Группа: Клиент
  • Сообщений: 8
  • Регистрация: 13.03.2012

06.06.2012 05:57

Что значит грохнули старую компиляцию? В последней версии достаточно будет внести указанные изменения чтоб функция заработала?

Второй вопрос что при этом происходит с БД? Разработчик подобного модуля так комментирует:
The extension simply switches the Attribute-Set-ID. Which has a side effect: If you switch back your attribute values are still present. BUT it may also litter your database as the values not used anymore still use up space in your database. If you have lots of products you may want to clean up this.

Третий вопрос, что будет с функцией при дальнейших апдейтах?

Спасибо.

Поделиться темой: