0

Magento CMS ページ内にカスタム イメージ フィールドを作成しようとしています。

これは私が取った手順です。

  1. 「バナー」と呼ばれるデータベース内に cms_page で追加の列を作成しました - これは varchar (255) です。

  2. 「app/code/core/Mage/Adminhtml/controllers/Cms/PageController.php」をアップローダ コードで修正しました (下部を参照)。

  3. 「app/code/core/Mage/Adminhtml/Block/Cms/Page/Edit/Tab/Content.php」を修正し、フィールド タイプが「image」である「banner」という新しいフィールドを追加しました。

  4. 「var/cache/」および「var/session/」内のすべてを削除しました

データベース内でファイル名をアップロード/保存していないだけです。何が起こっているのかを診断するために、saveAction() のすぐ下に print_r($_FILES) を追加すると、空の配列が返されました。

重要なステップを見逃していませんか?

関連するコードは次のとおりです。

app/code/core/Mage/Adminhtml/controllers/Cms/PageController.php -

public function saveAction()
{
    if ($data = $this->getRequest()->getPost()) {
        $data = $this->_filterPostData($data);
        //init model and set data
        $model = Mage::getModel('cms/page');


            if(isset($data['banner']['delete']) && $data['banner']['delete']=='1'){
                if(!empty($data['banner']['value'])){
                    $path = Mage::getBaseDir('media') . DS;
                    if(@unlink($path.$data['banner']['value'])){
                        $data['banner']='';
                    }
                }   
            }
            if(isset($_FILES['banner']['name']) && !empty($_FILES['banner']['name'])) {
                try {
                $uploader = new Varien_File_Uploader('banner');
                $uploader->setAllowedExtensions(array('jpg','jpeg','gif','png')); // or pdf or anything
                $uploader->setAllowRenameFiles(true);
                // setAllowRenameFiles(true) -> move your file in a folder the magento way
                // setAllowRenameFiles(false) -> move your file directly in the $path folder
                $uploader->setFilesDispersion(true);
                $path = Mage::getBaseDir('media') . DS;

                //$uploader->saveresized($path, $_FILES['nfile']['name'],100,72);
                //$_tmp_nfilethumb = $uploader->getUploadedFileName();

                $uploader->save($path, $_FILES['banner']['name']);
                $_tmp_nfile = $uploader->getUploadedFileName();

                //$data['nfilethumb'] = $_tmp_nfilethumb;
                $data['banner'] = $_tmp_nfile;

                }catch(Exception $e) {

                }
            }elseif(isset($data['banner']['value']) && !empty($data['banner']['value'])){
                $data['banner']=$data['banner']['value'];
            }   

        if ($id = $this->getRequest()->getParam('page_id')) {
            $model->load($id);
        }

        $model->setData($data);

        Mage::dispatchEvent('cms_page_prepare_save', array('page' => $model, 'request' => $this->getRequest()));

        //validating
        if (!$this->_validatePostData($data)) {
            $this->_redirect('*/*/edit', array('page_id' => $model->getId(), '_current' => true));
            return;
        }

        // try to save it
        try {
            // save the data
            $model->save();

            // display success message
            Mage::getSingleton('adminhtml/session')->addSuccess(
                Mage::helper('cms')->__('The page has been saved.'));
            // clear previously saved data from session
            Mage::getSingleton('adminhtml/session')->setFormData(false);
            // check if 'Save and Continue'
            if ($this->getRequest()->getParam('back')) {
                $this->_redirect('*/*/edit', array('page_id' => $model->getId(), '_current'=>true));
                return;
            }
            // go to grid
            $this->_redirect('*/*/');
            return;

        } catch (Mage_Core_Exception $e) {
            $this->_getSession()->addError($e->getMessage());
        }
        catch (Exception $e) {
            $this->_getSession()->addException($e,
                Mage::helper('cms')->__('An error occurred while saving the page.'));
        }

        $this->_getSession()->setFormData($data);
        $this->_redirect('*/*/edit', array('page_id' => $this->getRequest()->getParam('page_id')));
        return;
    }
    $this->_redirect('*/*/');
}

