Работа с admin grid в Magento 1.9

145
26 февраля 2018, 02:20

Есть три таблиць в БД (catalog/category) - стандартная таблица мадженто, labels и label_for_category(id_endity, id_category, id_label). В гриде выводится название категории и картинка которую я прикрепил к категории.

protected function _prepareCollection()
{
    $collection = Mage::getModel('catalog/category')->getCollection()->addAttributeToSelect('name');
    $collection->getSelect()
        ->joinLeft(array('category' => $collection->getTable('productlabels/category_check_list')), 'e.entity_id = category.id_category')
        ->joinLeft(array('labels' => $collection->getTable('productlabels/table_labels')), 'category.id_label = labels.id_label');
    $this->setCollection($collection);
    return parent::_prepareCollection();
}
protected function _prepareColumns()
{   
    $helper = Mage::helper('productlabels');
    $this->addColumn('name', array(
        'header' => $helper->__('Name'),
        'index'  => 'name',
    ));
    $this->addColumn('category_page_image', array(
        'header' => $helper->__('Label Image'),
        'index'  => 'category_page_image',
        'type' => 'image',
        'renderer' => 'Plumrocket_Productlabels_Block_Adminhtml_Renderer_Image',
        'filter'    => false,
        'sortable'  => false,
        'align' => 'center',
    ));
    return parent::_prepareColumns();
}
public function getRowUrl($row)
{
    return $this->getUrl('*/*/edit', array('id_entity' => $row->getId()));
}

В форме редактирования нужно вывести название категории и поле select с названиями лейблов.

    protected function _prepareForm()
{
    $helper = Mage::helper('productlabels');
    $model = Mage::registry('current_category');
    $form = new Varien_Data_Form(array(
                'id' => 'edit_form',
                'action' => $this->getUrl('*/*/save', array(
                    'id_entity' => $this->getRequest()->getParam('id_entity')
                )),
                'method' => 'post',
            ));
    $this->setForm($form);
    $legend = $this->getRequest()->getParam('id_entity')?'Edit label':'Create new label';
    $fieldset = $form->addFieldset('label_form', array('legend' => $helper->__($legend)));
    $fieldset->addField('name', 'label', array(
        'label' => $helper->__('Name of category'),
        'name' => 'name',
    ));
    $fieldset->addField('entity_id', 'hidden', array(
        'name' => 'id_category',
    ));
    $fieldset->addField('id_entity', 'hidden', array(
        'name' => 'id_entity',
    ));
    $fieldset->addField('id_label', 'select', array(
    'label' => $helper->__('Name of category'),
    'name' => 'id_label',
    'values' => Mage::getModel('productlabels/block')->getCollection()->getTitle(),
    ));
    $form->setUseContainer(true);
    if($data = Mage::getSingleton('adminhtml/session')->getFormData()){
        $form->setValues($data);
    } else {
        $form->setValues($model->getData());
    }
    return parent::_prepareForm();
}

Вот контролеры

    public function editAction()
{   
    $id = $this->getRequest()->getParam('id_entity');
    Mage::register('current_category', Mage::getModel('catalog/category')->load($id));
    $this->loadLayout();
    $this->_addContent($this->getLayout()->createBlock('productlabels/adminhtml_category_edit'));
    $this->renderLayout();
}
public function saveAction()
{
    if ($data = $this->getRequest()->getPost()) {
        try {
            $model = Mage::getModel('productlabels/category');
            $model->setData($data)->setId();
            if(!$model->getCreated()){
                $model->setCreated(now());
            }
            $model->save();
            Mage::getSingleton('adminhtml/session')->addSuccess($this->__('Label was saved successfully'));
            Mage::getSingleton('adminhtml/session')->setFormData(false);
            $this->_redirect('*/*/');
        } catch (Exception $e) {
            Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
            Mage::getSingleton('adminhtml/session')->setFormData($data);
            $this->_redirect('*/*/edit', array(
                'id_entity' => $this->getRequest()->getParam('id_entity')
            ));
        }
        return;
    }
    Mage::getSingleton('adminhtml/session')->addError($this->__('Unable to find item to save'));
    $this->_redirect('*/*/');
}

Проблема решаеться если в editAction зарегестрировать три модели под одним названием

Mage::registry('current_category',
Mage::getModel('catalog/category'),
Mage::getModel('productlabels/label_for_category')

и

Mage::getModel('productlabels/category')

или каким то способом передать ети три модели в Form.php + обыеденить их.

READ ALSO
Задать разные фильтры к разным меню?

Задать разные фильтры к разным меню?

Здравствуйте! подскажите как решить, на странице есть меню, в шапке, и в подвале, я применил фильтры к меню как сделать разные фильтры, к разным...

176
Запись в куки, php

Запись в куки, php

есть файл "loginphp", в нём я создаю куку

165
Отправка данных не поступает в базу данных, пересмотрел код 10 раз, не могу найти ошибку

Отправка данных не поступает в базу данных, пересмотрел код 10 раз, не могу найти ошибку

Это код create_userhtml, сама форма регистрация и отправка данных в create_user

202
Можно ли создавать классы, содержащие объекты этого же класса?

Можно ли создавать классы, содержащие объекты этого же класса?

Можно ли создавать классы, содержащие в качестве данных объекты этого же класса, указатели/ссылки на такие объекты, их массивы?

169