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)相关推荐

  1. ThinkPHP 3.2.3 简单后台模块开发(一)常用配置

    一.项目分组 下载解压 ThinkPHP 3.2.3,在默认的应用 Application(./Application) 中,包含一个默认的模块 Home(./Application/Home). 需 ...

  2. 【Linux后台开发系列】Nginx源码从模块开发开始,不再对nginx源码陌生丨源码分析

    Nginx源码从模块开发开始,不再对nginx源码发怵,值得学习,认真听完. 1.  nginx的conf配置,cmd解析 2.  nginx模块的八股文 3.  nginx开发的细枝末节 [Linu ...

  3. discuz 后台页面开发

    后台页面开发 创建项目 在 ./source/admincp/menu/ 目录下创建 menu_mynav.php 文件 在"管理中心-全局"中加一个项目,需要在 menu_myn ...

  4. 这可能是东半球最保姆级的后台服务器开发学习路线

    作者 | 编程指北 来源 | 编程指北(id :cs_dev) 前言 这一篇的主题是「Linux C/C++ 服务器/后台开发学习路线」. 这样的文章相信大家都见得不少了,写之前也非常忐忑,能不能和其 ...

  5. Nginx 模块开发

    Nginx 模块概述 Nginx 模块有三种角色: 处理请求并产生输出的 Handler 模块: 处理由 Handler 产生的输出的 Filter(滤波器)模块: 当出现多个后台服务器时,Load- ...

  6. Android开发之ApiCloud模块开发的注意事项

    经过本人多次模块制作打包上传基本总结模块开发的以下坑: 一.模块开发SDK最小版本必须为9,不然就算你SDK模块开发完毕正常运行你在后台云编译也无法通过会报错,提示 minSdkVersion9小于你 ...

  7. 第11步 git推送失败 用户模块开发

    别忘了git push **************************************************************************************** ...

  8. php magento 开发,magento 2模块开发实例helloworld模块 hello world 程序 c语言hello world代码 c语言hello worl...

    data-id="1190000005008433" data-license="cc"> 1.在app/etc/config.php中添加自定义的模块( ...

  9. idea如何做到多模块开发项目

    首先,推荐两个不错的后台系统模板,非常的不错,力荐. 1.码云地址:BootDo后台管理系统 2.码云地址:若依后台管理系统 因为之前一直在用BootDo后台管理系统模板,一直是在一个项目中开发.后来 ...

  10. 网站流量日志数据分析系统(模块开发----数据仓库设计)

    1. 维度建模基本概念 维度建模(dimensional modeling)是专门用于分析型数据库.数据仓库.数据集市建模的方法.数据集市可以理解为是一种"小型数据仓库". 维度表 ...

最新文章

  1. css属性cusor
  2. mysql给数据库重命令_mysql 重命令数据库
  3. 数字图像处理:基于MATLAB的车牌识别项目
  4. 关于haproxy的重定向
  5. 实现Ajax异步交互
  6. 灭顶之灾之网络电视精灵——S2 2.8
  7. CJSON parse.c
  8. JavaScript学习指南(非常详细)
  9. 数据仓库与数据挖掘的个人总结
  10. MES管理系统这5个模块,可保障板式定制家具的生产需求
  11. matlab 双均线,一辈子坚持使用双均线
  12. console接口配置登录密码
  13. 女性电子商务服装评论
  14. 2023年兔年好看的头像
  15. 2022高教杯数学建模E思路 超详细文字内容 数模E题
  16. android studio中的模拟器,使用Android Studio创建Andorid模拟器
  17. python-pptx----母版制作
  18. 删除无效的“设备和驱动器”
  19. Python_oldboy_自动化运维之路_线程,进程,协程(十一)
  20. APP开发要么快要么死!

热门文章

  1. JSP版LCX:端口转发神器 KPortTran
  2. 电感式升压转换器-AIC1896 电感式升压转换器
  3. SQL Server2008表及字段描述信息处理示例
  4. 【渺小与伟大】这几张可视化图,颠覆你的认知!
  5. R语言可视化学习笔记之ggrepel包
  6. 【LeetCode 剑指offer刷题】树题9:34 二叉树中和为某一值的路径(112. Path Sum)...
  7. spring 容器技术入门
  8. 操,escape sequence的输入方法我以前找过一次,这次又忘了,又找了一次,记下来,...
  9. python+Django+test 测试数据库生成报错
  10. JS对象、数组 及 数据类型 Symbol