在开始之前,我还是会很、灰常、系分、超级、very变态、垃圾、恶心地广告一句:Deskor是一个优秀的开源框架!
deskor的开发者,也就是那个超级变态无耻的一米六二,希望所有开发者都愿意并且能够有机会来帮deskor来进行开发,所以,他给deskor设计一个modules的概念,就是程序根目录下的那个modules目录。任何人都可以在这个目录下建立一个目录并且开始他的deskor Modules开发。
那让我们现在就来开始写一个模块儿吧。让我的名字留在deskor的开发者名单上。让我们满足一米六二那点可怜的理想。
我们假想,你的Web服务器的根目录是D:/webroot/.您的deskor的文件放在D:/webroot/deskor/下面。
首先我们要在D:/webroot/deskor/modules下建立一下目录,这里我们建立一个叫myphotos的目录。这个目录的结构是这样的:
D:/webroot/deskor/modules/myphotos
/app
/css
/script
/images
/include
/filters
/events
index.php
mod_info.php
然后我们看看D:/webroot/deskor/modules/myphotos/index.php的内容:
一般情况下它都是这样的:
include "mod_info.php";
include("../../index.php");
?>
这个非常清楚,是必须的。您不需要改动一个字儿。
再看看D:/webroot/deskor/modules/myphotos/mod_info.php:
$mod_info["name"]="像册模块";
$mod_info["description"]="是由小傻帽写的一个像册程序。";
$mod_info["dirname"]="myphotos";
$mod_info["path_addons"]="modules/".$mod_info["dirname"]."/";
?>
这个大家也都能看懂,myphotos是我们建立的放模块的目录的名称。$mod_info["name"],$mod_info["description"]这些都不重要啦,只是您向其他人介绍这个模块的功能的。当然,您可以把它写得天花乱坠,妙笔生花。您在这里把死人吹成活人都可以。
这个文件中,其实只有$mod_info["dirname"]是对我们的程序的运行有影响的.这个您可一定要设置好.当然这个变量会影响$mod_info["path_addons"].
然后我们要开始我们的编程之旅了。激动了吧。别激动,精彩在后面呢。
首先我要让您知道,我们的url地址将会是这样的:
http://***.com/deskor/modules/myphotos/?mod=****&act=*****
其中mod表示controller名字。act表示action的名字。
假设访问地址是这样的:
http://***.com/deskor/modules/myphotos/?mod=photos&act=listall
那就代表应该有这样几个文件:
在D:/webroot/deskor/modules/myphotos/app/layouts/目录下应有这样一个文件。最开始这个文件可以非常简单,只包括这样几行:
if(file_exists($config["ABSPATH"].$mod_info["path_addons"]."app/views/$control/$act.php"))
require_once($config["ABSPATH"].$mod_info["path_addons"]."app/views/$control/$act.php");
?>
这个文件是整个显示层的布局文件,您可以在这段代码的前面加上头,在后面加上尾。
在D:/webroot/deskor/modules/myphotos/app/controls/目录下应有一个photos.php文件。
在D:/webroot/deskor/modules/myphotos/app/models/目录下,应有一个photos.php.在一般情况下,这个文件定义要用到的数据表的结构。
在D:/webroot/deskor/modules/myphotos/app/views/目录下应该有一个photos目录,这个目录下有一个listall.php文件。
我的D:/webroot/deskor/modules/myphotos/app/controls/photos.php是这样的写的:
class controllerPhotos extends controller{
function listall()
{
global $data;
$photosObj=new modelPhotos();
$data["photos"]=$photosObj->findRows();
}
}
?>
那么这个modelPhotos类是在哪里定义的呢?
我们打开D:/webroot/deskor/modules/myphotos/app/models/photos.php,内容应是这样的:
class modelphotos extends model {
/**
* 主键列名
*
* @var string
*/
var $primaryKey="id";
/**
* 表格名称
*
* @var string
*/
var $tableName="myphotos_byxurenlu";
/**
* 一个描述表格结构的数组。
*
* @var Array
*/
var $tableMap=array(
"tableName"=>“myphotos_byxurenlu”,
“primaryKey”=>”id”,
“columns”=>array(
array(”name”=>”id”,”type”=>TYPE_KEYID,”KEY”=>true),
array(”name”=>”username”,”type”=>TYPE_STRING),
array(”name”=>”uid”,”type”=>TYPE_INT),
array(”name”=>”uploadDate”,”type”=>TYPE_DATE),
array(”name”=>”uploadTime”,”type”=>TYPE_TIME),
array(”name”=>”text”,”type”=>TYPE_TEXT),
array(”name”=>”title”,”type”=>TYPE_STRING),
array(”name”=>”path”,”type”=>TYPE_STRING),
array(”name”=>”lastmodify”,”type”=>TYPE_TIMESTAMP)
)
);
}
?>
这里大家会发现其实就是定义了一个数据表。其实这个model基类已经封装了很多方法。我们的findRows()方法,会自动地从这个表中取出最前一页的内容。当然这个一页是多少,是可以改的。
最后问题是,我们在control类里面查出了一个页的数据记录,那我们怎么显示呢?
so easy,我们看看D:/webroot/deskor/modules/myphotos/app/views/photos/listall.php,在里面写上这样一段文字:
foreach ($data["photos"]["rows"] as $row)
{
echo '‘;
echo (’
‘);
echo “ ”;
}
echo “
“;
echo $data["photos"]["pagestr"];
echo “
“;
?>
这就将第一页的照片都显示出来了。在这里,我们建议,如果您不记得$data的结构了,您可以用来查看数据的结构。hoho,是不是很酷啊。怎么样,来试试??
然后济览http://***.com/deskor/modules/myphotos/?mod=photos&act=listall一下,是不是效果没出来?
这很简单,因为这个表里还没有内容嘛。打开phpmyadmin,在myphotos_byxuren中加上几行,是不是再看http://***.com/deskor/modules/myphotos/?mod=photos&act=listall, 是不是就看到了个大概?
您会注意到,下面带有分页分类,是的,没错,我们把分页也帮您做好了。开始享受他吧。