joomla2.5推出已经非常久了,但是我们可以找到的资料可以说是没有的,这里是中文资料,英文还是有的。在2.5上边开发模块和1.5可以说基本是没有区别的,就不说了很简单。但是组件开发变化还是非常大的,从2.5开始,我们可以看到组件基本上都是引入了MVC模式来开发的,但是如果开发一个小功能的组建了,谁都知道建立那些xml文件也不是什么轻松的事情,一般我们还是用DW快些,更有一些内部的表单生成,这些都能辅助快速,但是对于我不喜欢记忆那么多的方法的人,还是选择传统的方式,毕竟这些方式对于任何系统都是可用的,而且速度更快。今天就专门说说在2.5中不使用xml来生成表单,和2.5中如何写出一个完整的组件.

这个组件功能有这些,通过一个数据表,存储一些信息,比如qq,email,电话,简介,和三张照片信息.另外还要修改网站标题,用于seo的描述和关键字.先来分析,我们发现前面和后面可以用一个tab切换来搞定,这也是joomla组件多数实现的方式,网站的全局配置组件就是这种模式.好了,下面分步骤一步一步来完成这个组件.

1.开发组件准备,建一个数据表,里面存储相关字段,不具体说了,这个不会可以直接闪人了.注意一下,照片我们仅仅存入照片名称以及带扩展名,路径不存入.接着模拟数据建立一条信息,接着在extensions里面建一个组件菜单,不然后台没有,还有备份配置文件configuration.php,因为后边做第二个问题要改写这个,所以防止出错,弄的系统进不了.

2.建立基本组件开发框架.按照执行方式来说,配置文件是:组建.xml,里面组么写,找个对照着写,注意不要忘记某个文件了,不然打包安装出错.组件名后边就用test了.test.php就是组件主文件这个组件就是com_test.test.php内容

defined('_JEXEC') or die;
jimport('joomla.application.component.controller');
$controller    = JController::getInstance('Test');
$controller->execute(JRequest::getCmd('task'));
$controller->redirect();

所有组件标准的写法,只要换Test名称即可.

defined('_JEXEC') or die;jimport('joomla.application.component.controller');class TestController extends JController
{public function display($cachable = false, $urlparams = false){require_once JPATH_COMPONENT.'/helpers/test.php';TestHelper::addSubmenu(JRequest::getCmd('view', 'test'));$view        = JRequest::getCmd('view', 'test');JRequest::setVar('view', $view);parent::display();return $this;}
}

这是主控制器,controller.php文件里面主要就是添加了tab菜单,用来做上边两个功能,helpers/test.php就是切换功能的助手方法类:也有统一写法只要改改就可以

class TesttHelper
{/*** Configure the Linkbar.*/public static function addSubmenu($vName = ''){JSubMenuHelper::addEntry(JText::_('网站信息设置'),'index.php?option=com_test&view=test',$vName == 'test');JSubMenuHelper::addEntry(JText::_('网站SEO设置'),'index.php?option=com_test&view=seo',$vName == 'seo');}}

你还可以切换更多菜单,从这里就可以看出,我们实际上定义了test和seo两个视图V,明白这点也很重要.

3.重点来了,子控制器,controllers/test.php这个和外面那个同理,不过在这个文件夹下面我们可以根据自己需要建立更多的控制器,不过一般小功能都是建立一个,在这个里面有我们重要的TASK,就是执行操作.对于mvc模式,习惯性把数据处理放到模型里,不过简单的要写模型,还有表类啥的,感觉麻烦,我们就用php语言本身和sql来操作好了,这个在新的2.5并不提倡,但是我想说的是,对于这种使用一次的组件能快就行了,而且这样不见得就不好,对于一个不太了解joomla这种系统的人修改也还是方便的.当然大些涉及到增删改查的用标准更好,省去写方法.在这个控制器我们就需要两种方法,一个用来保存表信息,一个用来保存网站配置,对于提交过来的数据就在这两个方法里面处理.在这里并没有用到模型和相关表单类.接着就是视图了,viwe.html.php里面有一个添加方法,用来告诉提交后数据处理,新的joomla采用控制器名.方法名,这里就是 JToolBarHelper::save('test.save');另一个视图就是 JToolBarHelper::save('test.seo');这样就有右上角保存按钮了,更多按钮查阅相关资料,以后讲.最后就是模版文件default.php,里面主要是表单,因为我们使用传统的方法,所有这个表单你可以用DW来做再贴过来.

