drupal anywhere 10: db_query_range,db_fetch_object,文章列表

April 29th, 2010 by 黎 浩江 Leave a reply »

在此前介绍过node_load,node_save,这次我希望用极短的介绍让大家了解drupal在列出文章的功能这方面的强大与方便.

还是那句,看这节的时候,你不需要很懂drupal,只需要把drupal看成工具或者是一个PHP类就行了,我来告诉你接口,你甚至可以是略懂PHP而刚好第一次安装成功drupal的人就能读懂此文.

特别回顾chdir一节 ,drupal anywhere 7时介绍过chdir , 还有前提提过的print_r函数

===================================================

//下面一大段是废话,如果你已经认为这两个API重要了,跳过

1.如果你用过views请看这段:你如果已经了解过drupal,你会觉得这是views的工作啊,我学views好了!这样想大错特错,记住,drupal的UI是垃圾,drupal的核心功能才是黄金,不要舍本求末了;不是说views不好,学习这两个API,你才能更深入了解views,为以后你为views提速做准备(用过views都知道views慢,但其实views可以极大的提速,关键在此两API和一个HOOK)

2.如果你没用过views:别急着安装,也许你按图文说明操作半天也不一定会用views模块,但明白这两个API后,你用views就变成半个专家了.所以我先介绍它们,后面再说views

3.忽略drupal,要做文章列表,你会想到用SQL吧,直接用PHP查询SQL就能得到文章列表了,这样用drupal有何特别的地方呢

4.drupal在这便利的地方就是用db_fetch_object来将得到的数据变为结构化,就是说你用print_r()输出的结构很容易读明

5.你不用担心SQL的问题,我也不太懂SQL的,但基本的select我看得明(用phpmyadmin能生成SQL的)

=========================================================

1.示例:我们要得到按时间倒序的node 的ID2.如果你没有一大堆node来进行此文说的测试,那你可以安装一个强大易用的模块帮你生成一堆测试的文章数据:http://drupal.org/project/devel,这个模块只装有”generate”字样的那个就好了,然后http://youdrupalsite.com/admin/generate/content进这里批量生成数据先吧.这个模块以后也有大用,但不需要现在了解,

3.我这里直接给出SQL,看得明就好,如果你没接触过SQL,那就COPY吧,后面的drupal anywhere我会介绍怎么方便生成drupal的SQL的(views),不用急着把自己吃成胖子啊.慢慢来

$nodesql=”  SELECT node.nid AS nid,   node.changed AS node_changed FROM drup_node node     ORDER BY node_changed DESC  ”;

4.开始drupal代码,新建文件dbquery.php,

//省略了drupal anywhere 7时介绍过chdir上提到的drupal固定的开场语句

$nodesql=”  SELECT node.nid AS nid,   node.changed AS node_changed FROM drup_node node     ORDER BY node_changed DESC  ”;

$noderesult=db_query_range($nodesql,10,100);//查询符合上述SQL的100条数据,从第10条开始,数字你随便改吧

while($rows = db_fetch_object($noderesult)){

print_r($rows);

}

$noderesult=NULL;//习惯及时清空不用的对象

//php结束

看看上面输出什么结果吧,

自己试试改改SQL,试着输出全部用户,成功的话,这个API就有小成了

看文不思考不动手,是学习不好的

下次的 drupal anywhere将结合views去再一次深入介绍这个API的强大与简易

后记:今天逛drupalchina,看到一篇http://drupalchina.org/node/4311,写得比较技术性的文章,初学的可以不求甚解地参考一下(看不明就过了吧),意在说明这两个API的强大而已

Share
Advertisement

8 comments

  1. 这个系列的drupal文章对我很有帮助。

    在drupal社区,能简明扼要从你的角度写的文章之前也很少看见。

    谢谢!

  2. weilin_chen says:

    您好,是直接新建文件dbquery.php,然后复制你提供的代码吗?我在自己的机子上测试了一下,空白页面,是不是需要添加数据库的链接语句才可以查询,还有导入require_once ‘./includes/bootstrap.inc’;
    drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
    这个不是很明白你这节所说的内容,O(∩_∩)O~

    • 黎 浩江 says:

      sorry ,可能我写得不够清楚:第四点:
      4.开始drupal代码,新建文件dbquery.php,

      //省略了drupal anywhere 7时介绍过chdir上提到的drupal固定的开场语句

      你得到空白的页面,可能是因为这个原因

  3. says:

    省略的是这个吗?
    <?php
    require_once './includes/bootstrap.inc';
    drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

    我用了,但输出的依旧是空白,不理解SQL语句。

    谢谢你,你的方法给我很大的启示。

  4. sstars says:

    这系列文章很清晰,持续学习中。有点疑问“$nodesql=” SELECT node.nid AS nid, node.changed AS node_changed FROM drup_node node ORDER BY node_changed DESC ”;

    ”这个sql语句表名这里笔误了吧。

    另外更新一下drupal7的用法,用foreach ($noderesult as $result) {
    print_r($result);
    }代替db_fetch_object,参考文章http://drupal.org/update/modules/6/7#dbtng

Leave a Reply