1. rewrite adminhtml edit form blocks in config file
<global>
<blocks>
<mycms>
<class>Bysoft_Mycms_Block</class>
</mycms>
<adminhtml>
<rewrite>
<cms_page_edit_form>Bysoft_Mycms_Block_Adminhtml_Cms_Page_Edit_Form</cms_page_edit_form>
</rewrite>
</adminhtml>
</blocks>
2. write rewrite block to change form post type: ( just extends Mage_Adminhtml_Block_Widget_Form)
<?php
class Bysoft_Mycms_Block_Adminhtml_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();
}
}
3. set two event method for prepare form and save upload file in config.xml
<global>
<models>
<mycms>
<class>Bysoft_Mycms_Model</class>
<resourceModel>mycms_mysql4</resourceModel>
</mycms>
<mycms_mysql4>
<class>Bysoft_Mycms_Model_Mysql4</class>
</mycms_mysql4>
</models>
<resources>
<mycms_setup>
<setup>
<module>Bysoft_Mycms</module>
</setup>
<connection>
<use>core_setup</use>
</connection>
</mycms_setup>
<mycms_write>
<connection>
<use>core_write</use>
</connection>
</mycms_write>
<mycms_read>
<connection>
<use>core_read</use>
</connection>
</mycms_read>
</resources>
</global>
<adminhtml>
<events>
<cms_page_prepare_save>
<observers>
<bysoft_mycms_save_page>
<type>singleton</type>
<class>mycms/observer</class>
<method>saveSearchImage</method>
</bysoft_mycms_save_page>
</observers>
</cms_page_prepare_save>
<adminhtml_cms_page_edit_tab_main_prepare_form>
<observers>
<bysoft_mycms_prepare_form>
<type>singleton</type>
<class>mycms/observer</class>
<method>prepareSearchImageForm</method>
</bysoft_mycms_prepare_form>
</observers>
</adminhtml_cms_page_edit_tab_main_prepare_form>
</events>
</adminhtml>
4. add custom image column to core cms page table by setup script
<?php
$installer = $this;
$installer->startSetup();
$sql=<<<SQLTEXT
SQLTEXT;
$installer->run($sql);
$installer = $this;
$setup = new Mage_Eav_Model_Entity_Setup('core_setup');
$installer->startSetup();
$installer->run(' ALTER TABLE `cms_page` ADD `search_image` VARCHAR(255) NULL; ');
$installer->endSetup();
$installer->endSetup();
5. two function in observer script:
1) prepare edit form, add image field set and field
2) save image data
<?php
class Bysoft_Mycms_Model_Observer
{
public function saveSearchImage(Varien_Event_Observer $observer)
{
try {
$model = $observer->getEvent()->getPage();
$request = $observer->getEvent()->getRequest();
if (isset($_FILES['search_image']['name']) && $_FILES['search_image']['name'] != '') {
$uploader = new Varien_File_Uploader('search_image');
$uploader->setAllowedExtensions(array('jpg','jpeg','gif','png'));
$uploader->setAllowRenameFiles(false);
$uploader->setFilesDispersion(false);
// Set media as the upload dir
$media_path = Mage::getBaseDir('media') . DS . 'search_image' . DS;
// Set thumbnail name
$file_name = 'cms_';
$rand_file_name = $file_name . $this->get_rand_filename($_FILES['search_image']['name']);
// Upload the image
$uploader->save($media_path, $rand_file_name);
$data['search_image'] = 'search_image' . '/' . $rand_file_name;
// Set thumbnail name
$data['search_image'] = $data['search_image'];
$model->setData('search_image',$data['search_image']);
} else {
$data = $request->getPost();
if(isset($data['search_image']['delete']) && $data['search_image']['delete']== 1) {
$data['search_image'] = '';
$model->setData('search_image',$data['search_image']);
} else {
unset($data['search_image']);
$model->setData('search_image',implode($request->getPost('search_image')));
}
}
}catch (Exception $e) {
echo $e->getMessage();
}
}
public function prepareSearchImageForm(Varien_Event_Observer $observer)
{
$form = $observer->getEvent()->getForm();
$fieldset = $form->addFieldset(
'image_fieldset',
array(
'legend' => 'Image',
'class' => 'fieldset-wide'
)
);
$fieldset->addField('search_image', 'image', array(
'name' => 'search_image',
'label' => 'Search image',
'title' => 'Search image'
));
}
public function get_rand_filename($base_file_name) {
$ext = pathinfo($base_file_name, PATHINFO_EXTENSION);
return Mage::getModel('core/date')->timestamp(time()) . '.' . $ext;
}
}

本文介绍如何通过定制Magento模块来扩展CMS页面编辑功能,包括重写Admin HTML编辑表单块、更改表单提交类型、设置事件方法、添加自定义图片字段及实现图片上传功能。

被折叠的 条评论
为什么被折叠?



