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

Drupal7模块开发。仅在指定时间显示特定类,drupal,drupal-7,Drupal,Drupal 7,我正在构思一个Drupal 7定制模块,我有一个逻辑,只在早上显示一个类(带有红地毯的图像),然后在中午(大约下午6点)该类图像将显示另一个图像(如蓝色地毯) 对于这个模块和属性,我应该使用哪些特定的Drupal7钩子?我现在唯一能用的钩子是钩子菜单和钩子块,但我还在想到底应该用什么钩子 多谢各位。我在模块开发方面年轻了一周:-)假设您想要显示的内容是一个节点,那么您可以采取两种方法 首先是Drupal6方式,但它在Drupal7中仍然有效。您可以使用hook\u node\u info定义新的

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

对于这个模块和属性,我应该使用哪些特定的Drupal7钩子?我现在唯一能用的钩子是钩子菜单和钩子块,但我还在想到底应该用什么钩子


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

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

首先是Drupal6方式,但它在Drupal7中仍然有效。您可以使用
hook\u node\u info
定义新的内容类型,然后使用
hook\u form
定义编辑表单,并使用
hook\u view
查看内容。因为这是一种“老”的做事方式,我就不多说了

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

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

  • 使用
    hook\u field\u info
    声明字段
  • 使用
    hook\u field\u widget\u info
    为在
    hook\u field\u info
    中定义的字段声明小部件
  • hook\u field\u widget\u form
    返回表单,该表单将用于编辑表单
  • 使用
    hook\u field\u formatter\u info
    为在
    hook\u field\u info
    中定义的字段声明格式化程序
  • 从查看节点时将显示的
    hook\u field\u formatter\u view
    返回要显示的内容
  • 这方面的一个完整示例在这里的回答可能有点冗长。查找这些钩子的示例及其文档,您就会明白了

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

    对于DS动态字段,启用
    DS
    模块,然后使用以下内容实现
    hook\u DS\u fields\u 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');
    }
    

    我会使用另一种方法,而不是@shanet的一种带有预处理钩子的方法,其主要思想是在页面的某处添加一个类,然后使用css背景图像:“hook_preprocess_hook”。详情请浏览

    在“hook\u preprocess\u hook”中,“hook”可以是主题或模块的名称(首选,因为您的功能似乎不依赖于主题),而“hook”可以是“html”、“页面”、“字段”、“节点”等

    在钩子中,您将发现类的“$variables['classes\u 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标记中获得类“morning”或“not morning”,并且可以根据您的“morning”条件使用CSS瞄准任何对象。

    图像显示在哪里?它是在一个块、一个节点、一个表单还是其他什么东西中?根据显示的位置使用不同的挂钩。请参阅下面的答案。谢谢@shanet。我犯了一个错误,它在街区里。但无论如何,我将使用这些代码创建it节点的一个版本。我也在我的站点建筑中使用显示套件。