注意表单提交的action到这里index.php?option=com_test&tmpl=component&task=test.save,tmpl是用来只返回组建本身,对于修改信息,我们完全可以在这里写查询,虽然完全违背mvc,但这样不会错.

4.最后想说一下处理表单提交的数据,注意表单写成f[name],f[qq]这种名称,我们就可以直接接收数据f,然后来处理,在这用传统$_POST或者JRequest::getVar('f', array(), 'post', 'array');都是可以的,注意前者验证,这是一个数据,对于使用传统的sql来添加或者修改,我们可以使用数组值来处理,对于图片这个是不能接收到的,$_FILES还是比较好的,可以分开接收,数组接收也可以通过循环来上传,插入数据也要循环,个人觉得循环套着也不怎么好用,单独处理也行,随便吧,

5.对于改写配置,我们首先把那个配置文件里面的类读取成对象,然后转换成数组,再修改数组值,然后把数组转换成类的形式以文件写入覆盖原文件,这样就完成了配置,这也是处理常见配置文件的办法,具体代码就不说了,JArrayHelper::fromObject($config);可以把对象转换成数组,$obj = new JRegistry($dataConf);可以把数组还原对象,该对象有一个方法可以生成php代码$str = $c->toString('PHP', array('class' => 'JConfig', 'closingtag' => false));JFile::write($file, $str)这个方法就是写入文件第一个参数是文件完整包括文件名的路径.就这样可以改写joomla配置信息.

后记,以上方法在2.5中官方里面是不推荐的,官方几乎都是标准mvc模式,随便看看文件结构就知道,还有很多设计的新的管理类,如果你的组件不涉及管理表,没有分页,或者是增删改查之一用法,那我这种非官方方法也是不错的,这个在1.5很普遍,类多了选择多了,反而使人不好选择,简单故我在,选择合适自己的方法,代码只是工具,要完成的功能才是最重要.下次会讲标准MVC模式开发,总的来说,2.5中对象使用最普遍,有些,其实个人一直还是喜欢过程,因为,一般我是遇不到多么浩瀚项目,咱只是小小码农而已.

一个月才写一篇,觉得堕落了,一直也在研究2.5,还有thinkphp,还有就是研究足彩,3串1好呢还是2串1好呢?

附图一张 功能的一角

转载于:https://www.cnblogs.com/logoove/archive/2012/09/14/2685488.html

