【问题标题】:How to read / get values from node's field using JavaScript in Drupal?如何在 Drupal 中使用 JavaScript 从节点字段读取/获取值?
【发布时间】:2017-01-22 16:57:34
【问题描述】:

假设我在 Drupal 中的一个内容类型上有三个字段机器名称:

company_color_schema、company_logo 和 company_some_picture

我想检索company_color_schema,它将使用 JavaScript 为我提供纯文本十六进制颜色代码,以便我可以将其用作 div 背景颜色。

有没有办法使用 JavaScript 访问这些值?我查看了可用的文档,但似乎没有一个涵盖它。

【问题讨论】:

    标签: javascript drupal views drupal-theming


    【解决方案1】:

    哦,是的。在 Drupal 8 中:

    1. 创建一个视图,构建它的查询以显示您的字段
    2. 转到管理/扩展并启用“RESTful Web 服务”模块
    3. 向其中添加 REST 导出显示
    4. 为您的 REST 导出显示创建路径
    5. 使用设置选择格式“序列化程序”:
      • 强制使用字段 - 选中;
      • json - 已检查;
    6. 你已经完成了。 Ajax 脚本中的 url,解析 JSON,然后你的字段在 JS 中。

    【讨论】:

      【解决方案2】:

      您可以做到这一点的一种方法是将 JavaScript 代码放置在视图模板文件中,至少是其中的一部分。所以假设你有一个这样的 JavaScript 行:

      <?php $value_you_get_from_php = ... ; ?>
      
          <script>
              var bcgColor = <?php echo $value_you_get_from_php; ?>;
          </script>
      

      因此,您将从 PHP 中获取颜色字段值并将其打印在内联 JavaScript 代码中,正好在您定义 JavaScript 变量值的位置。然后,您可以在任何需要的地方使用该 JavaScript 变量。

      另一种方法是使用节点 ID 作为参数进行 Ajax 调用,但如果可以接受,第一个选项更容易。

      或者,最简单的解决方案(受 Artreaktor 的回答启发):直接从模板文件中拍摄颜色 - 添加 style 标签属性并从中设置颜色。 Artreaktor 的解决方案可能更符合规则,但我的解决方案更容易实施。

      【讨论】:

        【解决方案3】:

        您应该为此使用drupalSettings。

        您可以根据需要将它们附加在hook_node_view 或类似名称中

        其实你不需要javascript来设置div背景。更好的方法是使用hook_preprocess_HOOK:

        mymodule_preprocess_node(&$vars) {
          $vars['background'] = $vars['node'][WHATEVER_VALUE];
        }
        

        将此代码放入您的模块中,清除缓存,然后您可以在node.tpl.php 中使用$background 变量

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-05-15
          • 1970-01-01
          • 1970-01-01
          • 2015-02-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多