Рекомендуется ли добавлять собственный файл в папку lib / Varien / Data / Form / Element - PullRequest
3 голосов
/ 20 мая 2011

Мне нужно создать модуль в Magento, который будет иметь несколько таблиц базы данных.Одной из функций модуля является добавление нескольких изображений.Например, находясь на странице " Добавить новый элемент " или " Редактировать элемент " в админке, с левой стороны у меня есть вкладки, одна из которых - " Элементизображения ».При нажатии я хочу, чтобы содержимое этой вкладки было моим собственным.Покопавшись в коде, выяснив, что способ рендеринга этого содержимого, Magento использует один из классов Varien_Data_Form_Element для каждого элемента в полной форме.Я хочу добавить свой собственный класс, который будет отображать элементы формы так, как я хочу.Это хорошая практика, или есть какой-то другой более элегантный способ добавления собственного контента в формы администратора?РЕДАКТИРОВАТЬ: Я должен добавить, что ни один из существующих классов не помогает моей проблеме.

РЕДАКТИРОВАНИЕ РЕШЕНИЯ: у меня есть контроллер в моем пользовательском модуле, который находится в Mypackage / Mymodule / controllers / Adminhtml / Item.php.В методе editAction () , который я использую для добавления и создания новых элементов, я создаю 2 блока, один для формы и один слева для вкладок:

$this->_addContent($this->getLayout()->createBlock('item/adminhtml_edit'))
                    ->_addLeft($this->getLayout()->createBlock('item/adminhtml_edit_tabs'));
$this->renderLayout();

Block / Adminhtml / Edit / Tabs.php блок создает 2 вкладки слева: Общая информация и Изображения элементов , каждая из которых отображает различный контент нас правой стороны, используя классы блока.

protected function _beforeToHtml()
{
   $this->addTab('item_info', array(
        'label' => Mage::helper('mymodule')->__('Item Info'),
        'content'=> $this->getLayout()->createBlock('item/adminhtml_edit_tab_form')->toHtml(),
        ));

   $this->addTab('item_images', array(
        'label' => Mage::helper('mymodule')->__('Item Images'),
        'active' => ( $this->getRequest()->getParam('tab') == 'item_images' ) ? true : false,
        'content' => $this->getLayout()->createBlock('item/adminhtml_images')->toHtml(),
        ));

   return parent::_beforeToHtml();
}

Я хотел, чтобы вкладка item_images отображала мои собственные элементы формы и значения, а не элементы формы varien по умолчанию.

class Mypackage_Mymodule_Block_Adminhtml_Images extends Mage_Core_Block_Template
{
    public function __construct()
    {
        parent::__construct();
        $this->setTemplate('item/images.phtml'); //This is in adminhtml design
    }


    public function getPostId()
    {
    return $this->getRequest()->getParam('id');
    }

    public function getExistingImages()
    {
        return Mage::getModel('mymodule/item')->getImages($this->getPostId());
    }
}

Затем в шаблоне приложения / design / adminhtml / default / default / template / item / images.phtml вы можете использовать следующие значения:

//You can add your own custom form fields here and all of them will be included in the form
foreach($this->getExistingImages() as $_img):
//Do something with each image
endforeach;
//You can add your own custom form fields here and all of them will be included in the form

1 Ответ

5 голосов
/ 21 мая 2011

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

lib/Varien/Data/Form/Element/Text.php

Вы должны поместить файл в локальный пул или пул кодов сообщества

app/code/local/Varient/Data/Form/Element/Text.php

Однако, сделав заменукласс, и это становится вашей обязанностью поддерживать совместимость с будущими версиями.Это означает, что если Magento Inc. изменит lib/Varien/Data/Form/Element/Text.php, вам нужно обновить свою версию, чтобы она была совместимой.

Исходя из того, что вы сказали, я посмотрю на создание переписывания класса для класса Block, который отображает форму.

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