当前位置: 首页 > news >正文

如何创建一个MVC模式的Joomla组件教程(十五) - 创建管理员界面 增加编辑功能 上...

现在hellos view完成了,现在需要完成hello view和 model, 他们实际复杂数据处理工作。

Hello Controller
默认的controller仅仅是展示数据,现在需要controller能处理从hellos view发出的添加,删除,修改任务,
 
 添加和编辑本质是相同的任务,他们都是显示给用户一个form来做greeting编辑,不同的是添加是一个空的form,而edit有数据,因此我们把add任务映射给edit钩子函数。下面的构造器中做了这个操作


/**
 * constructor (registers additional tasks to methods)
 * @return void
 */
function __construct()
{
    parent::__construct();

    // Register Extra tasks
    $this->registerTask( 'add'  ,     'edit' );
}

JController::registerTask是将add映射到edit钩子函数上。

现在我们处理编辑任务,controller处理edit任务相当简单,所要做的仅仅设指定view和模板,这里在编辑的同事要禁用主菜单,从而用户不能离开而不保存数据。


edit 任务的钩子函数清单:

/**
 * display the edit form
 * @return void
 */
function edit()
{
    JRequest::setVar( 'view', 'hello' );
    JRequest::setVar( 'layout', 'form'  );
    JRequest::setVar('hidemainmenu', 1);

    parent::display();
}

Hello View


Hello view 显示一个表单允许用户编辑. display要完成下面一些简单任务:

从model获取数据
创建toolbar
给模板template传递数据
调用display()填充模板

因为要处理编辑和添加,所以稍稍有点复杂。在toolbar中需要用户知道是否在添加或编辑,从而我们决定触发那个任务。

因为我们已经从model获取了数据,因而可以推断是那个任务被触发,如果是编辑,那么id字段是有数据的,否则,这个字段就是空的,由此可以确定是添加还是编辑记录。

在toolbar中还添加了两个按钮,保存和取消。
We will add two buttons to the toolbar: save and cancel. Though the functionality will be the same, we want to display different buttons depending on whether it is a new or existing record. If it is a new record, we will display cancel. If it already exists, we will display close.

display 方法的清单如下:

/**
 * display method of Hello view
 * @return void
 **/
function display($tpl = null)
{
    //get the hello
    $hello        =& $this->get('Data');
    $isNew        = ($hello->id < 1);

    $text = $isNew ? JText::_( 'New' ) : JText::_( 'Edit' );
    JToolBarHelper::title(   JText::_( 'Hello' ).': <small><small>[ ' . $text.' ]</small></small>' );
    JToolBarHelper::save();
    if ($isNew)  {
        JToolBarHelper::cancel();
    } else {
        // for existing items the button is renamed `close`
        JToolBarHelper::cancel( 'cancel', 'Close' );
    }

    $this->assignRef('hello', $hello);
    parent::display($tpl);
}

转载于:https://www.cnblogs.com/vicenteforever/articles/1633017.html

相关文章:

  • 二招搞定IE快捷方式没法打开
  • StatsPack 使用初解
  • ArcGIS中对一组查询结果同时闪烁的实现
  • 鸟哥的基础学习-习题与答案
  • 我的人生谚语
  • 梅德克领导AMD成功转变,明年或将在中国市场持续发力?
  • 基于网络数据采集系统的社交媒体/网络营销
  • SQL创建用户及角色
  • Net设计模式实例之单例模式( Singleton Pattern)
  • vxvm之卷管理
  • mapextreme 2008 的helloworld (1)
  • 真的要对Sun说道别了……
  • 互联网产品一门户网站奥运频道UI分析
  • 用JSON 和 Google 实现全文翻译
  • 【编程好习惯】借助隐式初始化简化程序逻辑
  • [iOS]Core Data浅析一 -- 启用Core Data
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • Android框架之Volley
  • express.js的介绍及使用
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • Median of Two Sorted Arrays
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • Spring核心 Bean的高级装配
  • 给Prometheus造假数据的方法
  • 关于List、List?、ListObject的区别
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 我的zsh配置, 2019最新方案
  • 一个JAVA程序员成长之路分享
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • Java性能优化之JVM GC(垃圾回收机制)
  • puppet连载22:define用法
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (09)Hive——CTE 公共表达式
  • (1)(1.13) SiK无线电高级配置(五)
  • (16)Reactor的测试——响应式Spring的道法术器
  • (C#)获取字符编码的类
  • (c语言)strcpy函数用法
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (二) Windows 下 Sublime Text 3 安装离线插件 Anaconda
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • (转)Linux整合apache和tomcat构建Web服务器
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • ***测试-HTTP方法
  • .form文件_一篇文章学会文件上传
  • .gitignore文件---让git自动忽略指定文件
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .net 8 发布了,试下微软最近强推的MAUI
  • .net core 6 redis操作类