Drupal 7模块开发。仅在指定时间显示特定类

时间:2014-10-25 01:04:55

标签: drupal drupal-7

我正在构思一个Drupal 7自定义模块,我有一个逻辑来显示一个类(带有红地毯的图像)只在早上,然后中午(下午6点左右),类图像将显示另一个图像(如蓝色地毯)。

我应该为这个模块和属性使用什么特定的Drupal 7钩子?我知道使用的唯一钩子是hook_menu和hook_block,但我仍在思考应该使用什么样的钩子..

谢谢。我在模块开发方面年轻一周:-)

2 个答案:

答案 0 :(得分:2)

我会使用另一种方法而不是@shanet的一个带有预处理钩子的方法,其主要思想是在页面的某处添加一个类,然后使用css背景图像:" hook_preprocess_HOOK"。更多详情请见https://api.drupal.org/api/drupal/modules!system!theme.api.php/function/hook_preprocess_HOOK/7

在" hook_preprocess_HOOK"," hook"可能是您的主题或模块的名称(因为您的功能似乎不依赖于主题而优先选择)和" HOOK"可能是" html"," page"," field"," node"等...

在钩子里面,你会发现一个" $变量[' classes_array']"类的数组。根据需要添加条件和类。

示例:

function yourmodule_preprocess_html(&$variables) {
  $variables['classes_array'][] = isMorning() ? 'morning' : 'not-morning';
}

function isMorning() {
 ... your logic to check if it is morning or not ...
 ... returns a boolean ...
}

通过这个例子,你可以上课#34;早上"或者" not-morning"在body标签中,可以根据你的"早晨"条件。

答案 1 :(得分:0)

假设您要显示的内容是一个节点,您可以采取两种方法。

首先是Drupal 6方式,但它仍然适用于Drupal 7.您可以使用hook_node_info定义新的内容类型,然后使用hook_form定义编辑表单并使用{{1查看内容}}。因为这是" old"做事的方式我不会详细说明。

Drupal 7中的新方式是通过Fields API。一个字段可以添加到任何内容类型,并与其他字段一起使用,使其比创建上面概述的新内容类型的旧D6方法更灵活。

字段由两个主要部分组成:窗口小部件和格式化程序(但字段可以有多个窗口小部件和格式化程序以允许用户选择)。窗口小部件用于将数据输入字段,并将显示在节点的编辑表单中。格式化程序用于在查看节点时向用户显示字段的数据。

  1. 使用hook_view声明您的字段。
  2. 使用hook_field_info为您在hook_field_widget_info中定义的字段声明窗口小部件。
  3. hook_field_info返回一张表格,该表格将在编辑表格中使用。
  4. 使用hook_field_widget_form为您在hook_field_formatter_info中定义的字段声明格式化程序。
  5. 返回从hook_field_info显示的内容,该内容将在查看节点时显示。
  6. 这方面的一个完整示例对于答案来说有点冗长。查找这些钩子及其文档的示例,然后您就可以了解它。

    基本的Drupal字段至少会流动。有时候为一个字段创建一个小部件是没有意义的。在这种情况下,我使用Display Suite (ds) module提供的动态字段。 DS动态字段更容易启动和运行。我将简要解释一下,因为在您的情况下它似乎可能(如果您只是想根据一天中的时间显示一个或另一个图像,那么对于小部件真的没用。)

    对于DS动态字段,启用hook_field_formatter_view模块,然后使用以下内容实现ds

    hook_ds_fields_info