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

第三章 后端开发

阅读更多

第三章        后端开发


    创建和管理评论是我们组件的最大任务。我们会加入表单和数据库函数,然后就可以添加评论。

创建数据表

在建立界面来输入评论前,我们需要创建评论的数据表:

CREATE TABLE 'jos_reviews'

(

'id' int(11) NOT NULL auto_increment,

'name' varchar(255) NOT NULL,

'address' varchar(255) NOT NULL,

'reservations' varchar(31) NOT NULL,

'quicktake' text NOT NULL,

'review' text NOT NULL,

'notes' text NOT NULL,

'smoking' tinyint(1) unsigned NOT NULL default '0',

'credit_cards' varchar(255) NOT NULL,

'cuisine' varchar(31) NOT NULL,

'avg_dinner_price' tinyint(3) unsigned NOT NULL default '0',

'review_date' datetime NOT NULL,

'published' tinyint(1) unsigned NOT NULL default '0',

PRIMARY KEY ('id')

);


创建数据表类

我们能够编写独立的函数来处理评论数据的添加、更新和删除。我想这些功能你都不想重复地编写。幸运地是,Joomla!团队已经为你做了。JTable 这个类提供了处理单个数据表的记录的创建、读取、更新和删除操作。要利用JTable,我们需要写一个指定到jos_reviews表的扩展。在administrator/components/com_reviews 文件夹下,创建一个tables文件夹,然后在里面创建 review.php 文件并输入一下代码:

<?php

defined('_JEXEC') or die('Restricted access');

class TableReview extends JTable

{

var $id = null;

var $name = null;

var $address = null;

var $reservations = null;

var $quicktake = null;

var $review = null;

var $notes = null;

var $smoking = null;

var $credit_cards = null;

var $cuisine = null;

var $avg_dinner_price = null;

var $review_date = null;

var $published = null;

function __construct(&$db)

{

    parent::__construct( '#__reviews', 'id', $db );

}

}

?>

