CMS Magento中的自定义图像字段



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

这就是我所采取的步骤,

  1. 在数据库中用cms_page创建了一个名为"banner"的附加列,这是一个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/"one_answers"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();
}

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

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

我添加了

'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();
}
}

最新更新