我正在尝试为CMS页面添加额外的属性。我可以按照http://blog.flexishore.com/2011/08/add-custom-field-to-cms-page/上的帮助添加这些额外的字段。
但是,我不能添加图像,因为CMS页面的表单没有enctype="multipart/ form -data“。为了解决这个问题,我不得不创建一个原始Magento文件的本地副本。\app\code\local\Mage\Adminhtml\Block\Cms\Page\Edit\Form.php
理想情况下,我希望使用观察者注入enctype。我到处游荡,还没有找到合适的解决方案。
我希望能够添加像$form->setHtmlAttributes('enctype','multipart/form-data')这样的东西。
public function prepareFormMainTab(Varien_Event_Observer $observer)
{
$form = $observer->getEvent()->getForm();
$fieldset = $form->addFieldset('fieldset', array(
'legend' => 'CMS Extras',
'class' => 'fieldset-wide'
)
);
$fieldset->addField('imagefile', 'image', array(
'name' => 'imagefile',
'label' => 'Image',
'title' => 'Image'
));
}发布于 2012-03-13 19:32:49
我找到了解决方案。
首先,我扩展了Mage_Adminhtml和Mage_Cms模块。不知何故,即使不这样做,修改也能正常工作!也许有人能解释一下原因。
<modules>
<Myname_Mymodule>
<active>true</active>
<codePool>local</codePool>
<depends>
<Mage_Cms/>
<Mage_Adminhtml/>
</depends>
</Myname_Mymodule>
</modules>我重写了Adminhtml代码块。
<blocks>
<mymodule>
<class>Myname_Mymodule_Block</class>
</mymodule>
<adminhtml>
<rewrite>
<cms_page_edit_form>Myname_Mymodule_Block_Adminhtml_Cms_Page_Edit_Form</cms_page_edit_form>
</rewrite>
</adminhtml>
</blocks>我将\app\code\core\Mage\Adminhtml\Block\Cms\Page\Edit\Form.php复制到\app\code\local\Myname\Mymodule\Block\Adminhtml\Cms\Page\Edit\Form.php,并为表单添加了enctype。
class Myname_Mymodule_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();
}
}注意到虽然我能得到想要的结果,但我不能理解是怎么做到的。
发布于 2015-08-14 23:02:05
</global>
</events>
<adminhtml_block_html_before>
<observers>
<event_column_append>
<type>model</type>
<class>observer_class</class>
<method>addFormEnctype</method>
</event_column_append>
</observers>
</adminhtml_block_html_before>
</events>
</global>观察者方法应该如下所示:
public function addFormEnctype($observer){
$block = $observer->getEvent()->getBlock();
if ($block instanceof Class_Where_Form_Is_Instaniated){
$form = $observer->getBlock()->getForm();
$form->setData('enctype', 'multipart/form-data');
//depends of form what you wand modify
$form->setUseContainer(true);
}
}发布于 2012-02-25 04:22:49
试一试
$form->setEnctype('multipart/form-data')或
$form->setData('enctype', 'multipart/form-data')https://stackoverflow.com/questions/9434631
复制相似问题