我是drupal
和开发人员的新手,所以在我解释我的意思的同时,请多多包涵。我希望这不是一个超级努比问题?
在admin
栏中,我有两种内容类型:
我当前正在编辑文件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
相关的内容。
如果我是对的,那么我需要一种方法来访问此循环之外的另一个变量。
任何人都可以明白我的意思并告诉我该怎么做吗?
先谢谢了。
答案 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();
}