`
zhongguo168a
  • 浏览: 45649 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

第三章 后端开发 (续2)

阅读更多

第三章        后端开发 (续2)

这个函数定义了一个名为 adminForm(作为JavaScript应用) 并指向 index.php 的表单,接着显示一个带有 adminlist 类的表格,第一行为表格的头部,第一列是一个复选框 “check all”,它会自动地选择页面上的所有记录。

接着使用传进来的记录数组来循环显示每一行的数组。要注意的是变量 $k,它在每次循环中会在 0 1 之中更换值,它的作用好是用来更换每个 <tr> 的类,从而控制了每行显示的背景色。

大部分的成员变量会直接输出,但是有两个比较特殊,JHTML::(‘grid.id) 函数将返回一个能被后端 JavaScript 识别的复选框,JHTML::_('grid.published') 函数返回一个基于 成员变量 published 的值的图片,当 published 的值是 1 时,将返回打勾的图片,否则返回打“X”的图片。

在表格下面,有四个隐藏的变量,第一个处理 option 的值,以便路由到正确的组件,第二个是 task,它是在提交表单之前以便让工具栏中的 JavaScript 能给它赋值。第三个是 boxchecked,当有任意一行的复选框被选择,boxchecked 被置为 1,当所有行的复选框被清除,boxchecked 被置为 0,它是用来辅助 JavaScript 来处理列表。

当完成了 HTML 代码的输出,最后一步就是更新文件admin.reviews.php中的 switch() 语句,加入下面的高亮代码:

switch($task)

{

case 'add':

editReview( $option );

    break;

case 'save':

    saveReview( $option );

    break;

default:

    showReviews( $option );

    break;

}

在浏览器中输入URL http://localhost/joomla/administrator/index.

php?option=com_reviews,一个相似的页面如下:

暂时不提供图片显示,请参考《Joomla! extension development》

 

编辑记录

我们将扩展原有的代码来编辑记录,而不是写一个新的功能。在文件 admin.reviews.php 中的 editReview() 函数中用以下的高亮代码来代替:$row=&JTable:getInstance(‘Review’, ‘Table’)

function editReview( $option )

{

$row =& JTable::getInstance('review', 'Table');

$cid = JRequest::getVar( 'cid', array(0), '', 'array' );

$id = $cid[0];

$row->load($id);

 

当执行 editReview () 函数时,我们取得 TableReview 对象来处理数据,然后会从表单中取得记录ID的数组变量 cid,既然在同一个时间只编辑一条记录,那我们只选择第一个数组元素来加载相应的记录。更新文件 admin.reviews.php 中的 switch() 语句如下:

case 'edit':

case 'add':

editReview( $option );

    break;

你应该要提供能够让用户通过点击来编辑各自的记录的链接。在文件 admin.reviews.html.php HTML_reviews::showReviews() 函数下加入一下高亮的代码:

jimport('joomla.filter.output');

$k = 0;

for ($i=0, $n=count( $rows ); $i < $n; $i++)

{

$row = &$rows[$i];

$checked = JHTML::_('grid.id', $i, $row->id );

$published = JHTML::_('grid.published', $row, $i );

$link = JFilterOutput::ampReplace( 'index.php?option=' .

                  $option . '&task=edit&cid[]='. $row->id );

?>

<tr class="<?php echo "row$k"; ?>">

    <td>

      <?php echo $checked; ?>

    </td>

    <td>

      <a href="<?php echo $link; ?>">

      <?php echo $row->name; ?></a>

    </td>

    <td>

      <?php echo $row->address; ?>

    </td>  

    <td>

      <?php echo $row->reservations; ?>

    </td>

    <td>

      <?php echo $row->cuisine; ?>

    </td>  

    <td>

      <?php echo $row->credit_cards; ?>

    </td>

    <td align="center">

      <?php echo $published;?>

    </td>

为了兼容 XHTML,我们需要确保符号 & 使用 &amp; 来代替,我们使用 ampReplace() 来处理,它是 JFilterOutput 类的成员函数,JFilterOutput 通过调用 jimport(‘joomla.filter.output’) 来加载。Joomla! 提供了许多不同的库,例如 XML处理和RSS输出等。我们使用 jimport() 函数来按需要加载代码,而不是每次加载Joomla! 是都加载所用的库。你需要更新工具栏的代码,首先,去到文件 toolbar.reviews.php 中的 switch() 语句:

case 'edit':

case 'add':

    TOOLBAR_reviews::_NEW();

    break;

既然已经加入“编辑”函数,我们可以在工具栏加入“编辑”按钮,他可以根据每一行记录选择的复选框的来编辑内容,而不单只是点击链接。打开文件 toolbar.reviews.html.php ,添加以下的高亮代码:

TOOLBAR_reviews::_DEFAULT():

JToolBarHelper::unpublishList();

JToolBarHelper::editList();

JToolBarHelper::deleteList();


保存所有的文件,然后刷新页面
http://localhost/joomla/administrator/index.php?option=com_reviews,每一行的记录的name 栏都会带有链接,点击链接你会看到如下的页面:

暂时不提供图片显示,请参考《Joomla! extension development》

你可能已经注意到了在编辑页面的工具栏上有个“应用”按钮,它允许人们保存内容的同时,页面依然保留在编辑的状态,为了是应用按钮生效,需要在文件 admin.reviews.php 中做两个改变,在 switch() 语句中加入一下的高亮代码:

case 'apply':

case 'save':

saveReview( $option, $task );

    break;

saveReview() 函数中加入 $task 参数:

function saveReview( $option, $task )

saveReview() 函数的最后一行更改为如下:

current $task:

switch ($task)

{

    case 'apply':

      $msg = 'Changes to Review saved';

      $link = 'index.php?option=' . $option .

         '&task=edit&cid[]='. $row->id;

      break;

    case 'save':

    default:

      $msg = 'Review Saved';

      $link = 'index.php?option=' . $option;

      break;

}

$mainframe->redirect($link, $msg);


删除记录

增加删除的功能是相当的简单,在文件 admin.reviews.php switch() 语句中加入以下的 case 语句:

case 'remove':

removeReviews( $option );

    break;

当然也要增加 removeReviews() 函数:

function removeReviews( $option )

{

global $mainframe;

$cid = JRequest::getVar( 'cid', array(), '', 'array' );

$db =& JFactory::getDBO();

if(count($cid))

{

    $cids = implode( ',', $cid );

    $query = "DELETE FROM #__reviews WHERE id IN ( $cids )";

    $db->setQuery( $query );

    if (!$db->query())

    {

      echo "<script> alert('".$db->getErrorMsg()."');

      window.history.go(-1); </script>\n";

    }

}

$mainframe->redirect( 'index.php?option=' . $option );

}

我们从表单中再一次取得 cid 变量,然后检查数组中是否有 id 元素。如果有 id 元素,那么用逗号将数组中的元素连成字符串,然后用这个字符串来建立 SQL 语句,在执行过程中,除非发生错误,否则重定向到列表页面。

分享到:
评论

相关推荐

    python入门到高级全栈工程师培训 第3期 附课件代码

    第3章 01 网络基础和dos命令 02 为何学习linux 03 课程内容介绍 04 操作系统内核与系统调用 05 操作系统安装原理 06 linux操作系统安装 07 初识linux命令 08 linux操作系统目录结构 09 目录及文件操作 第4章 01 ...

    Perl Testing程序高手秘籍

    第三章管理测试 测试的组织 检查覆盖率 编写测试库 对测试库的测试 编写测试用具 通过网络运行测试 自动运行测试 第四章与代码一起发布测试 测试文档覆盖率 测试整个模块 让用户决定 让用户决定(续) 模块测试打包 ...

    《编译原理》二版课后答案

    续前内容) 根据题目要求,本节将详细探讨编译程序的开发技术。编译程序作为连接高级语言和机器语言的重要桥梁,在软件工程领域占据着举足轻重的地位。为了提高编译器的质量和效率,研究人员发展了多种编译器开发...

    基于JSP校园网文档管理系统的设计与实现本科学生毕业论文.doc

    第三章 系统设计 3.1 数据库设计 通过ER图(实体关系图)设计数据库结构,包括用户表、文档表、权限表等,确保数据的合理组织和高效访问。 3.2 系统架构设计 采用三层架构,包括表示层(浏览器)、业务逻辑层...

    java_ssm基于Java的共享客栈管理系统的设计与实现jsp毕业论文.doc

    第 1 章 绪论 1.1 课题背景 随着互联网的快速发展和普及...未来可进一步优化系统性能,引入云计算技术,提高可扩展性,并考虑对接第三方支付平台,提供更多的便捷服务。 关键词:共享客栈管理系统;Java 语言;Mysql

    基于jsp+ssh的滑雪场管理系统源码数据库论文.doc

    第三章 功能模块设计 3.1 会员信息管理 会员信息管理模块用于记录会员的基本信息,包括姓名、联系方式、消费记录等,支持会员注册、登录、信息修改和查询等功能。 3.2 雪具信息管理 此模块管理滑雪场的各种设备,...

    基于ssm的汽车租赁系统论文.docx

    第 2 章 系统需求分析 2.1 功能需求 汽车租赁系统包括以下几个核心功能模块: - 客户管理:注册、登录、个人信息管理等。 - 汽车信息管理:车辆型号、价格、状态等信息的录入、修改和查询。 - 租赁管理:租赁申请、...

    JINI核心技术

    第3章 Jini模型 31 3.1 Jini设计的中心 31 3.1.1 简明性 31 3.1.2 可靠性 31 3.1.3 可伸缩性 32 3.2 设备不可知论 33 3.3 Jini不是什么 33 3.3.1 Jini不是名字服务器 33 3.3.2 Jini不是JavaBeans 34 3.3.3 Jini不是...

    app视频点播直播系统方案[归纳].pdf

    第三章涉及平台相关技术,如Windows Media 9 Server,它是微软提供的流媒体服务器,用于分发视频内容。数据库则是存储用户信息、视频元数据和操作日志的关键组件,可能选用MySQL、SQL Server或NoSQL数据库等。开发...

    JINI 核心技术

    第3章 Jini模型 31 3.1 Jini设计的中心 31 3.1.1 简明性 31 3.1.2 可靠性 31 3.1.3 可伸缩性 32 3.2 设备不可知论 33 3.3 Jini不是什么 33 3.3.1 Jini不是名字服务器 33 3.3.2 Jini不是JavaBeans 34 3.3.3 Jini不是...

Global site tag (gtag.js) - Google Analytics