限制预告片仅显示字段的第一个值


14

我有一个带有图像字段的内容类型。此字段通常填充0到4个值。默认情况下,此内容类型的预告片输出所有0到4张图像。如何调整预告片仅显示第一张图像?

Answers:


12

创建一个自定义模块,用MODULENAME模块field_image名称和字段名称替换:

/**
 * Implements hook_entity_view().
 */
function MODULENAME_entity_view($entity, $type, $view_mode, $langcode) {
  if ($view_mode == 'teaser') {
    $entity->content['field_image']['#items'] = array_slice($entity->content['field_image']['#items'], 0, 1);
  }
}

有关更多详细信息,请参见hook_entity_view()文档。


这看起来很有希望,我会尝试一下。我可能需要几天时间才能实施并进行报告。我是刚开始编写模块的人,所以我有几个问题:(1)当字段中的值为零时,示例代码是否可以工作(不会崩溃);(2)当字段中的值零时您的示例代码可以工作(不会崩溃)吗?没有图像字段的其他内容类型?谢谢!
格雷格

1)是的,应该。2)您可以将if语句更改为if ($view_mode == 'teaser' && $entity->type == 'CONTENT_TYPE')
tim.plunkett 2011年

4
或简单地&& isset($ entity-> content ['field_image']),那么在将字段添加到另一种内容类型或重命名该内容类型时,您不需要更新代码,或者.. :)
Berdir

嗯 这可能有效,但这只是将主题中应包含的内容写入代码的示例。
artfulrobot 2014年

它将起作用,但是如果您通过自定义代码解决这样的问题,则该站点将来将难以维护。使用其他答案中提到的drupal.org中的某些模块。
Bobík

12

无需编写自定义代码。

尝试使用 字段多重限制模块。

它允许您进入内容类型的显示设置,并将预告设置配置为仅显示一定数量的值。您甚至可以使其跳过值,例如,如果您希望它显示值2到5


4

如果使用预告模板(即:node--CONTENT-TYPE--teaser.tpl.php),则可以这样做:

  <?php print render($content['IMAGE-FIELD'][0]); ?>

1

我使用了hook_field_extra_fields()和hook_node_view()创建一个新字段来显示第一个图像,这样我就不会篡改原始图像字段。

hook_field_extra_fields()初始化新字段,该字段将出现在您节点类型的管理显示选项卡上。

function HOOK_field_extra_fields() {
  $extra['node']['NODE_TYPE'] = array(
    'display' => array(
      'primary_image' => array(
        'label' => t('Primary Image'),
        'weight' => 0,
      )
    ),
  );
  return $extra;
}

然后使用hook_node_view()将第一个图像添加为新字段的内容。

function HOOK_node_view($node, $view_mode, $langcode) {
  if($node->type == 'NODE_TYPE' && $view_mode == 'teaser') {

    //make sure there are images
    if(!empty($node->field_images)) {
      $node->content['primary_image'] = $node->content['field_images'][0];

      //hide the original field with multiple images
      hide($node->content['field_images']);
    }
  }
}

注意:如果启用了显示套件,则可以在管理显示选项卡中执行此操作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.