40. 后台模块开发(5)
1.为表单 容器/视窗 添加按钮
<?phpclass Www_Employee_Block_Adminhtml_Employee_Edit extends Mage_Adminhtml_Block_Widget_Form_Container
{public function __construct(){parent::__construct();$this->_blockGroup = 'employee';$this->_controller = 'adminhtml_employee';$this->_objectId = 'id';$this->_updateButton('save','label',Mage::helper('employee')->__('Save Employee'));$this->_updateButton('delete','label',Mage::helper('employee')->__('Delete Employee'));//$this->removeButton('reset');$this->_addButton('saveandcontinue', array('label' => Mage::helper('adminhtml')->__('Save And Continue Edit'),'onclick' => 'saveAndContinueEdit()','class' => 'save',), -100);$this->_addButton('button1', array('label' => Mage::helper('adminhtml')->__('Button1'),'onclick' => 'setLocation(\'' . $this->getUrl('*/*/button1Click') . '\')','class' => 'back',),-1,5);$this->_addButton('button2', array('label' => Mage::helper('adminhtml')->__('Button2'),'onclick' => 'setLocation(\'' . $this->getUrl('*/*/button2Click') . '\')','class' => 'save',),-1,3);$this->_addButton('button3', array('label' => Mage::helper('adminhtml')->__('Button3'),'onclick' => 'setLocation(\'' . $this->getUrl('*/*/button3Click') . '\')','class' => 'delete',),-1,1);$this->_addButton('button4', array('label' => Mage::helper('adminhtml')->__('Button4'),'onclick' => 'setLocation(\'' . $this->getUrl('*/*/button4Click') . '\')','class' => 'delete',),-1,4,'footer');}public function getHeaderText(){return Mage::helper('employee')->__('My Form Container');}
}
参数 1 "button id"
//每个按钮都有自己唯一的 id参数 2 "button parameter array"
//这个数组里面你可以为该按钮定义 label, onclick, class,
//class 有三个不同的值 (delete、 save 和 back),这可以根据你的按钮实际用途来选择,你也可以留空,即: 默认按钮参数 3 "level"
//这个通常用来和其他按钮“组合”在一起,直接和后面一个参数 sort_order 联系在一起参数 4 "sort_order"
//这个参数来决定在同一个组(level) 里的按钮显示的先后顺序参数 5 "aera"
//它含有两个值('header' 和 'footer'), 默认的值为 header, 如果你想按钮显示在底部,那么你需要在这个参数里写上'footer'
2.添加多个表单选项卡和基于 Ajax 的选项卡
<?phpclass Www_Employee_Block_Adminhtml_Employee_Edit_Tabs extends Mage_Adminhtml_Block_Widget_Tabs
{public function __construct(){$this->setId('employee_tabs');$this->setDestElementId('edit_form');parent::__construct();}public function _beforeToHtml(){$this->addTab('employee_form',array('label'=>Mage::helper('employee')->__('Infomation'),'title'=>Mage::helper('employee')->__('Title Infomation'),'content'=>$this->getLayout()->createBlock('employee/adminhtml_employee_edit_tab_form')->toHtml(),));$this->addTab('form_section2', array('label' => Mage::helper('employee')->__('Employee Information2'),'title' => Mage::helper('employee')->__('Employee Information2'),'content' => $this->getLayout()->createBlock('employee/adminhtml_employee_edit_tab_form2')->toHtml(),));$this->addTab('form_section3', array('label' => Mage::helper('employee')->__('Employee Information3'),'url' => $this->getUrl('*/*/form', array('_current' => true)),'class' => 'ajax',));return parent::_beforeToHtml();}
}
正如如上代码所示,添加一个正常的 html 选项卡所需要的操作是:
$this->addTab('form_section2', array('label' => Mage::helper('employee')->__('Employee Information2'),'title' => Mage::helper('employee')->__('Employee Information2'),'content' => $this->getLayout()->createBlock('employee/adminhtml_employee_edit_tab_form2')->toHtml(),)
);
代码十分简单,我们只是定义了一下 label, title 和所对应的 content 内容
而一个基于 Ajax 的选项卡,那就有一点复杂了
$this->addTab('form_section3', array('label' => Mage::helper('employee')->__('Employee Information3'),'url' => $this->getUrl('*/*/form', array('_current' => true)),'class' => 'ajax',)
);
代码中我们定义了 ‘class’ 的值为 ‘ajax’,并且用 ajax url 去加载所对应的内容,在我们的后台控制器里, 这个 URL 会对应我们的 ajaxAction, 代码如下:
public function formAction(){$this->loadLayout();$this->getResponse()->setBody($this->getLayout()->createBlock('employee/adminhtml_employee_edit_tab_form3')->toHtml());}
通常,我们会用基于 Ajax 的选项卡 – 所对应的内容区域里面加载 Grid 表, 如何在选项卡所对应的内容区域里加载 Grid 表,请见后一章节
3.创建新的文本标签
在上一章节中,我们已经看到了在 Magento 表单中所有不同类型的 文本框 或 HTML 标签, 现在让我们看下如何来添加一个新的类型,首先添加如下代码至 Form.php 文件中的 _prepareForm() 方法当中:
$fieldset->addType('custom_field', 'Www_Employee_Block_Adminhtml_Employee_Edit_Tab_Field_Custom'
);
在这里,我们调用了 addType() 方法, 并且定义了该标签的唯一 id 和 class 文件,下一步就是来为其添加标签:
$fieldset->addField('custom_field', 'custom_field', array('label' => Mage::helper('employee')->__('Checkboxs'),'name' => 'Checkbox','custom1' => 'Custom1 Value','custom2' => 'Custom2 Value','value' => 'value1'));
在 addField() 方法中我们使用了 custom_field 作为一个新的标签类型,我们也同时定义了两个变量 custom1 和 custom2, 这么做只是为了演示如何把变量传到 custom field 类中, 接下去我们需要创建 custom field 类了
<?phpclass Www_Employee_Block_Adminhtml_Employee_Edit_Tab_Field_Custom extends Varien_Data_Form_Element_Abstract
{public function __construct($attributes=array()){parent::__construct($attributes);}public function getElementHtml(){$value = $this->getValue();$custom1 = $this->getCustom1();$custom2 = $this->getCustom2();$html = '<p id="' . $this->getHtmlId() . '"'. $this->serialize($this->getHtmlAttributes()) .'>在这里我可以放自定义的 html 或 javascript</p>';$html .= "<p>这里就可以接收我们刚传的变量了 </p>";$html .= "<b>Custom1:</b> $custom1 <br/>";$html .= "<b>Custom2:</b> $custom2 <br/>";$html .= $this->getAfterElementHtml();return $html;}
}
这里值得注意的是,我们一定要继承 Varien_Data_Form_Element_Abstract 这个类,并且要重写 getElementHtml() 这个方法,那样你就可以写你自定义的 html 代码了
http://www.sunzhenghua.com/magento-admin-module-development-part5-grid-forms-tabs-ajax-advanced
40. 后台模块开发(5)相关推荐
- ThinkPHP 3.2.3 简单后台模块开发(一)常用配置
一.项目分组 下载解压 ThinkPHP 3.2.3,在默认的应用 Application(./Application) 中,包含一个默认的模块 Home(./Application/Home). 需 ...
- 【Linux后台开发系列】Nginx源码从模块开发开始,不再对nginx源码陌生丨源码分析
Nginx源码从模块开发开始,不再对nginx源码发怵,值得学习,认真听完. 1. nginx的conf配置,cmd解析 2. nginx模块的八股文 3. nginx开发的细枝末节 [Linu ...
- discuz 后台页面开发
后台页面开发 创建项目 在 ./source/admincp/menu/ 目录下创建 menu_mynav.php 文件 在"管理中心-全局"中加一个项目,需要在 menu_myn ...
- 这可能是东半球最保姆级的后台服务器开发学习路线
作者 | 编程指北 来源 | 编程指北(id :cs_dev) 前言 这一篇的主题是「Linux C/C++ 服务器/后台开发学习路线」. 这样的文章相信大家都见得不少了,写之前也非常忐忑,能不能和其 ...
- Nginx 模块开发
Nginx 模块概述 Nginx 模块有三种角色: 处理请求并产生输出的 Handler 模块: 处理由 Handler 产生的输出的 Filter(滤波器)模块: 当出现多个后台服务器时,Load- ...
- Android开发之ApiCloud模块开发的注意事项
经过本人多次模块制作打包上传基本总结模块开发的以下坑: 一.模块开发SDK最小版本必须为9,不然就算你SDK模块开发完毕正常运行你在后台云编译也无法通过会报错,提示 minSdkVersion9小于你 ...
- 第11步 git推送失败 用户模块开发
别忘了git push **************************************************************************************** ...
- php magento 开发,magento 2模块开发实例helloworld模块 hello world 程序 c语言hello world代码 c语言hello worl...
data-id="1190000005008433" data-license="cc"> 1.在app/etc/config.php中添加自定义的模块( ...
- idea如何做到多模块开发项目
首先,推荐两个不错的后台系统模板,非常的不错,力荐. 1.码云地址:BootDo后台管理系统 2.码云地址:若依后台管理系统 因为之前一直在用BootDo后台管理系统模板,一直是在一个项目中开发.后来 ...
- 网站流量日志数据分析系统(模块开发----数据仓库设计)
1. 维度建模基本概念 维度建模(dimensional modeling)是专门用于分析型数据库.数据仓库.数据集市建模的方法.数据集市可以理解为是一种"小型数据仓库". 维度表 ...
最新文章
- css属性cusor
- mysql给数据库重命令_mysql 重命令数据库
- 数字图像处理:基于MATLAB的车牌识别项目
- 关于haproxy的重定向
- 实现Ajax异步交互
- 灭顶之灾之网络电视精灵——S2 2.8
- CJSON parse.c
- JavaScript学习指南(非常详细)
- 数据仓库与数据挖掘的个人总结
- MES管理系统这5个模块,可保障板式定制家具的生产需求
- matlab 双均线,一辈子坚持使用双均线
- console接口配置登录密码
- 女性电子商务服装评论
- 2023年兔年好看的头像
- 2022高教杯数学建模E思路 超详细文字内容 数模E题
- android studio中的模拟器,使用Android Studio创建Andorid模拟器
- python-pptx----母版制作
- 删除无效的“设备和驱动器”
- Python_oldboy_自动化运维之路_线程,进程,协程(十一)
- APP开发要么快要么死!
热门文章
- JSP版LCX:端口转发神器 KPortTran
- 电感式升压转换器-AIC1896 电感式升压转换器
- SQL Server2008表及字段描述信息处理示例
- 【渺小与伟大】这几张可视化图,颠覆你的认知!
- R语言可视化学习笔记之ggrepel包
- 【LeetCode 剑指offer刷题】树题9:34 二叉树中和为某一值的路径(112. Path Sum)...
- spring 容器技术入门
- 操,escape sequence的输入方法我以前找过一次,这次又忘了,又找了一次,记下来,...
- python+Django+test 测试数据库生成报错
- JS对象、数组 及 数据类型 Symbol