【问题标题】:Add HTMl to CCK within Drupal在 Drupal 中将 HTMl 添加到 CCK
【发布时间】:2010-04-06 04:00:45
【问题描述】:

您好,我是使用 Drupal 的新手,在我的进步中遇到了障碍。我一直在使用 CCK 向我的表单添加新的内容类型。我想知道是否有任何方法可以添加到生成的表单中,以便我可以包含元素并插入可视 html 代码,如 head 规则等。我已经涉足了 hook_form_alter(),它似乎对我没有帮助在我的努力中。我已经通过调整 tpl.php 文件等并没有取得任何进展。请如果互联网上有任何人对此事有了解,您的建议将不胜感激。

这只是我想在表单中执行的一个示例: 1. 包含 DIV 中的字段元素 2. 在表单中添加 HTML 内容

【问题讨论】:

    标签: drupal cck


    【解决方案1】:

    如果你想为 a 自定义标记,你可以为它创建一个主题函数并让表单与 hook_form_alter 一起使用。这与用于自定义内容类型的 CCK 无关,因此您可以向内容类型添加其他内容。

    【讨论】:

    • 感谢您的回复,但有疑问吗?主题功能会存在哪里?
    【解决方案2】:

    hook_form_alter 无法帮助您更改包含 cck 字段的编辑表单,因为 cck 字段是在 hook_form_alter 调用之后添加的。

    您需要像这样为表单设置主题:

    创建一个模块并将这个钩子实现放入其中:

    功能 mymodule_theme($existing, $type, $theme, $path) { 'your_form_id' => 数组( '参数' => 数组('form' => NULL), '模板' => '我的模板', ) }

    然后在你的模块目录中创建一个名为my_template.tpl.php 的文件。
    现在清空缓存。

    在该文件中,您可以单独渲染表单元素,如下所示:

    等等等等……'; 打印 drupal_render($form['another_form_element']); // 这个用于渲染所有剩余的项目,比如隐藏项: 打印 drupal_render($form);

    在开发过程中使用 devel 模块。它包含许多有用的工具,使开发变得更加容易。

    【讨论】:

    • 感谢您的回复。我仍然无法在页面上显示元素。我在表单页面本身上收到此错误消息: Parse error: syntax error, unexpected T_DOUBLE_ARROW in .../sites/all/modules/test/test.module on line 3 从概念上不确定该 sn-p 将如何工作表单而不是网站的每个页面。 array('arguments' => array('form' => NULL), 'template' => 'my_template', ) } 我做错了什么吗?
    • 请将整个代码粘贴到drupalbin.com 并发回链接。我去看看。
    【解决方案3】:

    原始 HTML CCK 字段 (Drupal 6) - 无过滤器、格式或编辑器

    简单修复!只需对未过滤的 HTML 使用纯文本格式。然后在构建节点时将其转换回字段 .tpl 中的 html。

    CCK 字段上的

    纯文本格式 会将 HTML 标记转换为实体特殊字符(这会使它看起来像页面上的代码,而不是实际的 html 标记)。它将使用 php 的 htmlspecialchars($text, ENT_QUOTES, 'UTF-8') 编码的字符串存储在 drupal 的 check_plain() 函数中。

    最干净最简单的解码方法是在字段 tpl 文件中。这避免了钩子、钩子顺序问题、循环错误和性能问题。这是通过将 tpl 文件添加到基本主题来完成的:hq_base、odyssey_base 和 odyssey_admin。下面是 drupal 如何在 cck 节点编辑表单上解码纯文本: print html_entity_decode(strip_tags($text), ENT_QUOTES);注意 - html_entity_decode 在解码回 html 时会将 php 标签转换为 html cmets。以下是具有正确命名约定的示例文件,可让 php 控制字段:

    content-field.tpl.php

    content-field-[your_field_name].tpl.php

    content-field.tpl.php 是从 cck contrib 复制到主题文件夹中的,这是一个 contrib 覆盖 以使其在主题中可用,并且不应修改(除非您想要更改主题中的所有字段)。字段特定文件也是 tpl 的副本,一旦覆盖文件在那里,它将起作用。然后在字段tpl文件中decode to html

    • // 打印 $item['view'];

    打印 html_entity_decode(strip_tags($item['view']), ENT_QUOTES);

    Drupal 版本注意: Drupal 7 和 Drupal 8 中的 tpl 文件略有不同。但 html_entity_decode() 是一个 php 函数,不会因 Drupal 版本而改变。

    安全提示: 这种获取原始 HTML 的解码技巧与 Drupal 为文本格式安全而构建的方式背道而驰。这意味着任何有权编辑页面的人现在都有权编辑 html 结构,并在页面上添加脚本标签。这可能会破坏布局,并且可能很危险。您在这里依靠编辑权限来保证安全性,而不是 Drupal 的正常 Formats-per-Role 安全性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-02
      • 1970-01-01
      • 2010-11-25
      • 2013-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多