CMS Magento中的自定义图像字段

时间:2012-09-27 09:24:11

标签: magento

我正在尝试在Magento CMS页面中创建自定义图像字段。

这是我采取的步骤,

  1. 在数据库中创建了一个名为'banner'的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”添加名为'banner'的新字段,其中字段类型为'image' ”。

  4. 删除了“var / cache /”和“var / session /”

  5. 中的所有内容

    只是没有在数据库中上传/保存文件名。为了尝试和诊断发生了什么,我在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();
    }
    

2 个答案:

答案 0 :(得分:0)

尝试在$form->setValues($model->getData());下面添加此行:

$form->setEnctype(Zend_Form::ENCTYPE_MULTIPART);

答案 1 :(得分:0)

我补充说,

'enctype'=> Form.php中的'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();
    }

}