Joomla!教程——开发一个MVC组件(三)—— 数据库的使用

2009年3月21日

翻译自http://docs.joomla.org/Developing_a_Model-View-Controller_Component_-_Part_3_-_Using_the_Database

转载请注明出处:http://fidy.phpbomb.com

前言

在前两章教程中,我们讲述了如何创建一个简单的MVC组件。我们用一个View来从Model中取出数据并显示,现在我们要继续扩展这个Model,让他从数据库中读取数据,而不是把数据硬编码到Model中。

本章教程就来介绍如何使用JDatabase类来读取数据库。

访问数据库

目前我们的Model只有一个方法: getGreeting(),这个方法很简单,就是返回一个字符串。

现在我们稍稍改动一下,让这个方法去访问数据库,从数据库中取出我们所要的字符串。我们还要创建一个SQL脚本,并将它放到XML配置文件中,以便在组件被安装的同时在数据库中创建数据表和插入示例数据。不过首先还是来改造一下getGreeting()方法:

第一步是获取数据库对象,Joomla!的很多常规操作都要用到数据库,访问数据库的链接也是现成的,我们可以通过下面的方法来获取它:

  1. $db =& JFactory::getDBO();

JFactory 是一个静态类,用来获取各种系统对象的引用。你可以在Joomla!的API文档中获取关于这个类的详细信息。

上边的方法名 (getDBO) 很容易理解,获取DataBase对象。

现在我们已经获取到了数据库访问对象,之后我们可以通过以下两步来从数据库中取出数据了:

  • 把查询语句放到数据库对象中
  • 访问结果集
  1. function getGreeting()
  2. {
  3. $db =& JFactory::getDBO();
  4.  
  5. $query = 'SELECT greeting FROM #__hello';
  6. $db->setQuery( $query );
  7. $greeting = $db->loadResult();
  8.  
  9. return $greeting;
  10. }

hello是数据表的名字(我们马上就会创建这个数据表),greeting是字段名。要是你对SQL不是很熟悉,那么最好花点时间来学习一下,w3schools上就有教程。

$db->loadResult() 方法将执行存储在数据库对象里面的查询语句,并将结果集的第一行第一列返回, JDatabase中还有其他的查询方法可用,读者可以自己查看一下JDatabase的API手册。

阅读全文…

周 超 Joomla, PHP, 翻译

Joomla!教程——开发一个MVC组件(二)—— Modle

2009年3月20日

翻译自http://docs.joomla.org/Developing_a_Model-View-Controller_Component_-_Part_2_-_Adding_a_Model

转载请注明出处:http://fidy.phpbomb.com

前言

在上一章教程中,我们介绍了如何在Joomla! 1.5中创建一个简单的view-controller组件。我们把问候语硬编码到了view中,这并不符合MVC的规范,因为View应该只负责显示数据,而不是保存数据。
本章就将掩演示如何把View中的数据转移到Model中,接下来,你会看到MVC这种模式有多么的强大和灵活。

创建Model

Model这个概念就像它的名字一样,这种类是用来对事物进行描述(或者说“建模”)的,在我们这个例子中,我们的model就是用来描述“hello”,或者说一个问候的。这和我们目前的设计相一致,因为我们已经有了一个hello view。

Joomla! 中的Model命名约定是这样的,类名以组件名开头,然后是“Model”这个词,再跟一个model本身的名字。因此我们这个示例Model的名字就应该是HelloModelHello。

目前我们的hello model只需要一个行为,就是取出问候语,因此我们只需要创建一个方法,叫做getGreeting(),它的作用就是返回“Hello, World!”字符串。

