Drupal:在同一页面上显示两种内容类型

时间:2018-07-02 08:06:28

标签: php drupal-7 content-type

我是drupal和开发人员的新手,所以在我解释我的意思的同时,请多多包涵。我希望这不是一个超级努比问题?

admin栏中,我有两种内容类型:

  • 结构>内容类型>项目
    • 具有字段:field_teaser_image_2
  • 结构>内容类型>灵活的布局
    • 具有字段:field_listing_image

我当前正在编辑文件node--project.tpl.php

在该文件中,我有这段代码:

<?php if ($content['field_teaser_image_2']): ?>

  <?php print render($content['field_teaser_image_2']); ?>

<?php elseif (empty($content['field_listing_image'])): ?>

  <?php print render($content['field_listing_image']); ?>

<?php else: ?>

  <img src="/<?php print path_to_theme(); ?>/images/site-logo.png" alt=" " class="associated-content__image__default">

<?php endif; ?>

问题出在这一行:

<?php print render($content['field_listing_image']); ?>

由于某种原因,它返回空白。当我使用时:

var_dump($content);

然后,字段'field_listing_image'不在结果中。

我可能是错的,但是我认为这是因为$content的范围是由我所在的页面定义的。因此,仅获取与node--project相关的内容。

如果我是对的,那么我需要一种方法来访问此循环之外的另一个变量。

任何人都可以明白我的意思并告诉我该怎么做吗?

先谢谢了。

3 个答案:

答案 0 :(得分:0)

如果我的解释正确,那么您就有2种内容类型:

  • 项目
  • 灵活的布局

无法在node.project.tpl.php模板上呈现field_listing_image。实际上,项目内容类型与 field_listing_image字段。因此,不可能渲染不属于或与内容类型相关的字段。

您需要在Project内容类型上重用field_listing_image,或仅创建一个新字段。还有另一种选择,您可以使用参考字段,看看这个模块:

https://www.drupal.org/project/field_reference

我希望有帮助。

答案 1 :(得分:0)

如果您不熟悉Drupal,最好的方法是使用视图-无需在此处编写一行代码。

1。在视图中创建两个块,一个用于项目,另一个用于弹性布局内容类型。

现在您有两个块分别列出每个CT。

2。转到admin> structure> block并将两个块分配到内容区域,仅将它们限制为这两种内容类型

3。转到admin> structure> content type>管理显示并隐藏默认视图中的所有字段(因此您只能渲染块)。就是这样。

答案 2 :(得分:0)

$content将包含渲染的输出和一些用于渲染当前页面的原始信息。因此,如果您在“项目”页面上,则只能访问该项目节点的字段,并且只能访问原始节点本身。

听起来您几乎想要将全局字段存储在另一种内容类型中。为此,我将创建一个名为“全局字段”的内容类型,然后将字段添加到其中。

然后在主题.theme文件中,实现hook_preprocess_page(&$variables)并在其中加载全局字段节点,并将该节点的值注入$variables数组中,然后可以从中访问任何页面模板。

例如

function custom_preprocess_block(&$variables) {
      $node = node_load(123);
      $variables['hero_image'] = $node->field_hero_image->entity->getFileUri();
}