我正在构思一个Drupal 7自定义模块,我有一个逻辑,只在早上显示一个类(带有红地毯的图像),然后在中午(下午6时左右),类图像将显示另一个图像(就像蓝色地毯)。
对于这个模块和属性,我应该使用什么特定的Drupal 7挂钩?我知道唯一使用的钩子是hook_menu和hook_block,但我仍然在考虑如何使用确切的钩子。
谢谢。一周年轻的模块开发:-)
发布于 2014-10-25 23:38:37
假设您想要显示的内容是一个节点,您可以采取两种方法。
首先是Drupal 6方式,但它在Drupal 7中仍然有效。您可以用hook_node_info定义新的内容类型,然后用hook_form定义编辑表单,用hook_view查看内容。既然这是一种“老”的做事方式,我就不想再详细说明了。
Drupal 7中奇特的新方法是通过Fields。可以将字段添加到任何内容类型中,并与其他字段一起工作,这使其比我前面概述的创建新内容类型的旧D6方法更加灵活。
字段由两个主要部分组成:小部件和格式化程序(但是字段可以有多个小部件和格式化器,以允许用户选择)。小部件用于将数据输入字段,并将显示在节点的编辑表单上。格式化程序用于在查看节点时向用户显示字段的数据。
hook_field_info声明您的字段。hook_field_widget_info为您在hook_field_info中定义的字段声明一个小部件。hook_field_widget_form返回一个表单,该表单将用于编辑表单。hook_field_formatter_info为您在hook_field_info中定义的字段声明格式化程序。hook_field_formatter_view返回要显示的内容,该内容将在查看节点时显示。用一个完整的例子来回答这个问题会有点冗长。查找这些钩子及其文档的示例,您就会发现它。
至少这是基本的Drupal字段流。有时,为字段设置一个小部件是没有意义的。在这种情况下,我使用显示套件(ds)模块提供的动态字段。DS动态字段更容易启动和运行。我将简要解释它们,因为在您的情况下,这似乎是可能的(如果您只想根据一天中的时间显示一个图像或另一个图像,那么小部件实际上是没有用的)。
对于DS动态字段,启用ds模块,然后使用以下内容实现hook_ds_fields_info:
function example_ds_fields_info($entity_type) {
$fields = array();
$fields['node']['image'] = array(
'title' => t('Dynamic Field Name'),
'field_type' => DS_FIELD_TYPE_FUNCTION,
'function' => 'example_image',
);
if(isset($fields[$entity_type])) {
return array($entity_type => $fields[$entity_type]);
}
}
function example_foo($field) {
return (is_morning() ? 'image one' : 'image two');
}发布于 2014-10-26 08:12:13
我会使用另一种方法,而不是@shanet的方法--在页面的某个地方添加一个类,然后使用css背景图像:"hook_preprocess_HOOK“。关于钩子/7的更多细节
在"hook_preprocess_HOOK“中,”钩子“可以是主题或模块的名称(因为您的特性似乎不依赖于主题),而”钩子“可以是"html”、“页面”、“字段”、“节点”等。
在钩子中,您将找到一个类的“$变量‘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 ...
}在这个例子中,您将在body标记中得到类“上午”或“不-上午”,并且可以根据您的“早晨”条件使用CSS瞄准任何内容。
https://stackoverflow.com/questions/26558345
复制相似问题