1 添加后台控制器的newAction和editAction
<?php
class Www_News_Adminhtml_NewsController extends Mage_Adminhtml_Controller_Action
{
//...
public function newAction()
{
$this->getRequest()->setParam('id', 0);
$this->_forward('edit');
}
public function editAction()
{
$this->_title($this->__('CMS'))->_title($this->__('News'));
$newsId = $this->getRequest()->getParam('id');
$newsModel = Mage::getModel('news/news')->load($newsId);
if ($newsModel->getId() || $newsId == 0) {
$this->_title($newsModel->getId() ? $newsModel->getTitle() : $this->__('New News'));
Mage::register('news_data', $newsModel);
$this->loadLayout();
$this->_setActiveMenu('cms/news');
$this->_addBreadcrumb(Mage::helper('adminhtml')->__('News Manager'), Mage::helper('adminhtml')->__('News Manager'), $this->getUrl('*/*/'));
$this->_addBreadcrumb(Mage::helper('adminhtml')->__('Edit News'), Mage::helper('adminhtml')->__('Edit News'));
$this->getLayout()->getBlock('head')->setCanLoadExtJs(true);
$this->_addContent($this->getLayout()->createBlock('news/adminhtml_news_edit'))
->_addLeft($this->getLayout()->createBlock('news/adminhtml_news_edit_tabs'));//根据这个创建block
$this->renderLayout();
} else {
Mage::getSingleton('adminhtml/session')->addError(Mage::helper('news')->__('The news does not exist.'));
$this->_redirect('*/*/');
}
}
}
2 添加Form Container
<?php
class Www_News_Block_Adminhtml_News_Edit extends Mage_Adminhtml_Block_Widget_Form_Container
{
public function __construct()
{
$this->_objectId = 'id';
$this->_blockGroup = 'news';
$this->_controller = 'adminhtml_news';
parent::__construct();
$this->_updateButton('save', 'label', Mage::helper('news')->__('Save News'));
$this->_updateButton('delete', 'label', Mage::helper('news')->__('Delete News'));
}
public function getHeaderText()
{
if(Mage::registry('news_data') && Mage::registry('news_data')->getId()) {
return Mage::helper('news')->__("Edit News '%s'", $this->htmlEscape(Mage::registry('news_data')->getTitle()));
} else {
return Mage::helper('news')->__('Add News');
}
}
}
3 添加Form
form URI
<?php
class Www_News_Block_Adminhtml_News_Edit_Form extends Mage_Adminhtml_Block_Widget_Form
{
protected function _prepareForm()
{
$form = new Varien_Data_Form(array(
'id' => 'edit_form',
'action' => $this->getUrl('*/*/save', array('id' => $this->getRequest()->getParam('id'))),
'method' => 'post',
));
$form->setUseContainer(true);
$this->setForm($form);
return parent::_prepareForm();
}
}
4 添加Tabs
<?php
class Www_News_Block_Adminhtml_News_Edit_Tabs extends Mage_Adminhtml_Block_Widget_Tabs
{
public function __construct()
{
parent::__construct();
$this->setId('news_tabs');
$this->setDestElementId('edit_form');
$this->setTitle(Mage::helper('news')->__('News Information'));
}
protected function _beforeToHtml()
{
$this->addTab('form_section', array(
'label' => Mage::helper('news')->__('News Information'),
'title' => Mage::helper('news')->__('News Information'),
'content' => $this->getLayout()->createBlock('news/adminhtml_news_edit_tab_form')->toHtml(), //tab form URI
));
return parent::_beforeToHtml();
}
}
5 添加Tab Form
<?php
class Www_News_Block_Adminhtml_News_Edit_Tab_Form extends Mage_Adminhtml_Block_Widget_Form
{
protected function _prepareForm()
{
$model = Mage::registry('news_data');
$form = new Varien_Data_Form();
$fieldset = $form->addFieldset('news_form', array('legend'=>Mage::helper('news')->__('News information')));
if ($model->getNewsId()) {
$fieldset->addField('news_id', 'hidden', array(
'name' => 'news_id',
));
}
$fieldset->addField('title', 'text', array(
'name' => 'title',
'label' => Mage::helper('news')->__('News Title'),
'title' => Mage::helper('news')->__('News Title'),
'required' => true,
));
$fieldset->addField('is_active', 'select', array(
'name' => 'is_active',
'label' => Mage::helper('news')->__('Status'),
'title' => Mage::helper('news')->__('News Status'),
'required' => true,
'options' => $model->getAvailableStatuses(),
));
$fieldset->addField('content', 'editor', array(
'name' => 'content',
'label' => Mage::helper('news')->__('Content'),
'title' => Mage::helper('news')->__('Content'),
'required' => true,
'style' => 'width:700px; height:300px;',
));
$form->setValues($model->getData());
$this->setForm($form);
return parent::_prepareForm();
}
}
刷新后台页面,点击Add News按钮新建新闻或点击表格中的某一行编辑新闻,观察是否显示编辑表单,下面我们为表单添加保存和删除的功能。
6 添加后台控制器的saveAction和deleteAction
<?php
class Www_News_Adminhtml_NewsController extends Mage_Adminhtml_Controller_Action
{
//...
public function saveAction()
{
if ($data = $this->getRequest()->getPost()) {
$id = $this->getRequest()->getParam('id');
$model = Mage::getModel('news/news')->load($id);
if (!$model->getId() && $id) {
Mage::getSingleton('adminhtml/session')->addError(Mage::helper('news')->__('This news no longer exists.'));
$this->_redirect('*/*/');
return;
}
$model->setData($data);
try {
$model->save();
Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('news')->__('The news has been saved.'));
Mage::getSingleton('adminhtml/session')->setFormData(false);
if ($this->getRequest()->getParam('back')) {
$this->_redirect('*/*/edit', array('id' => $model->getId(), '_current'=>true));
return;
}
$this->_redirect('*/*/');
return;
} catch (Exception $e) {
Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
Mage::getSingleton('adminhtml/session')->setFormData($data);
$this->_redirect('*/*/edit', array('id' => $this->getRequest()->getParam('id')));
return;
}
}
$this->_redirect('*/*/');
}
public function deleteAction()
{
if ($id = $this->getRequest()->getParam('id')) {
try {
$model = Mage::getModel('news/news');
$model->setId($id);
$model->delete();
Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('adminhtml')->__('The news has been deleted.'));
$this->_redirect('*/*/');
return;
} catch (Exception $e) {
Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
$this->_redirect('*/*/edit', array('id' => $this->getRequest()->getParam('id')));
return;
}
}
Mage::getSingleton('adminhtml/session')->addError(Mage::helper('adminhtml')->__('Unable to find a news to delete.'));
$this->_redirect('*/*/');
}
}
刷新后台页面,进入到新闻编辑页面,观察点击Save News和Delete News是否能够保存和删除新闻.