app/code/core/Mage/Adminhtml/Block/Cms/Page/Edit/Tab/Content.php -

protected function _prepareForm()
{   
    $model = Mage::registry('cms_page');

    /*
     * Checking if user have permissions to save information
     */
    if ($this->_isAllowedAction('save')) {
        $isElementDisabled = false;
    } else {
        $isElementDisabled = true;
    }


    $form = new Varien_Data_Form();

    $form->setHtmlIdPrefix('page_');

    $fieldset = $form->addFieldset('content_fieldset', array('legend'=>Mage::helper('cms')->__('Content'),'class'=>'fieldset-wide'));

    $wysiwygConfig = Mage::getSingleton('cms/wysiwyg_config')->getConfig(
        array('tab_id' => $this->getTabId())
    );

    $fieldset->addField('content_heading', 'text', array(
        'name'      => 'content_heading',
        'label'     => Mage::helper('cms')->__('Content Heading'),
        'title'     => Mage::helper('cms')->__('Content Heading'),
        'disabled'  => false,
    ));
             $content999Field = $fieldset->addField('banner', 'image', array(
        'name'      => 'banner',
            'label'     => Mage::helper('cms')->__('Banner'),
        'title'     => Mage::helper('cms')->__('Banner'),
    ));

    $contentField = $fieldset->addField('content', 'editor', array(
        'name'      => 'content',
            'label'     => Mage::helper('cms')->__('Layout 1'),
        'title'     => Mage::helper('cms')->__('Layout 1'),
        'style'     => 'height:36em;',
        //'required'  => true,
        'disabled'  => $isElementDisabled,
        'config'    => $wysiwygConfig
    ));

         $content2Field = $fieldset->addField('content2', 'editor', array(
        'name'      => 'content2',
            'label'     => Mage::helper('cms')->__('Layout 2'),
        'title'     => Mage::helper('cms')->__('Layout 2'),
        'style'     => 'height:36em;',
        //'required'  => true,
        'disabled'  => $isElementDisabled,
        'config'    => $wysiwygConfig
    ));
        $content3Field = $fieldset->addField('content3', 'editor', array(
        'name'      => 'content3',
            'label'     => Mage::helper('cms')->__('Content'),
        'title'     => Mage::helper('cms')->__('Content'),
        'style'     => 'height:36em;',
        //'required'  => true,
        'disabled'  => $isElementDisabled,
        'config'    => $wysiwygConfig
    ));

    // Setting custom renderer for content field to remove label column
    //$renderer = $this->getLayout()->createBlock('adminhtml/widget_form_renderer_fieldset_element')
               // ->setTemplate('cms/page/edit/form/renderer/content.phtml');
   // $contentField->setRenderer($renderer);

    $form->setValues($model->getData());
    $this->setForm($form);

    Mage::dispatchEvent('adminhtml_cms_page_edit_tab_content_prepare_form', array('form' => $form));

    return parent::_prepareForm();
}
4

2 に答える 2

0

追加した、

Form.php内の'enctype'=>'multipart / form-data'で、修正されました。

class Mage_Adminhtml_Block_Cms_Page_Edit_Form extends Mage_Adminhtml_Block_Widget_Form
{

    protected function _prepareForm()
    {
        $form = new Varien_Data_Form(array('id' => 'edit_form', 'action' => $this->getData('action'), 'method' => 'post', 'enctype' => 'multipart/form-data'));
        $form->setUseContainer(true);
        $this->setForm($form);
        return parent::_prepareForm();
    }

}
于 2012-09-27T09:59:39.080 に答える
0

以下の行を追加してみてください$form->setValues($model->getData());:

$form->setEnctype(Zend_Form::ENCTYPE_MULTIPART);
于 2012-09-27T09:31:59.317 に答える