首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Drupal 7模块开发。仅在指定的时间显示特定的类

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

Stack Overflow用户
提问于 2014-10-25 01:04:54
回答 2查看 81关注 0票数 0

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

对于这个模块和属性,我应该使用什么特定的Drupal 7挂钩?我知道唯一使用的钩子是hook_menu和hook_block,但我仍然在考虑如何使用确切的钩子。

谢谢。一周年轻的模块开发:-)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-25 23:38:37

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

首先是Drupal 6方式,但它在Drupal 7中仍然有效。您可以用hook_node_info定义新的内容类型,然后用hook_form定义编辑表单,用hook_view查看内容。既然这是一种“老”的做事方式,我就不想再详细说明了。

Drupal 7中奇特的新方法是通过Fields。可以将字段添加到任何内容类型中,并与其他字段一起工作,这使其比我前面概述的创建新内容类型的旧D6方法更加灵活。

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

  1. 使用hook_field_info声明您的字段。
  2. 使用hook_field_widget_info为您在hook_field_info中定义的字段声明一个小部件。
  3. hook_field_widget_form返回一个表单,该表单将用于编辑表单。
  4. 使用hook_field_formatter_info为您在hook_field_info中定义的字段声明格式化程序。
  5. hook_field_formatter_view返回要显示的内容,该内容将在查看节点时显示。

用一个完整的例子来回答这个问题会有点冗长。查找这些钩子及其文档的示例,您就会发现它。

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

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

代码语言:javascript
复制
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');
}
票数 0
EN

Stack Overflow用户

发布于 2014-10-26 08:12:13

我会使用另一种方法,而不是@shanet的方法--在页面的某个地方添加一个类,然后使用css背景图像:"hook_preprocess_HOOK“。关于钩子/7的更多细节

在"hook_preprocess_HOOK“中,”钩子“可以是主题或模块的名称(因为您的特性似乎不依赖于主题),而”钩子“可以是"html”、“页面”、“字段”、“节点”等。

在钩子中,您将找到一个类的“$变量‘classes _ array’”数组。根据需要添加条件和类。

例子:

代码语言:javascript
复制
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瞄准任何内容。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26558345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档