标签归档:Drupal

自定义函数显示 Drupal 分类列表

Drupal中的CCK和View模块功能强大,几乎可以用鼠标点出你想要的任何内容。

但耗费的性能和效率问题也与它的功能一样强大。 :mrgreen:

其实CCK和View能实现的我们手动一样可以实现,而且异常简单。

以国内网站最常见的显示某一分类最新文章列表为例:

在模板文件 template.php 中增加一个自定义函数如下:

function phptemplate_show_taxonomy($tid){
//根据tid读取术语名称
$sql ="SELECT name FROM {term_data} WHERE tid = %d";
$result = db_query(db_rewrite_sql($sql),$tid);
while($data = db_fetch_object($result)){
$term_name = $data->name;
}
$output = "

";
$output .= "

".$term_name."

    ";
$sql = "SELECT n.nid, n.title, n.created
FROM {term_node} tn
LEFT JOIN {node} n on n.nid = tn.nid
WHERE tn.tid = %d
ORDER BY n.created DESC";
$result = db_query_range(db_rewrite_sql($sql),$tid,0,8);
while($data = db_fetch_object($result)){
$output .="

  • ".l($data->title,"node/$data->nid")."
  • ";

    }
    $output .= "

    ";

    return $output;
    }
    在模板适当位置写入:
    <?php print phptemplate_show_taxonomy(12) ?>

    function phptemplate_show_taxonomy($tid){

    //根据tid读取术语名称

    $sql ="SELECT name FROM {term_data} WHERE tid = %d";

    $result = db_query(db_rewrite_sql($sql),$tid);

    while($data = db_fetch_object($result)){

    $term_name = $data->name;

    }

    $output = "

    ";

    $output .= "

    ".$term_name."

      ";

      $sql = "SELECT n.nid, n.title, n.created

      FROM {term_node} tn

      LEFT JOIN {node} n on n.nid = tn.nid

      WHERE tn.tid = %d

      ORDER BY n.created DESC";

      $result = db_query_range(db_rewrite_sql($sql),$tid,0,8);

      while($data = db_fetch_object($result)){

      $output .="

    • ".l($data->title,"node/$data->nid")."
    • ";

      }

      $output .= "

    ";

    return $output;

    }

    在模板适当位置写入:

    <?php print phptemplate_show_taxonomy(12) ?>

    PS:1年前做Drupal项目时写得备忘,今天被不小心翻出来了…
    WordPress贴代码真麻烦,不过懒得修改了,过几天把自己的Blog软件完善下发布出来…

    Drupal中判断当前页面为分类页的方法

    在Drupal中,分类系统路径都是类似这种格式:

    taxonomy/term/10

    taxonomy/term/17

    那么,根据Drupal API,判断当前页面为分类页面,可以这样写:

    if ( arg(0) == ‘taxonomy’ && arg(1) == ‘term’ ) {

    echo ‘这是分类’;

    } else {

    echo ‘这不是分类’;

    }

    if(arg(0) == ‘taxonomy’ && arg(1) == ‘term’){
    //就肯定是分类列表了。
    }

    :mrgreen:

    Drupal 主题 模板 机制

    Drupal的模板机制相当灵活,在这里,我将简单的叙述一下PHPTemplate的模板机制。

    page.tpl.php是最根本的模板文件,它为主题提供了整体的外观,其它的模版文件是按照区块的形式插入到page.tpl.php中的,如图所示:
    drupalthemes

    一般来说,page.tpl.php中的$content包含了对node.tpl.php输出的调用,而$sidebar_left包含了对block.tpl.php输出的调用。

    如果你想为不同的页面创建不同的风格,可以基于URL来创建额外的页面模板文件。
    例如,当你访问http://Drupal.com/?q=user/1,PHPTemplate将以下面的顺序来查找页面模板:
    page-user-1.tpl.php
    page-user.tpl.php
    page.tpl.php
    同样的,当你访问http://Drupal.com/?q=node/1/edit,PHPTemplate将以下面的顺序来查找页面模板:
    page-node-edit.tpl.php
    page-node-1.tpl.php
    page-node.tpl.php
    page.tpl.php

    PHPTemplate一旦找到一个要包含的模板文件将会停止继续寻找。
    注意:
    page-user.tpl.php可定义所有的用户页面模板。
    node-nodetype.tpl.php可以定义任意类型的页面模板,例如node-blog.tpl.php可以定义所有blog节点的模板风格。
    page-front.tpl.php可以定义首页面的显示模板。

    如果您想查看Drupal的模板变量,请查看:
    http://mimiz.cn/index.php/drupal/drupal-template-variable-page/
    http://mimiz.cn/index.php/drupal/drupal-template-variable-node/

    Drupal模板变量 – node.tpl.php

    node.tpl.php中可用的变量:

    $content: 返回节点的主体部分。

    $date: 返回节点被创建的格式化日期。

    $taxonomy: 返回由节点的分类词语构成的数组。

    $terms: 返回与该节点相关的分类单词的HTML。

    $title: 返回节点的标题。

    $submitted: 返回”Submitted by”文本。

    $links: 返回与节点相关的链接,比如”read more”或者”add comment”。

    $name: 返回创建该页面的用户名。

    $node: 返回整个节点对象和它的所有属性。

    $node_url: 返回该节点的URL。

    $page: 当为body视图方式时其值为真,当为teaser视图方式时其值为假。

    $picture: 如果启用了图像并且设置了用户图像则返回用户图像的HTML。

    $teaser: 返回一个布尔值,用来决定是否展示teaser。当它为假时,节点以body方式展示;为真时,以teaser方式展示。

    Drupal模板变量 – page.tpl.php

    最近在用Drupal做站并活跃于Drupal.org和ChinaDrupal.org
    在这里把一些Drupal模板常用的变量记录下来,便于以后查阅。

    page.tpl.php中可用的变量:

    $base_path: Drupal安装的基本路径。

    $directory: 返回主题所在的相对路径。
    通常使用$directory和$base_path组成主题的绝对路径,类似这样使用:

    $head: 返回头部的HTML。

    $head_title: 返回页面标题。

    $title: 返回主内容的标题。与$head_title不同,当察看一个单独节点页面时,$title就是节点的标题。

    $css: 返回一个css文件组成的数组。

    $styles: 来返回$css数组的HTML版本。

    $scripts: 返回js文件组成的数组或内容。

    $logo: 返回logo的路径,在启用主题的主题配置页面定义。

    $site_name: 返回站点的名称。在Site information中设置。

    $site_slogan: 返回站点的标语。在Site information中设置。

    $primary_links: 返回一个包含了一级链接的数组。

    $secondary_links: 返回一个包含了二级链接的数组。

    $content: 返回HTML内容。

    $node: 返回整个节点对象,当察看一个单独节点页面时可用。

    $breadcrumb: 返回面包屑,就是访问足迹

    $tabs: 返回用于为节点展示View/Edit的HTML标签。

    $mission: 返回站点使命文本,在 Site information中输入,只有在首页才可以使用。

    $messages: 返回的验证错误或正确的提示信息,通常显示在页面的头部。

    $search_box: 返回搜索表单的HTML。

    $layout: 这一变量允许你定义外观不同类型的风格,而变量$layout的值依赖于启用的工具条(sidebars)的数量。可能的值包括:none, left,right, and both。

    $help: 返回帮助文本,大多用于管理页面。

    $is_front: 如果当前为首页其值为真TRUE。

    $language: 返回站点所使用的语言。

    $feed_icons: 返回该页面的RSS链接。

    $footer_message: 返回页脚信息文本,在Site information中可以修改。

    $closure: 返回hook_footer()的输出,常用于页面底部。