我们继承了JTable类,并加入数据表的所有字段作为类的成员变量,成员变量都初始化为null。然后覆盖类的构造函数 __construct() __construct() 会带有一个数据库对象为参数,并调用父类的构造函数,以数据表名(以#__为前缀)、主键和数据库对象为参数值。

说明:

为什么要使用 #__ 为数据表的前缀?

Joomla!编写查询和定义JTable 扩展时,使用 #__ 代替 jos_Joomla! 执行查询时会自动将 #__ 替换为 管理员选择的数据库前缀。这样的好处是可以在同一个数据库中运行多套Joomla!。你随便修改数据库的前缀也不用修改代码。

 

       TableReview 类继承了 bing()store()load() delete() 等函数,这四个函数可以让你不用写一行的SQL 就可以管理数据库的记录。

 

创建评论表单

       创建好了数据表,我们需要有一个友好的界面来增加评论。第一步,然我们创建一个表单来输入数据,我们想从逻辑中分离HTML,配置表单的必要代码会写在 admin.reviews.php中,admin.reviews.html.php中则包含实际的HTML代码。打开admin.reivews.php,用以下的代码替换原来的内容:

<?php

defined( '_JEXEC' ) or die( 'Restricted access' );

require_once( JApplicationHelper::getPath( 'admin_html' ) );

JTable::addIncludePath(JPATH_COMPONENT.DS.'tables');

switch($task)

{

case 'add':

editReview( $option );

    break;

}

function editReview( $option )

{

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

$lists = array();

$reservations = array(

    '0' => array('value' => 'None Taken',

           'text' => 'None Taken'),

    '1' => array('value' => 'Accepted',

           'text' => 'Accepted'),

    '2' => array('value' => 'Suggested',

           'text' => 'Suggested'),

    '3' => array('value' => 'Required',

           'text' => 'Required'),

);

$lists['reservations'] = JHTML::_('select.genericList',

$reservations, 'reservations', 'class="inputbox" '. '', 'value',

                                       'text', $row->reservations );

$lists['smoking'] = JHTML::_('select.booleanlist', 'smoking',

                              'class="inputbox"', $row->smoking);

$lists['published'] = JHTML::_('select.booleanlist', 'published',

                            'class="inputbox"', $row->published);

HTML_reviews::editReview($row, $lists, $option);

}

?>

       我们使用require_once( JApplicationHelper::getPath( 'admin_html' ) ) 来包含admin.reviews.html.php文件。getPath() 函数带一个字符串参数并返回与组件文件一致的绝对路径。尽管我们没有指定组件名,但是它会自动包含适当的文件,即使是改变了组件名也一样。使用require_once() 确保文件只被包含一次。

       addIncludePath() 成员函数会包含我们的数据表类,addIncludePath() 会自动包含所有我们定义在tables目录下的数据表类,太强大了,是吧?文件名和路径的构建都是跨平台兼容的。Joomla!设置JPATH_COMPONENT 为后端代码的绝对路径。DS常量是指定的操作系统的目录分隔符。switch() 语句检查 $task 变量,然后基于它的值来运行适当的函数。最后,editReview() 函数准备了一些HMTL元素然后传给显示函数 HTML_reviews::editReview()

       现在我们创建 admin.reviews.html.php文件并加入以下代码:

<?php
defined( '_JEXEC' ) or die( 'Restricted access' );
class HTML_reviews
{
function editReview( $row, $lists, $option )
{
    $editor =& JFactory::getEditor();
    JHTML::_('behavior.calendar');
    ?>
    <form action="index.php" method="post"
                 name="adminForm" id="adminForm">
      <fieldset class="adminform">
        <legend>Details</legend>
        <table class="admintable">
        <tr>
          <td width="100" align="right" class="key">
            Name:
          </td>
          <td>
            <input class="text_area" type="text" name="name"
               id="name" size="50" maxlength="250"
               value="<?php echo $row->name;?>" />
          </td>
        </tr>
        <tr>
          <td width="100" align="right" class="key">
            Address:
          </td>
          <td>
            <input class="text_area" type="text" name="address"
               id="address" size="50" maxlength="250"
               value="<?php echo $row->address;?>" />
          </td>
        </tr>
        <tr>
          <td width="100" align="right" class="key">
            Reservations:
          </td>
          <td>
            <?php
            echo $lists['reservations'];Chapter 3
            ?>
          </td>
        </tr>
        <tr>
          <td width="100" align="right" class="key">
            Quicktake:
          </td>
          <td>
            <?php
            echo $editor->display( 'quicktake', $row->quicktake ,
                                      '100%', '150', '40', '5' ) ;
            ?>
          </td>
        </tr>
        <tr>
          <td width="100" align="right" class="key">
            Review:
          </td>
          <td>
            <?php
            echo $editor->display( 'review', $row->review ,
                                     '100%', '250', '40', '10' ) ;
            ?>
          </td>
        </tr>
        <tr>
          <td width="100" align="right" class="key">
            Notes:
          </td>
          <td>
            <textarea class="text_area" cols="20" rows="4"
               name="notes" id="notes" style="width:500px"><?php echo
               $row->notes; ?></textarea>
          </td>
        </tr>
        <tr>
          <td width="100" align="right" class="key">
            Smoking:
          </td>
          <td>
            <?php
            echo $lists['smoking'];
            ?>Back-End Development
          </td>
        </tr>
        <tr>
          <td width="100" align="right" class="key">
            Credit Cards:
          </td>
          <td>
            <input class="text_area" type="text" name="credit_cards"
               id="credit_cards" size="50" maxlength="250"
               value="<?php echo $row->credit_cards;?>" />
          </td>
        </tr>
        <tr>
          <td width="100" align="right" class="key">
            Cuisine:
          </td>
          <td>
            <input class="text_area" type="text" name="cuisine"
               id="cuisine" size="31" maxlength="31"
               value="<?php echo $row->cuisine;?>" />
          </td>
        </tr>
        <tr>
          <td width="100" align="right" class="key">
            Average Dinner Price:
          </td>
          <td>
            $<input class="text_area" type="text"
                 name="avg_dinner_price"
                 id="avg_dinner_price" size="5" maxlength="3"
                 value="<?php echo $row->avg_dinner_price;?>" />
          </td>
        </tr>
        <tr>
          <td width="100" align="right" class="key">
            Review Date:
          </td>
          <td>
            <input class="inputbox" type="text" name="review_date"
               id="review_date" size="25" maxlength="19"
               value="<?php echo $row->review_date; ?>" />Chapter 3
            <input type="reset" class="button" value="..."
               onclick="return showCalendar('review_date',
               'y-mm-dd');" />
          </td>
        </tr>
        <tr>
          <td width="100" align="right" class="key">
            Published:
          </td>
          <td>
            <?php
            echo $lists['published'];
            ?>
          </td>
        </tr>
        </table>
      </fieldset>
      <input type="hidden" name="id"
        value="<?php echo $row->id; ?>" />
      <input type="hidden" name="option"
        value="<?php echo $option;?>" />
      <input type="hidden" name="task"
        value="" />
    </form>
    <?php
}
}
?>
在浏览器地址栏输入http://localhost/joomla/administrator/index.