我们的Model类:

  1. <?php
  2. /**
  3. * Hello Model for Hello World Component
  4. *
  5. * @package    Joomla.Tutorials
  6. * @subpackage Components
  7. * @link http://docs.joomla.org/Developing_a_Model-View-Controller_Component_-_Part_2
  8. * @license    GNU/GPL
  9. */
  10.  
  11. // No direct access
  12.  
  13. defined( '_JEXEC' ) or die( 'Restricted access' );
  14.  
  15. jimport( 'joomla.application.component.model' );
  16.  
  17. /**
  18. * Hello Model
  19. *
  20. * @package    Joomla.Tutorials
  21. * @subpackage Components
  22. */
  23. class HelloModelHello extends JModel
  24. {
  25. /**
  26. * Gets the greeting
  27. * @return string The greeting to be displayed to the user
  28. */
  29. function getGreeting()
  30. {
  31. return 'Hello, World!';
  32. }
  33. }

你可能已经注意到了我们的Model中有一行是以jimport开头的,jimport函数的作用是从Joomla!框架中加载一个文件,而这条语句加载的就是 /libraries/joomla/application/component/model.php这个文件。符号“.”被用作文件夹分割符, 而最后一个“.”后面的部分就是我们要加载的文件名。所有通过这种方式加载的文件都是相对于libraries文件夹而言的。我们在这里加载的文件包含了JModel类的定义,之后我们自己的model类要继承JModel。

我们的model已经创建好了,现在要修改一下我们的view类,来从model中取出问候语。

阅读全文…

周 超 Joomla, PHP, 翻译

Joomla!教程——开发一个MVC组件(一)

2009年3月19日

翻译自http://docs.joomla.org/Developing_a_Model-View-Controller_Component_-_Part_1

转载请注明出处:http://fidy.phpbomb.com

介绍

软件框架是一个程序员开发程序的基础。Joomla!1.5所使用的框架为开发程序提供了强大的动力。现在Joomla的代码已经被彻底的翻修和精简了。本教程将带领你通过使用框架来创建一个Joomla!组件。

这个示例组件是一个简单的Hello World组件,在接下来的教程中,我们会通过这个简单的框架来展示MVC设计模式在Joomla!中发挥的重要作用。

需求

本教程需要Joomla!的版本在1.5以上。

MVC简介

略。基础概念,实在没什么好翻译的,实在不懂就Google一下吧。

Joomla!的MVC实现

在Joomla中,MVC模式的实现是通过这三个类来完成的:JModelJViewJController。关于这三个类的详细信息,请参阅Joomla!的官方参考手册(WIP)。

创建一个组件

对于我们的这个基础组件来说,只需要创建5个文件就够了:

  • hello.php - 这是进入组件的入口
  • controller.php - 我们组件的基本控制器
  • views/hello/view.html.php - 用来(从Model中)获取必要的数据并放置到模板里面
  • views/hello/tmpl/default.php - 模板文件
  • hello.xml - 告诉Joomla!如何安装我们的组件

切记,组件的入口文件名(就是上面的那个hello.php)必须和组件的名字一致。比如,如果你的组件名字叫“Very Intricate Name Component”,那么在安装组件的时候,Joomla!就会创建一个文件夹叫做“com_veryintricatenamecomponent”来放置你的组件,你的入口文件名也必须叫做veryintricatenamecomponent.php,否则就不好使。另外需要留意的就是一些特殊字符的使用,比如下划线“_”,在Joomla!中有特别的意义,所以要尽量避免在组件或文件的名字中使用他们。

阅读全文…

周 超 Joomla, PHP, 翻译

搞定了Zend Studio的远程调试

2009年3月18日

平时调试都是手动的var_dump,但是碰到Joomla或者ZF这种层次关系复杂的家伙就比较闹心了,唯有使用调试器才能让所有变量一目了然:

  1. 调试器的安装,参见http://www.yanbin.org/blog/enable-remote-debuging-under-php_52.html
  2. IDE的配置,参见http://docs.joomla.org/Setting_up_your_workstation_for_Joomla!_development

另外需要使用firefox的Zend debug扩展,有了这几样武器,调试任何程序就都不成问题了。

突然想用Joomla!做一个Blog聚合网站,给phpAllStar的成员使用,明天找Jacky同学和Lisa同学商量一下 :)

周 超 PHP

