Expression Engine扩展开发 - 向呈现的条目添加自定义javascript

时间:2012-09-14 14:49:10

标签: javascript expressionengine

我正在进行扩展,设置中可用的其中一个选项需要在呈现时将自定义的javascript添加到文档头。我遇到的问题是解析顺序。 (也可能有更好的方法来做包含)

我正在使用channel_entries_tagdata挂钩。

在此内容中,处理完设置后,我将执行以下操作:

// Add the required javascript
$jscript = "
    <script type="text/javascript">
        /*! etc......
    </script></head>
";

// Add js
$tagdata = str_replace("</head>", $jscript, $tagdata);

我希望能够将我的javascript保存在一个单独的文件中并通过引用以某种方式包含它,但我不知道在这个阶段如何做到这一点。

我遇到的另一个问题是EE变量的解析顺序。在javascript中,我使用$ tagdata中的变量。像这样:

$.post("URL", { channel: "{channel}", entryId: "{entry_id}", urlTitle: "{url_title}", lastSegment: "{last_segment}", editDate: eo.editDate, field: eo.eleName }, function(data){...

在这种情况下,我如何调用/使用EE变量?

...阐述 此扩展名适用于以下内容: 在插件中 - &gt;来自控制面板的扩展,它们将激活扩展。在该扩展程序的“设置”中,他们将能够按频道授权可以“修改”该频道​​中条目的成员或群组。

在检查权限之后,扩展会在呈现每个自定义字段类型之前对其进行编辑,并将其包装在类元素中。 JavaScript文件接下来是用于此功能的。单击该元素时,将打开一个模式,其中包含自定义字段类型以及通道/条目信息,因此可以在编辑后保存该字段。

2 个答案:

答案 0 :(得分:0)

您是否可以让<head>中的脚本成为通用函数并通过从通道条目中调用它来将变量传递给它?

<head>
  ...
  <script>
    function W3bGuy_function(channel, entry_id, last_segment) {
      ...whatever...
    }
  </script>
</head>

<body>
  ...
  {exp:channel:entries}
  some action triggers: W3bGuy_function('{channel}', '{entry_id}', '{segment_3}');
  {/exp:channel:entries}
  ...

答案 1 :(得分:0)

channel_entries_tagdata包含从每个{exp:channel:entries}循环中提取的原始模板代码,然后有另一个变量($ row),该变量是该条目的实际数据的数组。 (根据the docs。)

首先,如果你想以这种方式将JS添加到<head>,你必须确保你的整个页面模板都在你的Channel Entries循环中 - 如果你{{1}这可能不起作用在嵌入内部。

其次,我建议转储通过该钩子传递的<head>数据,以查看是否可以从返回的JS中提取数据。

希望有所帮助。