翻译自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!的很多常规操作都要用到数据库,访问数据库的链接也是现成的,我们可以通过下面的方法来获取它:
-
$db =& JFactory::getDBO();
JFactory 是一个静态类,用来获取各种系统对象的引用。你可以在Joomla!的API文档中获取关于这个类的详细信息。
上边的方法名 (getDBO) 很容易理解,获取DataBase对象。
现在我们已经获取到了数据库访问对象,之后我们可以通过以下两步来从数据库中取出数据了:
-
function getGreeting()
-
{
-
$db =& JFactory::getDBO();
-
-
$query = 'SELECT greeting FROM #__hello';
-
$db->setQuery( $query );
-
$greeting = $db->loadResult();
-
-
return $greeting;
-
}
hello是数据表的名字(我们马上就会创建这个数据表),greeting是字段名。要是你对SQL不是很熟悉,那么最好花点时间来学习一下,w3schools上就有教程。
$db->loadResult() 方法将执行存储在数据库对象里面的查询语句,并将结果集的第一行第一列返回, JDatabase中还有其他的查询方法可用,读者可以自己查看一下JDatabase的API手册。
阅读全文…
周 超 Joomla, PHP, 翻译
翻译自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类:
-
<?php
-
/**
-
* Hello Model for Hello World Component
-
*
-
* @package Joomla.Tutorials
-
* @subpackage Components
-
* @link http://docs.joomla.org/Developing_a_Model-View-Controller_Component_-_Part_2
-
* @license GNU/GPL
-
*/
-
-
// No direct access
-
-
defined( '_JEXEC' ) or die( 'Restricted access' );
-
-
jimport( 'joomla.application.component.model' );
-
-
/**
-
* Hello Model
-
*
-
* @package Joomla.Tutorials
-
* @subpackage Components
-
*/
-
class HelloModelHello extends JModel
-
{
-
/**
-
* Gets the greeting
-
* @return string The greeting to be displayed to the user
-
*/
-
function getGreeting()
-
{
-
return 'Hello, World!';
-
}
-
}
你可能已经注意到了我们的Model中有一行是以jimport开头的,jimport函数的作用是从Joomla!框架中加载一个文件,而这条语句加载的就是 /libraries/joomla/application/component/model.php这个文件。符号“.”被用作文件夹分割符, 而最后一个“.”后面的部分就是我们要加载的文件名。所有通过这种方式加载的文件都是相对于libraries文件夹而言的。我们在这里加载的文件包含了JModel类的定义,之后我们自己的model类要继承JModel。
我们的model已经创建好了,现在要修改一下我们的view类,来从model中取出问候语。
阅读全文…
周 超 Joomla, PHP, 翻译
翻译自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模式的实现是通过这三个类来完成的:JModel,JView,JController。关于这三个类的详细信息,请参阅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, 翻译
平时调试都是手动的var_dump,但是碰到Joomla或者ZF这种层次关系复杂的家伙就比较闹心了,唯有使用调试器才能让所有变量一目了然:
- 调试器的安装,参见http://www.yanbin.org/blog/enable-remote-debuging-under-php_52.html
- IDE的配置,参见http://docs.joomla.org/Setting_up_your_workstation_for_Joomla!_development
另外需要使用firefox的Zend debug扩展,有了这几样武器,调试任何程序就都不成问题了。
突然想用Joomla!做一个Blog聚合网站,给phpAllStar的成员使用,明天找Jacky同学和Lisa同学商量一下
周 超 PHP
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
周 超 系统
1. sudo apt-get install manpages-zh
2. 编辑 ~/.bashrc文件,在其中加入别名cman,以区别于英文man:
-
-
alias cman='man -M /usr/share/man/zh_CN/'
3. source ~/.bashrc
目前中文man的条目并不完整,很多命令的帮助都没有。
周 超 系统
适用于*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学习笔记, 系统
- 查看环境变量的命令:env或者export -p
- .bash_profile文件在每次登陆shell的时候被调用
- .bashrc文件在每次启动子shell的时候被调用
- 通常在.bash_profile中会加入”source .bashrc”来初始化环境
- 查看或修改shell选项:set -o 或者 shopt
- 内置变量:一组特殊的shell变量,用于控制shell的某些特殊行为
- 环境变量对所有的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学习笔记, 系统
spring + restlet + hibernate
要学的东西真多
周 超 Java, 工作
AT&T只发布了rpm版的VPN client,用Ubuntu的朋友需要自己将rpm转成deb包,转换方法参见这里。

连接上的AT&T
附上转化好之后的deb包:点击下载
周 超 工作, 系统