Drupal node.tpl.php 中可用的模板变量

这个模板文件控制着节点的输出,和节点摘要的输出.它仅能影响page.tpl.php中的$content变量。
在这个模板里,有以下变量可供使用:

$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 模板变量

Page.tpl.php是负责网页布局的模板,这个模板控制整个页面的主框架。
在这个模板里,有以下变量可供使用:

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

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

$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()的输出,常用于页面底部。

Drupal 如何创建一个annotate模块

Drupal 的所以自定义模块都是放在“sites/all/modules”文件夹下面。如果“sites/all”下没有“modules”文件夹,请手动建立一个。
以下模块是在6.25版本测试通过。

一、模块信息文件 annotate.info
代码如下
; $Id$
name = Annotate
description = Allows users to annotate nodes.
core = 6.x
package = Pro Drupal Development

二、模块程序文件 annotate.module

代码如下

<?php

// $Id$

/**
 * @file
 * Lets users add private annotations to nodes.
 *
 * Adds a text field when a node is displayed
 * so that authenticated users may make notes.
 */

/**
 * Implementation of hook_menu().
 */
function annotate_menu() {
  $items['admin/settings/annotate'] = array(
    'title' => 'Annotation settings',
    'description' => 'Change how annotations behave',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('annotate_admin_settings'),
    'access arguments' => array('administer site configuration'),
    'type' => MENU_NORMAL_ITEM,
    'file' => 'annotate.admin.inc',
  );
 
  return $items;
}

/**
 * Implementation of hook_nodeapi().
 */
function annotate_nodeapi(&$node, $op, $teaser, $page) {
  global $user;
  switch ($op) {
    // The 'view' operation means the node is about to be displayed.
    case 'view':
      // Abort if the user is an anonymous user (not logged in) or
      // if the node is not being displayed on a page by itself
      // (for example, it could be in a node listing or search result).
      if ($user->uid == 0 || !$page) {
        break;
      }
      // Find out which node types we should annotate.
      $types_to_annotate = variable_get('annotate_nodetypes', array('page'));
     
      // Abort if this node is not one of the types we should annotate.
      if (!in_array($node->type, $types_to_annotate)) {
        break;
      }
     
      // Get the current annotation for this node from the database
      // and store it in the node object.
      $result = db_query('SELECT note FROM {annotations} WHERE nid = %d AND uid = %d', $node->nid, $user->uid);
      $node->annotation = db_result($result);

      // Add our form as a content item.
      $node->content['annotation_form'] = array(
        '#value' => drupal_get_form('annotate_entry_form', $node),
        '#weight' => 10
      );
      break;
     
    case 'delete':
      db_query('DELETE FROM {annotations} WHERE nid = %d', $node->nid);
      break;
  }
}

/**
 * Define the form for entering an annotation.
 */
function annotate_entry_form($form_state, $node) {
  // Define a fieldset.
  $form['annotate'] = array(
    '#type' => 'fieldset',
    '#title' => t('Annotations')
  );
 
  // Define a textarea inside the fieldset.
  $form['annotate']['note'] = array(
    '#type' => 'textarea',
    '#title' => t('Notes'),
    '#default_value' => isset($node->annotation) ? $node->annotation : '',
    '#description' => t('Make your personal annotations about this content here. Only you (and the site administrator) will be able to see them.')
  );
 
  // For convenience, save the node id.
  $form['annotate']['nid'] = array(
    '#type' => 'value',
    '#value' => $node->nid
  );
 
  // Define a submit button.
  $form['annotate']['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Update')
  );
  return $form;
}

/**
 * Handle submission of the annotation form and saving
 * of the data to the database.
 */
function annotate_entry_form_submit($form, $form_state) {
  global $user;
 
  $note = $form_state['values']['note'];
  $nid = $form_state['values']['nid'];
 
  db_query('DELETE FROM {annotations} WHERE nid = %d AND uid = %d', $nid, $user->uid);
  db_query("INSERT INTO {annotations} (nid, uid, note, created) VALUES (%d, %d, '%s', %d)", $nid, $user->uid, $note, time());
  drupal_set_message(t('Your annotation has been saved.'));
}

三、annotate.admin.inc 文件

代码如下
 

<?php
// $Id$

/**
 * @file
 * Administration page callbacks for the annotate module.
 */

/**
 * Form builder. Configure annotations.
 *
 * @ingroup forms
 * @see system_settings_form().
 */
function annotate_admin_settings() {
  // Get an array of node types with internal names as keys and
  // "friendly names" as values. E.g.,
  // array('page' => 'Page', 'story' => 'Story')
  $options = node_get_types('names');
 
  $form['annotate_node_types'] = array(
    '#type' => 'checkboxes',
    '#title' => t('Users may annotate these content types'),
    '#options' => $options,
    '#default_value' => variable_get('annotate_node_types', array('page')),
    '#description' => t('A text field will be available on these content types to make user-specific notes.'),
  );

  return system_settings_form($form);

}

四、安装文件 annotate.install

代码如下
 

<?php
// $Id$

/**
 * Implementation of hook_install().
 */
function annotate_install() {
  // Use schema API to create database table.
  drupal_install_schema('annotate');
}

/**
 * Implementation of hook_uninstall().
 */
function annotate_uninstall() {
  // Use schema API to delete database table.
  drupal_uninstall_schema('annotate');
}

/**
 * Implementation of hook_schema().
 */
function annotate_schema() {
  $schema['annotations'] = array(
    'description' => t('Stores node annotations that users write.'),
    'fields' => array(
      'nid' => array(
        'type' => 'int',
        'unsigned' => TRUE,
        'not null' => TRUE,
        'default' => 0,
        'description' => t('The {node}.nid to which the annotation applies.'),
      ),
      'uid' => array(
        'type' => 'int',
        'unsigned' => TRUE,
        'not null' => TRUE,
        'default' => 0,
        'description' => t('The {user}.uid of the user who created the annotation.')
      ),
      'note' => array(
        'description' => t('The text of the annotation.'),
        'type' => 'text',
        'not null' => TRUE,
        'size' => 'big'
      ),
      'created' => array(
        'description' => t('A Unix timestamp indicating when the annotation was created.'),
        'type' => 'int',
        'not null' => TRUE,
        'default' => 0
      ),
    ),
    'primary key' => array(
      'nid', 'uid'
    ),
  );
 
  return $schema;
}

建立好以上文件放在"sites/all/modules/annotate"文件夹下,在后台开启模块。此模块的作用是在已经发布的文章下面显示添加注解的功能。