Как установить форму виджета magento в enctype = "multipart / form-data" для загрузки файла? - PullRequest
2 голосов
/ 31 марта 2011

Я пытаюсь создать виджет для галереи, так как все модули, которые я видел, на самом деле не выполняют то, что мне нужно, и виджеты кажутся способом продвижения вперед, позволяющим конечному пользователю легко и удобно управлять размещением.

До сих пор я следовал Magento, как сделать учебник для виджетов:

http://www.magentocommerce.com/knowledge-base/entry/tutorial-creating-a-magento-widget-part-2/

, который позволил мне настроить нужные мне файлы и распознать вещи на заднем плане.

Теперь я могу добавить поле загрузки изображения с помощью приведенного ниже кода, но файл не загружается, похоже, это происходит из-за того, что enctype = "multipart / form-data" не устанавливается автоматически при добавлении поля файла.

Итак, я посмотрел и, кажется, вы можете добавить вспомогательный блок для формы виджета

местный / WebsiteDevelopment / GalleryWidget / и т.д. / Widget.xml

<?xml version="1.0"?>
<widgets>
    <WebsiteDevelopment_GalleryWidget type="widgets/list" translate="name description" module="GalleryWidget">
        <name>Banner Gallery</name>
        <description>Adds a full page width gallery</description>
        <parameters>
            <enabled_services>
                <label>Enabled Services</label>
                <visible>1</visible>
                <required>1</required>
                <type>multiselect</type>
                <source_model>WebsiteDevelopment_GalleryWidget_Model_Services</source_model>
            </enabled_services>
            <helper_block>
                <type>WebsiteDevelopment/GalleryWidget_Adminhtml_Edit_Form</type>
            </helper_block>
            <template translate="label">
                <label>Frontend Template</label>
                <visible>1</visible>
                <required>1</required>
                <type>select</type>
                <values>
                    <text translate="label">
                        <value>GalleryWidget/view.phtml</value>
                        <label>Text Links</label>
                    </text>
                </values>
            </template>
            <image>
                <label>Image One</label>
                <description>The first image for the banner</description>
                <visible>1</visible>
                <type>image</type>
            </image>
        </parameters>
    </WebsiteDevelopment_GalleryWidget>
</widgets> 

поэтому после того, как я добавлю свой блок помощников в раздел params в xml выше, я создаю свой помощник в WebsiteDevelopment / GalleryWidget / Block / Adminhtml / Edit / Form.php (который, я думаю, там, где и должен быть, я все еще не уверен должен ли блок быть в определенной структуре, подобной этой, для использования в бэкэнде), а затем добавить следующий код

WebsiteDevelopment / GalleryWidget / Block / Adminhtml / Редактировать / form.php

<?php
class WebsiteDevelopment_GalleryWidget_Block_Adminhtml_Edit_Form extends Mage_Adminhtml_Block_Widget_Form
{
    protected function _prepareForm()
    {
        $form = new Varien_Data_Form(array(
            'id' => 'edit_form',
            'enctype' => 'multipart/form-data'
        ));

        $form->setUseContainer(true);
        $this->setForm($form);
        return parent::_prepareForm();
    }
}

очевидно, что форме понадобятся еще некоторые атрибуты для полноценной работы, но я просто надеялся добавить в форму несколько других атрибутов, чтобы убедиться, что блок применяется.

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

Правильно ли я это делаю или нет?

1 Ответ

2 голосов
/ 19 октября 2012

Форма должна быть инициализирована следующим образом:

protected function _prepareForm()
{
    $form = new Varien_Data_Form(array(
                                  'id' => 'edit_form',
                                  'action' => $this->getUrl('*/*/save', array('id' => $this->getRequest()->getParam('id'),'store' => $this->getRequest()->getParam('store'))),
                                  'method' => 'post',
                                  'enctype' => 'multipart/form-data'
                               ));
    $form->setUseContainer(true);
    $this->setForm($form);
    return parent::_prepareForm();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...