Deskor文档:从零开始写一个deskor模块

11月 11, 2006 on 7:56 pm | In 未分类 |

在开始之前,我还是会很、灰常、系分、超级、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的内容:
一般情况下它都是这样的:

  1. <?php
  2. include "mod_info.php";
  3. include("../../index.php");
  4. ?>

这个非常清楚,是必须的。您不需要改动一个字儿。
再看看D:/webroot/deskor/modules/myphotos/mod_info.php:

  1. <?php
  2. $mod_info["name"]="像册模块";
  3. $mod_info["description"]="是由小傻帽写的一个像册程序。";
  4. $mod_info["dirname"]="myphotos";
  5. $mod_info["path_addons"]="modules/".$mod_info["dirname"]."/";
  6. ?>

这个大家也都能看懂,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/目录下应有这样一个文件。最开始这个文件可以非常简单,只包括这样几行:

  1. <?php
  2.  
  3. if(file_exists($config["ABSPATH"].$mod_info["path_addons"]."app/views/$control/$act.php"))
  4.     require_once($config["ABSPATH"].$mod_info["path_addons"]."app/views/$control/$act.php");
  5. ?>

这个文件是整个显示层的布局文件,您可以在这段代码的前面加上头,在后面加上尾。

在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是这样的写的:

  1. <?php
  2. class controllerPhotos extends controller{
  3.     function listall()
  4.     {
  5.         global $data;
  6.         $photosObj=new modelPhotos();
  7.         $data["photos"]=$photosObj->findRows();
  8.     }
  9. }
  10. ?>

那么这个modelPhotos类是在哪里定义的呢?
我们打开D:/webroot/deskor/modules/myphotos/app/models/photos.php,内容应是这样的:

  1. <?php
  2. class modelphotos extends model {
  3.      /**
  4.      * 主键列名
  5.      *
  6.      * @var string
  7.      */
  8.     var $primaryKey="id";
  9.     /**
  10.      * 表格名称
  11.      *
  12.      * @var string
  13.      */
  14.     var $tableName="myphotos_byxurenlu";
  15.     /**
  16.      * 一个描述表格结构的数组。
  17.      *
  18.      * @var Array
  19.      */
  20.     var $tableMap=array(
  21.         "tableName"=>"myphotos_byxurenlu",
  22.         "primaryKey"=>"id",
  23.         "columns"=>array(
  24.             array("name"=>"id","type"=>TYPE_KEYID,"KEY"=>true),
  25.             array("name"=>"username","type"=>TYPE_STRING),
  26.             array("name"=>"uid","type"=>TYPE_INT),
  27.             array("name"=>"uploadDate","type"=>TYPE_DATE),
  28.             array("name"=>"uploadTime","type"=>TYPE_TIME),
  29.             array("name"=>"text","type"=>TYPE_TEXT),
  30.             array("name"=>"title","type"=>TYPE_STRING),
  31.             array("name"=>"path","type"=>TYPE_STRING),
  32.             array("name"=>"lastmodify","type"=>TYPE_TIMESTAMP)
  33.         )
  34.     );
  35. }
  36. ?>

这里大家会发现其实就是定义了一个数据表。其实这个model基类已经封装了很多方法。我们的findRows()方法,会自动地从这个表中取出最前一页的内容。当然这个一页是多少,是可以改的。
最后问题是,我们在control类里面查出了一个页的数据记录,那我们怎么显示呢?
so easy,我们看看D:/webroot/deskor/modules/myphotos/app/views/photos/listall.php,在里面写上这样一段文字:

  1. <?php
  2.             foreach ($data["photos"]["rows"] as $row)
  3.             {
  4.                
  5.                 echo '<a href="uploads/'.$row["uid"]."/".$row["path"].'"  title="'.$row["title"].'">';
  6.                 echo ('<img src=uploads/'.$row["uid"].'/small.'.$row["path"].' style="border:3px solid white;" />');
  7.                 echo "</a>&nbsp;";
  8.             }
  9.             echo "<div align='right' style='font-size:12px;margin-right:100px;'>";
  10.             echo $data["photos"]["pagestr"];
  11.             echo "</div>";
  12. ?>

这就将第一页的照片都显示出来了。在这里,我们建议,如果您不记得$data的结构了,您可以用来查看数据的结构。hoho,是不是很酷啊。怎么样,来试试??
然后济览http://***.com/deskor/modules/myphotos/?mod=photos&act=listall一下,是不是效果没出来?
这很简单,因为这个表里还没有内容嘛。打开phpmyadmin,在myphotos_byxuren中加上几行,是不是再看http://***.com/deskor/modules/myphotos/?mod=photos&act=listall, 是不是就看到了个大概?
您会注意到,下面带有分页分类,是的,没错,我们把分页也帮您做好了。开始享受他吧。

No Comments yet »

评论 RSS Feed。 TrackBack URI

发表评论

XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Powered by WordPress with Pool theme design by Borja Fernandez.
Entries and comments feeds. Valid XHTML and CSS. ^Top^