欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    2022年joomla组件教程 .pdf

    • 资源ID:27189154       资源大小:1.69MB        全文页数:40页
    • 资源格式: PDF        下载积分:4.3金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要4.3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    2022年joomla组件教程 .pdf

    Joomla! 扩展开发 引言 .2 第一章 Joomla! 扩展开发:概况.2 为什么扩展 Joomla.2 自定义 VS 扩展 .2 如何扩展 Joomla.2 主题概况 .3 第二章 组件开发入门.4 Joomla! 组件的结构 .4 执行组件 .4 Joomla! 前后端的分离.5 在数据库注册组件.6 创建工具栏 .8 有效的工具栏按钮.10 第三章 后端开发 .11 创建数据表 .12 创建数据表类.12 创建点评表单.13 处理数据 .19 创建列表 .21 编辑记录 .24 删除记录 .27 第四章 前端开发 .27 点评列表 .27 显示一个点评.29 创建搜索引擎友好链接.32 创建 URL 段.33 分析 URL 段.34 添加评论 .34 显示评论 .39Author blog:http:/ - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 40 页 - - - - - - - - - 引言Joomla! 赢得了强大的可扩展的内容管理系统的大奖。使得他很容易让第三方开发人员 扩展 Joomla!的核心功能而不用修改核心的代码。 当一个扩展被开发出来,它能够被打包成ZIP 文件给网站管理员上传和使用。管理基 于 Joomla!网站和想使用扩展的人不需要知道任何的编程知识。 上传了ZIP 文件就可以安装 扩展。 Joomla!这个名字来自斯瓦西里语的单词“jumla” ,意思是“一起”或者“整体” 。所 有的组件真的是“一起的,整体的” 。第一章 Joomla! 扩展开发:概况你以前开发过动态网站但你的朋友告诉你有关 Joomla!的事,所以你决定试一试。从食 物网上那些出名的厨师中得到灵感后,你想建立一个简单的关于餐厅的网站。这个网站的安 装比你期望要建立的内容管理系统要快速和平稳。 当你找到一个精美的模板并添加了一些菜单和一些内容后, 你开始考虑增加一些新的特 性可以给你带来更多的访问量,甚至一些钱。之后,你安装了购物车来买书,一个论坛来收 集意见和一些边栏广告。为什么扩展 JoomlaJoomla!不但能够处理内容文章,而且允许你干净地综合各种复杂的应用。开发者为Joomla!开发各种扩展,如购物车、论坛、职位发布等。所有这些扩展能够运行在单个数据 库、模板和核心。我们开发出来的扩展,界面是完全统一的。 当你正确地开发扩展时,你就不用登录数据库和做其他基本的配置。另外,你也可以分 发你自己开发的扩展给别人和别人分享,不需要另外的编程和数据库操作。自定义 VS 扩展Joomla!的代码是设计成可扩展的而不是直接修改它的核心代码。当有升级版本或者有 补丁的时候, Joomla!会升级它本身的核心代码,而你的扩展你不会被覆盖的。如何扩展 JoomlaJoomla!支持三类扩展,每一类都有特殊的用途。 组件 组件是最基本的,组件就是你所看到的页面的主要部分。Joomla!的设计是来为每个页 面加载和运行一个组件。因此,Joomla!核心的内容管理功能本身也是一个组件。 组件经常会有强大的后端管理。 后端通常用来创建和更新数据库记录。你也可以用它来 允许网站管理员来上传图片或者视频。 模块名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 40 页 - - - - - - - - - 相对组件,一个页面可以有很多的模块。模块一般由边栏的元素或者是内容菜单组成, 模块显示组件的内容,它们不是页面的主要内容。Joomla! 也支持不需要编程的内容模块。 模块后端的控制是有限制的,一般由基本的格式组成。 插件 当网站需要插入一些代码来实现某些逻辑,它可以由插件实现(以前叫做Mambot) 。 插件一般用来格式化页面的组件或者模块的输出。例如有这样的组件,关键字高亮显示、文 章点评表单、基于JavaScript 的 HTML编辑器等。后端的控制与模块相似。主题概况创建工具栏和列表Joomla!的后端提供了一套标准的工具栏按钮。它们使得界面可以保持一致的风格,所 以使用者可以很快地熟悉相应的功能。如果有必要的话,这些按钮可以修改和添加。和标准 的工具栏一样, 数据库记录的列表也有统一的显示风格。这些列表通常会包括编辑单条记录 的链接,改变发布状态的链接和提供自动分页功能。 使用 HTML 函数来维护一致的外观和减少重复的代码 在你的扩展里, 有各种标准的CSS类名可以用来格式化内容和HTML 元素。 另外, Joomla! 包含很多函数可以自动生成复选框、下拉框和其他通用的元素。 访问数据库和管理记录Joomla!提供了一个公用的数据库对象,可以让每个页面的请求只适用一个连接。这个 对象提供了一组函数用来查询数据和返回结果。这些函数是独立数据库的, 他们被设计成支 持一个数据库多Joomla!。 除了一个公用的数据库对象,Joomla!还提供了标准的数据库表类。 使用它核心的函数可以创建、读取、更新和删除记录。也可以添加这样的逻辑,当父记录被 删除,其他表的子记录也会被删除。 安全和获取请求变量的首选方法 既然 Joomla!是一个公开的web 应用,有必要保护他免受攻击。Joomla!提供了只有在 框架里被调用的保险的脚本方法,也不会随便地执行。除非是未明的脚本行为,黑客能故意 地提交数据来访问你的数据库,Joomla!提供了阻止这类攻击的功能。 菜单项控制Joomla!的一个显著的特性是导航与内容分离。然而,如果一个组件创建时没有考虑到 这一点, 网站管理员可能会不能选择他们的模板和模块。为了利用这给系统,有必要在产生 连接时使用既定的菜单项 ID 数字。组件的链接可以有多个选项,允许在前端显示不同的选 择而不用手工去构建长长的 URL 。 控制组件的逻辑流 当某一个组件被加载时同一个文件被调用,但是执行不同的函数。Joomla!使用标准的 变量来决定每个请求要执行的函数。对于比较小的组件,可以用来从数据库和其它处理函数 直接处理输出,比较大的组件会使用controller来处理逻辑流,用model来处理数据访问,用名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 40 页 - - - - - - - - - views来控制输出。这样的约定使得维护代码更加容易和帮助组件以更可靠的方式执行。 通过 XML 进行参数配置Joomla!不是通过创建单独的表来处理扩展的配置信息,而是预留了一个字段来处理。 变量通过扩展中的XML 文件定义。 XML 文件也提供了默认值和约束这些参数。而且会自动 地保存和返回这些值,而不需要手写查询语句。 打包和分发 一旦所有的代码都编写完成,它是很容易打包给其他人使用的。所有文件的一个列表会 被加入到 XML 文件中。任何需要建立数据表的查询语句也会包含在里面。所有文件被压缩 成一个文件,然后这个扩展就可以被任何基于Joomla!的网站安装和使用。第二章 组件开发入门在你进行编码之前,有一些文件和文件夹需要创建和一些查询语句需要运行。你不但可 以创建组件而且不用额外的配置就可以尝试不同的特性。你也可以看到 Joomla!组织和访问 组件方法的概况。最后,你会像其它组件一样加入工具栏。Joomla! 组件的结构Joomla!的所有组件都遵守指定的命名约定。每个系统组件都有唯一的名字,名字不要包括 空格。代码分成两个文件夹,文件夹以 com_开头,紧接着就是组件的名字。因此,你要创 建两个相同名字的com_reviews 文件夹,一个放到前端components 下,另一个放到后端administrator/components 下。当组件被前端加载的时候,Joomla!将会查找以组件唯一命名 并以.php 扩展名结束的文件。 在 components/com_reviews 下建立 review.php 文件。 相似地, 在后端建立的文件需要在前面加上admin. ,在 administrator/components/com_reviews 下建 立 admin.reviews.php。执行组件Joomla!前端所有的请求都经过根目录的index.php 文件,加载不同的组件是通过设置URL GET 的option 变量。假设你本地的joomla! 站点地址是http:/localhost/joomla/index.php ,那 么你加载的组件的地址应该是http:/localhost/joomla/index.php?option=reviews,打开reviews.php 文件并加入以下代码:?php defined( _JEXEC ) or die( Restricted access )? echo Restaurant Reviews? ?你会看到类似的页面:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 40 页 - - - - - - - - - 你可能想知道一开始调用defined() 函数的目的是什么,这是为了确保避免代码被直接 通过components/com_reviews/reviews.php 来访问。 在后端的 administrator/components/com_reviews/admin.reviews.php 文件加上以下代码:浏览地址http:/localhost/joomla/administrator/index.php?option=com_reviews , 比较页面的输 出:Joomla! 前后端的分离Joomla! 的所有组件,它们的代码使得后端部分与前端部分的代码很好地分离,在某些 情况下,例如数据库表类,后端会使用前端的某些文件,但它们是独立的。当你不让后端的 函数混入前端的代码那么安全性就加强了。 这是后端和前端的结构相似的同时的一个很重要 的特性。以下显示了Joomla! 的根目录和administrator 文件夹展开的图表:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 40 页 - - - - - - - - - 要注意的是administrator 文件夹与根目录有相似的结构。区分它们俩是很重要的,否则你 可能会将你的代码放错位置了而执行失败,除非是将它们放回正确的位置。在数据库注册组件你现在知道怎么样访问前端和后端的组件,尽管每次你都能够通过手工输入 URL 来执 行你的代码,但你的用户你无法接受的。如果你在数据库注册了组件,即在 components 数 据表中加入一条记录,那么你就可以使用导航了。使用以下的 SQL 语句来注册组件:INSERT INTO jos_components (name, link, admin_menu_link, admin_menu_alt, option, admin_menu_img, params) VALUES (Restaurant Reviews, option=com_reviews, option=com_reviews, Manage Reviews, com_reviews, js/ThemeOffice/component.png, )? 这里声明了组件的名称,可以包括空格和标点,可以指定前端和后端的链接,可以指定 后端组件菜单的图标。 当你建立了基本的目录并加入了文件, 有的组件已经准备好被执行了, 而不需要写任何的 SQL 语句。这样你就在后端加入了组件的链接,也可以在前端适当的位 置加入链接而不需要硬编码URL 。刷新你后端的页面,下拉组件菜单,你会看到你的组件 的子菜单项:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 40 页 - - - - - - - - - 既然组件已经注册了,你就可以在前端创建链接,去到 “菜单”| “主菜单”,然后单击 “新建”按钮,从该页面中选择“Restaurant Reviews”,输入链接名称后,如下图: 点击“保存”,然后去到前端,你应该看到“Reviews”链接:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 40 页 - - - - - - - - - 你可以准备你的PHP技巧开始编写组件了。还要确保所有的前端请求都要通过http:/localhost/joomla/index.php?option=com_views,后端的请求通过http:/localhost/joomla/administrator/index.php?option=com_reviews。Joomla!是非常灵活的,可以让你做你喜欢做的事情。我们这个例子中,会教你从新建 一个组件开始,然后设计工具栏、用户、数据库类和库等,一旦你理解了它们的工作原理, 这些元素将会省下你大量的时间。创建工具栏在 Joomla! 的后端,所有的核心组件都实现相同的保存、删除、编辑和发布项目等按钮,你 可 以 在 你 的 组 件 中 使 用 这 些 按 钮 以 便 管 理 员 会 有 无 缝 的 体 验 。 首 先 , 在administartor/components/com_reviews 文件夹下创建toolbar.reviews.html.php 文件,并输入 一下代码: 包括输出代码的文件通常会组织成类,像这里的TOOLBAR_reviews 。每个成员函数都 会显示不同的工具栏。JtoolBarHelper 类包含了所有创建工具栏HTML 元素的函数,你也可 以加入自定义的HTML 。你需要明白的是工具栏是有HTML 表格构建的,你可能想在你的导 航上加入 标签。 工具栏现在被定义,但你需要加入一些代码来决定显示哪些按钮。Joomla!会自动加载 以组件名开始,以.reviews.php 结束的文件。加入以下的代码到administrator/components/com_reviews 下的toolbar.reviews.php 文件:这 行 包 含require_once() , 使 用JapplicationHelper 类 的 成 员 函 数getPath() 来 获 取toolbar.reviews.php 文件的路径,而不用包括组件的名称,即使你改变了组件的名称,你不 需要修改代码还是可以正常加载文件。 说明:你可能想知道为什么一开始就创建toolbar.reviews.php 和 toolbar.reviews.html.php 这 两个文件。 组件开发人员首选的编码风格是让处理逻辑与输出完全分离,这样以后加入特性 和与别人分享代码就非常容易了。toolbar.reviews.php 用输出类加载文件后, 你需要要决定显示哪个工具栏。 请求的变量$task 会自动注册成为全局变量并有来导向组件的逻辑流。现在刷新后端的页面,进入Restaurant Reviews 组件,然后你应该能看到以下的工具栏: 要看其它的工具栏,在URL 后面加上&task=add ,重新加载页面,你应该看到以下的工具 栏:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 40 页 - - - - - - - - - 当你的用户要使用你的组件的时候,他们当然不想自己手动地在URL后添加task 变 量,那么他们怎么才能使用第二个工具栏呢?每个工具栏都对应着不同的task ,当一个按 钮被点击,相关的task 就会加入到表单中并自动提交。 一旦适合的表单在适合的位置时,单击“新建”按钮会看到第二个工具栏,既然我们没 有任何的表单在后端, 这些工具栏按钮是不会工作的。 下一章将会教你怎么让这些按钮生效。有效的工具栏按钮Joomla!允许你使用自己的task 和 label 覆盖任何的按钮, 分别传入第一个和第二个参数来 覆盖。以下是 Joomla!标准版本提供的有效的按钮:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 40 页 - - - - - - - - - 说明: 如果你想创建想核心按钮一样的自定义按钮,可以使用JtoolBarHelper 的成员函数custom() ,并传递task、icon、mouse-over 图片和文本描述作为参数。第三章 后端开发名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 40 页 - - - - - - - - - 创建和管理点评是我们组件的最大任务。 我们会加入表单和数据库函数,然后就可以添 加点评。创建数据表在建立界面来输入点评前,我们需要创建点评的数据表: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 文件并输入一下代码: 我们继承了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 ,用以下 的代码替换原来的内容: array(value = None Taken,名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 40 页 - - - - - - - - - text = None Taken), 1 = array(value = Accepted, text = Accepted), 2 = array(value = Suggested, text = Suggested), 3 = array(value = Required, text = Required), )? $listsreservations = JHTML:_(select.genericList, $reservations, reservations, class=inputbox . , value, text, $row-reservations )? $listssmoking = JHTML:_(select.booleanlist, smoking, class=inputbox, $row-smoking)? $listspublished = 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 文件并加入以下代码: Details 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 40 页 - - - - - - - - - Name: input class=text_area type=text name=name id=name size=50 maxlength=250 value=name? / Address: input class=text_area type=text name=address id=address size=50 maxlength=250 value=address? / Reservations: Quicktake: display( quicktake, $row-quicktake , 100%, 150, 40, 5 ) ? ? Review: 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 40 页 - - - - - - - - - display( review, $row-review , 100%, 250, 40, 10 ) ? ? Notes: notes? ? Smoking: Credit Cards: input class=text_area type=text name=credit_cards id=credit_cards size=50 maxlength=250 value=credit_cards? / Cuisine: input class=text_area type=text name=cuisine id=cuisine size=31 maxlength=31 value=cuisine? /名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 40 页 - - - - - - - - - Average Dinner Price: $input class=text_area type=text name=avg_dinner_price id=avg_dinner_price size=5 maxlength=3 value=avg_dinner_price? / Review Date: input class=inputbox type=text name=review_date id=review_date size=25 maxlength=19 value=review_date? ? / Published: input type=hidden name=id value=id? ? / input type=hidden name=option value= / 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 40 页 - - - - - - - - - 在浏览器地址栏输入 http:/localhost/joomla/administrator/index. php?option=com_reviews&task=add ,然后你会看到: 我们的editReview() 函数根据传过来的数据表行对象,结合了HTML 来输出内容。所以editReview() 函数总是用来显示外观,输出内容之前函数包含了一组帮助函数来增强UI 元 素。 说明:JHTML:_() 做了什么?名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 18 页,共 40 页 - - - - - - - - - Joomla!提供了很多自动生成HTML 元素的函数,如下拉列表、复选框等。为了提供执行的 效率,这些函数只有在需要的时候才会读到内存里。这个工作有_() 函数来完成。 首先, JFactory:getEditor() 函数返回HTML 编辑器, JHTML:_(behavior.calendar) 函数会 在 header 中加入 JavaScript 和 CSS ,这是用在点评日期字段中弹出日历的代码:class HTML_reviews function editReview( $row, $lists, $option ) $editor =& JFactory:getEditor()? JHTML:_(behavior.calendar)? 编辑器对象的成员函数 display() 返回选择的富文本编辑器的 HTML , 如果富文本编辑器不 存在就返回 元素。 display( quicktake, $row-quicktake , 100%, 150, 40, 5 ) ? ? display() 函数带有以下的参数:表单变量名、值、宽、高、列数和行数。当没有使用HTML 编辑器,最后两个参数是 的大小。处理数据管 理 员填 完 表单 并且 当 即保 存按 钮 后, 我们 需要 保 存信 息 到数 据库 里 。开 始, 在admin.reviews.php 中创建saveReview() 函数:function saveReview( $option ) global $mainframe? $row =& JTable:getInstance(review, Table)? if (!$row-bind(JRequest:get(post) echo alert(.$row-getError().)? window.history.go(-1)? n? exit()? $row-quicktake = JRequest:getVar( quicktake, , post, string, JREQUEST_ALLOWRAW )? $row-review = JRequest:getVar( review, , post, string, JREQUEST_ALLOWRAW )? if(!$row-review_date)名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 19 页,共 40 页 - - - - - - - - - $row-review_date = date( Y-m-d H:i:s )? if (!$row-store() echo alert(.$row-getError().)? window.history.go(-1)? n? exit()? $mainframe-redirect(index.php?option= . $option, Review Saved)? 首先,将全局变量$mainframe 传进来,$mainframe 对象提供很多成员函数来控制session 变量和headers。然后将TableReview 类的一个实例赋值给$row ,类的名字由第 一个参数和第二个参数组合而成,第二个参数是第一个参数的前缀。第二步, 使用 bind() 成 员函数来加载表单中所有变量到$row 中。bind() 函数传一个关联数组参数并且要数组的所有元素都要和对象的成员变量完全匹 配。为了减少 SQL 注入的风险,我们使用Jrequest:get() 来清除$_POST 的值,这个过程 会过滤掉所有能够控制 SQL 的字符。 如果bind() 失败了会弹出一个JavaScript 的警告对话框并返回到前一个页面。绑定后 就可以直接操作$row 的成员变量。 既然quicktake 和 review 字段都接受 HTML 内容,那 么它们需要对bind() 函数进行清除HTML 的特殊处理。 要做这样处理, 可以使用Jrequest 的成员函数getVar() 并传递表单的变量名、默认值、请求的数组、期望的格式和各自JREQUEST_ALLOWRAW 标识。以防点评没有选择日期,我们赋了当前日期给点评日期。 最后,调用store() 函数, 把所有的成员变量都转化成UPDATE 和 INSERT 语句(由id 的值决定是UPDATE 还是 INSERT) 。因为是第一次创建记录,id 没有值,所以会构建INSERT 查询语句。 如果有 SQL 错误就返回上一页, 通常这一类的 SQL 错误都是由于$row 额外的成员变量而没有在数据表类中引起的。那么如果发现有 SQL 错误,第一时间就是要 检查确保你的成员变量的拼写要与数据表的列一致。否则,如果SQL 执行成功,将使用$mainframe 的 redirect() 函数返回组件的页面。 此时,admin.review.php 中的 switch() 语句只是执行添加任务。既然我们已经有了表单 和函数,那么添加一个分支来保存我们的数据。添加以下粗体的代码:switch($task) case add: editReview( $option )? break?case save: saveReview( $option )? break? 保存文件后访问这个地址:http:/localhost/joomla/administrator/index. php?option=com_reviews&task=add 你填好表单后点击保存,你能看到类似以下的页面:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 20 页,共 40 页 - - - - - - - - - 说明: 为什么我们不能点击“新建”按钮? 工具栏的按钮需要有名字为adminForm 的表单才能有效,既然现在没有表单,那么点击任 何的按钮都产生JavaScript 错误的。当你加上adminForm 表单后,按钮马上就生效了。 如果一切正常,那么你可以在phpMyAdmin 中找到类似以下的数据:创建列表既然我们的管理员不会有访问phpMyAdmin 的权限,我们需要创建显示点评的列表。开始 我们在 admin.reviews.php 中添加以下函数:function showReviews( $option ) $db =& JFactory:getDBO()? $query = SELECT * FROM #_reviews? $db-setQuery( $query )? $rows = $db-loadObjectList()? if ($db-getErrorNum() echo $db-stderr()? return false? HTML_reviews:showReviews( $option, $rows )? 这个函数加载了将被显示的数据,我们得到了一个当前数据库连接的引用, 然后调用它 的成员函数setQuery() ,setQuery() 函数带一个SQL 语句的字符串为参数,但只做存储之 后使用而不是立即执行。当调用loadObjectList() 函数,之前设置的SQL 语句就会执行并 返回记录到一个数组中。如果运行过程出现错误,那么将显示错误和停止组件运行。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 21 页,共 40 页 - - - - - - - - - 如果一切正常,那么把记录结果的数组传给admin.reviews.htlm.php 中的成员函数showReviews(),如下:function showReviews( $option, &$rows ) ? input type=checkbox name=toggle value= onclick=checkAll()? / Name Address Reservations Cuisine Cred

    注意事项

    本文(2022年joomla组件教程 .pdf)为本站会员(Che****ry)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开