【问题标题】:how to override Drupal deafult output contents of CCK field on new line如何在新行上覆盖 CCK 字段的 Drupal 默认输出内容
【发布时间】:2012-08-01 04:16:47
【问题描述】:

我对 Drupal 很陌生(使用 7),但我已经设法设置了我的内容类型(例如 'concert')并且我创建了一个 node-concert.tpl.php,我需要重写其 HTML 结构以适应concert 内容类型特有的信息。

我在此内容类型中有大量 CCK 字段(几乎所有单行文本字段),并且我知道如何使用 <?php print render($content['field_fieldname']); ?> 访问字段的内容。我的问题是这样的:Drupal 在新行上输出每个字段。所以,如果我有以下具有以下值的字段:

field_concert_date = January 1, 2013
field_concert_time = 3 PM
field_concert_location = Boston, MA

Drupal 将简单地在新行上输出每个字段值(所有字段标签都被隐藏)。我想要的输出是这样的:

January 1, 2013 at 3PM in Boston, MA

我试图通过将所有三个字段的输出包装在 <h2> 标记中来实现这一点,如下所示:

<h2><?php print render($content['field_concert_date']); ?> at <?php print render($content['field_concert_time']); ?> in <?php print render($content['field_concert_location']); ?></h2>

但 Drupal 仍然在自己的行上输出所有内容(甚至是 <h2> 标记内的硬编码文本):

January 1, 2013
at
3 PM
in
Boston, MA

我查看了Customize a field outputDrupal: Print field without markup 并进行了一些基本的谷歌搜索,但我无法找到对这个特定问题的参考。我假设罪魁祸首在于一些额外的标记被添加到某个地方,这会在每个字段的末尾强制一个新行,但我不完全确定它会来自哪里。是在field.tpl.php 吗?或者别的地方?还是与对render() 的调用有关(在render() 成功返回字段内容后强制换行的东西)?就像我说的,我对 Drupal 还很陌生,还没有弄清楚如何查明像这样的小规模(但很重要!)问题。

谢谢!

附加说明:我正在从头开始创建 Drupal 主题,到目前为止,我引入的唯一 CSS 是 CSS 重置。

【问题讨论】:

    标签: php templates drupal field


    【解决方案1】:

    您是否使用文本作为这些字段的输入格式?从那里开始(/admin/structure/types/manage/[content_type]/fields)。

    然后检查 管理显示 选项卡中的相关内容类型 (/admin/structure/types/manage/[content_type]/display) 并确保您使用的是 Plain文本格式。

    还要检查过滤器处理顺序,以查看为应用于这些字段的文本格式启用的任何过滤器,屏幕位于 /admin/config/content/formats。

    【讨论】:

    • 是的,文本是所有字段的输入格式,它们都被格式化为纯文本。我能够通过自定义field.tpl.php 并删除其中包含的所有多余标记(三个divs 只是为了输出一个字段!)来解决这个问题,只在foreach 循环中留下<?php print render($item); ?>。我不确定这是否是最可持续的解决方案,但它实现了我想要的。如果有更好的解决方案,我当然会很高兴听到他们的消息!
    • 这是一个可靠的可持续解决方案。如果这是您的第一个 Drupal 模板定制,那么恭喜。一旦您开始在模板级别工作,您就可以做一些令人兴奋的事情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-12
    • 2017-04-26
    • 2011-09-22
    相关资源
    最近更新 更多