我正在构思一个Drupal 7自定义模块,我有一个逻辑来显示一个类(带有红地毯的图像)只在早上,然后中午(下午6点左右),类图像将显示另一个图像(如蓝色地毯)。
我应该为这个模块和属性使用什么特定的Drupal 7钩子?我知道使用的唯一钩子是hook_menu和hook_block,但我仍在思考应该使用什么样的钩子..
谢谢。我在模块开发方面年轻一周:-)
答案 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方法更灵活。
字段由两个主要部分组成:窗口小部件和格式化程序(但字段可以有多个窗口小部件和格式化程序以允许用户选择)。窗口小部件用于将数据输入字段,并将显示在节点的编辑表单中。格式化程序用于在查看节点时向用户显示字段的数据。
hook_view
声明您的字段。hook_field_info
为您在hook_field_widget_info
中定义的字段声明窗口小部件。 hook_field_info
返回一张表格,该表格将在编辑表格中使用。hook_field_widget_form
为您在hook_field_formatter_info
中定义的字段声明格式化程序。hook_field_info
显示的内容,该内容将在查看节点时显示。这方面的一个完整示例对于答案来说有点冗长。查找这些钩子及其文档的示例,然后您就可以了解它。
基本的Drupal字段至少会流动。有时候为一个字段创建一个小部件是没有意义的。在这种情况下,我使用Display Suite (ds) module提供的动态字段。 DS动态字段更容易启动和运行。我将简要解释一下,因为在您的情况下它似乎可能(如果您只是想根据一天中的时间显示一个或另一个图像,那么对于小部件真的没用。)
对于DS动态字段,启用hook_field_formatter_view
模块,然后使用以下内容实现ds
:
hook_ds_fields_info