joomla2.5传统组件开发解析相关推荐

  1. Android开发精要2--Android组件模型解析

    本文的主要内容如下: 2.1 基于Mashup的应用设计 2.2 界面组件Activity解析 2.3 服务组件Service解析 2.4 触发器组件BroadcastReceiver解析 2.5 数 ...

  2. 减少存储过程封装业务逻辑-web开发与传统软件开发的思维模式不同

    转:减少存储过程封装业务逻辑-web开发与传统软件开发的思维模式不同 本篇文章讨论并不是:不要使用存储过程,因为有些事情还是要存储过程来完成,不可能不用.而是关于:"业务逻辑是不是要封装在存 ...

  3. ASP.NET2.0自定义控件组件开发 第六章 深入讲解控件的属性

    深入讲解控件的属性持久化(一) 系列文章链接: ASP.NET自定义控件组件开发 第一章 待续 ASP.NET自定义控件组件开发 第一章 第二篇 接着待续 ASP.NET自定义控件组件开发 第一章 第 ...

  4. React Native组件开发指南

    React Native的组件开发一直处在一个比较尴尬的处境.在官方未给予相关示例与脚手架的情况下,社区中依然诞生了许许多多的React Native组件.因为缺少示例与规范,很多组件库仅含有一个in ...

  5. ASP.NET自定义控件组件开发 第三章 为控件添加事件 后篇

    第三章 为控件添加事件 后篇 前一篇文章只是简单的说了下事件,但是大家应该方法,在ASP.NET自定义控件中只是简单那么定义事件是行不 通.如果大家开发的是WinForm中的事件,之前的定义可能没有什 ...

  6. .net组件开发系列之武术系列 武术招数 控件生命周期与控件事件机制

    .net组件开发系列之武术系列 武术招数 控件生命周期与控件事件机制一.控件生命周期 先回述上篇,可能表述没有不清晰,也可能跨度大了点,好的,我们来一个循序渐进过程,大家都知道,武术都有招术的,先出什 ...

  7. JSF:在传统组件和时尚性能杀手之间进行选择

    这篇博客文章起源于一个大型Web应用程序中的性能问题. 每个人都优化Java代码,但似乎没有人尝试优化JavaScript代码. 奇怪,因为在客户端有很多改进的空间. 我会说,甚至比服务器端还要多. ...

  8. 汉王云名片识别(SM)组件开发详解

    大家好,最近在DeviceOne平台上做了一个汉王云名片识别的功能组件.下面把我开发过程给大家做一个分享,希望可以帮助到大家. 下面我把我的思路给大家讲解一下. 1.找到我要集成的sdk,也就是汉王云 ...

  9. Vite + React 组件开发实践

    简介: 毫不夸张的说,Vite 给前端带来的绝对是一次革命性的变化.或者也可以说是 Vite 背后整合的 esbuild . Browser es modules.HMR.Pre-Bundling 等 ...

  10. 3个概念,入门 Vue 组件开发

    "组件"是 Vue 中比较基础的概念,但我发现,许多同学对 Vue 组件的概念和由来并不是清楚.因此,我希望通过这个专题,带大家换个角度来分析,最终让大家更清楚组件开发. 首先,我 ...

最新文章

  1. mysql数据库优化(二)
  2. C#设计模式系列:享元模式(Flyweight)
  3. php选框判断,网络编程如何判断php复选框是否被选中
  4. VTK:图片之ImageMathematics
  5. 面试官灵魂拷问:为什么 SQL 语句不要过多的 join?
  6. Knapsack Cryptosystem(2019牛客多校折半查询)
  7. react项目在ie空白解决
  8. phpstorm设置 打开文件所在目录_PDF文件在线分享并设置打开次数
  9. Java – HashMap详细说明
  10. 人工智能+智能运维解决方案_人工智能驱动的解决方案可以提升您的项目管理水平
  11. WPF-将DataGrid控件中的数据导出到Excel
  12. opencv studay3
  13. 【人工智能】图灵测试
  14. 生活里不能只有苦涩,不堪,适当露出一条缝隙,让光透进来
  15. android多屏幕多分辨率的一些概念
  16. Linux脚本方式修改Mac地址,两种修改Linux系统中MAC地址的方法
  17. Broadcast Receiver @
  18. 用本机VM虚拟机作为网站的服务器
  19. ThinkPHP导出百万条数据量
  20. LoRa模块网络组成和架构原理是怎样的?

热门文章

  1. dbvisualizer连接达梦_Dbvisualizer怎么使用,Dbvisualizer使用教程解析
  2. 启动报错:Error creating bean with name ‘XXX’ defined in...
  3. 容器中Bean的生命周期
  4. Docker系列(二)Docker安装与启动
  5. 手把手教你强化学习 (一) 什么是强化学习?与机器学习有什么区别?
  6. git学习中遇到的疑难杂症
  7. [转]Fedora用root登录
  8. linux man指令问题
  9. host-only局域网络
  10. ERROR 1045 (28000): Access denied for user 'admin'@'localhost' (using password: YES)