drupal-建立模块

在第二章中,我们开发了一个模块,它具有 .info 和 .module 文件。对于所有模块来说,这些文件都是要有的。现在我们开始为模块编写 .info 和 .module 文件。

我们的模块将命名为 philquotes,并且(正如所料)将存放在drupal/sites/all/modules/philquotes 目录下。

在那个目录下,我们首先创建一个标准的模块 .info 文件:
 

; $Id$
name = "Philosophy Quotes"
description = "Dynamic display of philosophy quotes."
core = 6.x
php = 5.1

上面的代码中没什么陌生的内容。它与第二章中我们创建的模块遵循同样的格式。

 

下面,我们开始编写 philquotes.module 文件:
 

<?php
  // $Id$
  /**
   * @file
   * Module for dynamic display of pithy philosophy quotes.
   */
  /**
   * Implementation of hook_help()
   */
function philquotes_help($path, $arg) {
    if ($path == 'admin/help#philquotes') {
	$txt = 'This module displays philosophical quotes in blocks. '.
	    'It assumes the existence of a content type named "quote".';
	return '<p>'. t($txt) .'</p>';
    }
  }

上面的代码实现了 hook_help(),提供有关模块的帮助信息。这与我们在第二章中编写的代码相似。

 

与第二章中的模块一样,我们的 philquotes 模块主要目的是提供区块内容。

接下来,我们实现 hook_block()——控制区块中显示什么内容的钩子。(这个钩子的介绍也在第二章。)

这就是我们的区块钩子:
 

/**
 * Implementation of hook_block().
 */
function philquotes_block($op = 'list', $delta = 0, $edit = array()) {
    switch ($op) {
    case 'list':
	$blocks[0]['info'] = t('Philosophical Quotes');
	return $blocks;
    case 'view':
	$item = _philquotes_get_quote();
	if(!empty($item)) {
	    $content = theme('philquotes_quote',
			     check_plain($item->body),
			     check_plain($item->title));
	    $blocks['subject'] = t('Pithy Quote');
	    $blocks['content'] = $content;
	    return $blocks;
	}
    }
}

p
这个函数的大部分看起来都很熟悉。如果传入钩子的操作($op)是list,它只是简单地返回有关使用这个钩子的区块的信息。在我们的例子中,只有一个区块。

 

对我们来说,更重要的case是上面高亮的部分。如果传入的操作是 view,模块应该返回一些内容,以便显示给用户。这些内容被包裹在 $blocks 变量中。

研究这个 hook_block() 的实现时,我们重点关注上面高亮的部分。

当生成一个区块送去显示时,每个区块条目包含两部分信息:一个标题和一些内容。我们的区块标题将总是 Pithy Quote,但是,内容是通过两个步骤生成的:

  • 从数据库中取出名言
  • 为名言添加必要的风格信息

在上面的代码中,这是用下面两条语句实现的:
 

$item = _philquotes_get_quote();
if(!empty($item) {
	$content = theme('philquotes_quote',
			 check_plain($item->body),
			 check_plain($item->title));
        // ...
    }

提示:我们用 !empty($item) 确保返回的条目不是 NULL,如果是 NULL 则表示没有可用的名言了。当 $item 为 NULL 时,我们将不返回任何值,区块根本不会显示出来。

 

第一条语句执行了一次数据库查询,第二条语句进行主题化处理。下面进行我们详细说明。

评论

发表新评论

此内容将保密,不会被其他人看见。
  • 允许HTML标签:<a> <img><em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd><p>
  • 自动断行和分段。

更多关於格式化选项的信息

Image CAPTCHA
验证码
|