通过ssh将远程目录mount到本地

2009年3月13日

1. sudo apt-get install sshfs

2. 新建文件夹用于挂载远程目录:mkdir ~/home-server

3. sshfs yourname@remote-host:/path/to/your/dir ~/home-server

4. 卸载时使用 umount ~/home-server

周 超 系统

安装中文man

2009年3月13日

1. sudo apt-get install manpages-zh
2. 编辑 ~/.bashrc文件,在其中加入别名cman,以区别于英文man:

  1.  
  2. alias cman='man -M /usr/share/man/zh_CN/'

3. source ~/.bashrc
目前中文man的条目并不完整,很多命令的帮助都没有。

周 超 系统

给vim安装中文帮助

2009年3月12日

适用于*inux和cygwin:
1. 下载帮助文件到自己的home目录下
http://prdownloads.sourceforge.net/vimcdoc/vimcdoc-1.7.0.tar.gz?download

2. 解压缩后,执行其中的vimcdoc.sh
./vimcdoc.vim -i
现在可以打开vim看看有没有变成中文了,如果没有,再设置一下.vimrc文件,在里面加入 set helplang=cn

周 超 VIM学习笔记, 系统

《Learning bash Shell》第三章学习笔记

2009年3月11日
  1. 查看环境变量的命令:env或者export -p
  2. .bash_profile文件在每次登陆shell的时候被调用
  3. .bashrc文件在每次启动子shell的时候被调用
  4. 通常在.bash_profile中会加入”source .bashrc”来初始化环境
  5. 查看或修改shell选项:set -o 或者 shopt
  6. 内置变量:一组特殊的shell变量,用于控制shell的某些特殊行为
  7. 环境变量对所有的shell可见;shell变量(当然包括内置的shell变量)只对当前shell会话有效

一个关于.bash_profile、.bashrc,环境变量、内置变量的区别举例:

在.bash_profile中加入一行:

HISTTIMEFORMAT=”%Y-%m-%d %H:%M:%S  ”

保存后执行. .bash_profile,然后运行history命令,结果为:

……….

 

 570  2009-03-11 20:36:17  env|grep fuck

  571  2009-03-11 20:36:29  . .bash_profile

  572  2009-03-11 20:36:32  env|grep fuck

  573  2009-03-11 20:36:36  env

  574  2009-03-11 20:36:55  env|grep CVS

  575  2009-03-11 20:42:30  vim .bash_profile

  576  2009-03-11 20:43:49  history

可见shell的内置变量HISTTIMEFORMAT在当前会话下已经生效了;下面看看在子shell中的情况:
$ bash
$ history
……
 484  exit
  485  go.home
  486  exit
  487  exit
  488  history
  489  echo $CVSROOT
  490  vim .bashrc
  491  exit
  492  echo $SHELL
  493  csh
  494  chsh
可见内置变量不可在会话间传递,接着看看环境变量的表现:
$ exit
$ export HISTTIMEFORMAT
$ bash
$ history
……
490  2009-03-11 20:50:02  echo $SHELL
  491  2009-03-11 20:50:02  csh
  492  2009-03-11 20:50:02  chsh
  493  2009-03-11 20:50:02  chshell
  494  2009-03-11 20:50:02  chsh
  495  2009-03-11 20:50:02  csh
  496  2009-03-11 20:50:02  exit
  497  2009-03-11 20:50:02  history
  498  2009-03-11 20:50:02  exit
  499  2009-03-11 20:50:04  history
现在可见了 :)

 

 

周 超 Bash学习笔记, 系统

突然间就要开始java版的开发了

2009年3月10日

spring + restlet + hibernate
要学的东西真多

周 超 Java, 工作

在Ubuntu上安装AT&T客户端

2009年3月8日

AT&T只发布了rpm版的VPN client,用Ubuntu的朋友需要自己将rpm转成deb包,转换方法参见这里

连接上的AT&T

连接上的AT&T

附上转化好之后的deb包:点击下载

周 超 工作, 系统