php?option=com_reviews&task=add,然后你会看到:

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

 

分享到:
评论

相关推荐

    第四章 第二节:后端服务开发.pdf

    • 第三节:前端服务开发体验 • 系统应用前端开发详解 3 STM32-阿里云IoT 联合课件开发 第四章 . 第二节 后端服务开发 第四章.第二节 内容简介 • 认识后端框架 • Mysql数据库介绍 • MyBatis框架 • SpringBoot...

    Python-基于Django开发的商场后端管理系统

    这个系统为初学者提供了了解和学习Python后端开发,尤其是Django框架的实践机会。在深入探讨相关知识点之前,我们先来了解一下Django的基本概念。 Django是一个高级的、免费的开源Web框架,遵循模型-视图-控制器...

    软件工程中的后端开发与性能优化.pptx

    #### 第3章 数据库优化 **数据库索引优化** - **合理设计索引**:根据查询模式创建索引,减少查询时的数据扫描量。 - **定期检查索引使用情况**:确保索引的有效性,必要时进行调整或重建。 **查询优化** - **...

    第四章 第三节:前端服务开发体验.pdf

    • 第三节:前端服务开发体验 • 前端框架,初始化首个前端项目,组件的使用和数据流转,部署 3 STM32-阿里云IoT 联合课件开发 第四章 . 第三节 前端服务开发 第四章.第三节 内容简介 • 前端基础概念和知识 • 认识...

    01-第五章-看病就诊前后端开发【后端】1

    【标题】:“01-第五章-看病就诊前后端开发【后端】1” 在这一章节中,我们探讨的是一个名为“Open-his”的看病就诊系统的后端开发过程,主要涉及医生排班功能的实现。这个系统是为医疗机构设计的,帮助医生管理和...

    Java Web开发实例大全

    第3章 数据库操作技术 第4章 SQL语句应用技术 第5章 复杂查询技术 第6章 数据库高级应用 第3篇 图表统计篇 第7章 JFreeChart绘图基础 第8章 基础图表技术 第9章 扩展图表技术 第10章 基于Cewolf组件的图表编程 第4篇...

    Visual C#基于组件的开发(源码)

    第三章 组件设计 第四章 组件分类 第五章 调试 第六章 部署 第二部分 前端组件 第七章 WINDOWS窗体组件 第八章 使用WEBBROWSER组件创建前端 第九章 自定义控件 第十章 用户控件 第十一章 数据库前端 第十...

    计算机后端-Java-Java核心基础-第18章 项目实战 19. 项目三TeamView中添加开发团队成员.avi

    计算机后端-Java-Java核心基础-第18章 项目实战 18. 项目三TeamView中显示开发团队成

    计算机后端-Java-Java核心基础-第18章 项目实战 18. 项目三TeamView中显示开发团队成员.avi

    计算机后端-Java-Java核心基础-第18章 项目实战 18. 项目三TeamView中显示开发团队成

    计算机后端-Java-Java核心基础-第18章 项目实战 20. 项目三TeamView中删除开发团队成员.avi

    计算机后端-Java-Java核心基础-第18章 项目实战 20. 项目三TeamView中删除开发团队成

    网站项目设计与开发实战(第3章)

    在《网站项目设计与开发实战(第3章)》中,我们主要探讨的是网站开发过程中的关键技术和实践方法。这是一份由北大青鸟提供的学习资料,旨在帮助开发者深入理解并掌握网站构建的核心技巧。本章的内容可能涵盖了一...

    后台开发的一些源代码

    第一部分(第1~3章)介绍了编程语言方面的知识,包括常用语法、类与常用STL的使用。 第二部分(第4~5章)介绍了编译原理和调试方法相关的知识,编译原理包括编译与链接的具体过程、Makefile的编写、目标文件的...

    基于微信小程序的新闻资讯开发后端+php毕业论文.doc

    第三章 功能模块详解 3.1 新闻发布与管理 新闻发布模块允许管理员上传和编辑新闻,包括标题、内容、图片和分类等信息。同时,系统需提供新闻审核机制,确保发布的新闻内容合法合规。 3.2 用户注册与登录 用户...

    十次方-大型前后端分离项目-全部文档.rar

    第3章-使用ElementUI开发管理后台-1 第4章 路由与状态管理 第5章 网站前台-活动与招聘 第6章 网站前台-登陆与用户中心 第7章 网站前台-吐槽与问答 后端目录: 第1章-系统设计与工程搭建 第2章-查询与缓存 第3章-...

    跟我一起写DApp(转型区块链开发推荐课程)

    分享课程——《跟我一起写DApp(转型区块链开发推荐课程)》,课程内容上主要分为3部分:项目...第三章:以太坊go-sdk使用 第四章:后端应用开发实战 第五章:联盟链fisco-bcos使用介绍 第六章:基于fisco-bcos应用实战

    第三章实验代码

    在"第三章实验代码"中,我们可以期待看到以下几个关键知识点: 1. 数据结构与算法:作为程序设计的基础,数据结构用于高效存储和组织数据,而算法则是解决问题的具体步骤。在旅游资源管理中,可能会用到如链表、树...

    DeepLearning深度学习教程_第十八章_后端架构选型、离线及实时计算.pdf

    章 后端架构选型、离线及实时计算 在深度学习领域,处理大量数据的能力是至关重要的。随着数据量的急剧增长,单机计算已无法满足高效分析的需求,因此分布式计算成为了解决这一问题的关键。分布式计算允许数据在多...

    数据库开发实例精粹第三章

    ### 数据库开发实例精粹第三章 #### 章节概述 本章节主要围绕企业级应用中的数据库开发进行深入探讨,旨在通过具体的案例来帮助读者理解如何在实际项目中有效地设计、开发与维护数据库系统。 #### 核心内容解读 ...

    深入理解Bootstrap 高清晰完整版PDF+源代码

    深入理解Bootstrap 目录:第1章 入门准备 第2章 整体架构 第3章 CSS布局 第4章 CSS组件 第5章 JavaScript插件 第6章 实战:扩展现有组件 第7章 实战:Win8磁贴组件开发 第8章 实战:组合应用开发 第9章 第三方扩展 ...

    JSP项目开发之第7章 物流信息网

    总的来说,"JSP项目开发之第7章 物流信息网"涵盖了Web开发中的多个关键环节,包括前端展示、后端处理、数据库设计、安全控制以及用户体验优化。通过学习和实践这个项目,开发者不仅能掌握JSP技术,还能了解到如何...

Global site tag (gtag.js) - Google Analytics