表达式引擎扩展开发-向呈现的条目添加自定义javascript

Expression Engine Extension Development - Add custom javascript to rendered entry

本文关键字:添加 javascript 自定义 扩展 引擎 开发 表达式      更新时间:2023-09-26

我正在开发一个扩展,设置中的一个可用选项需要在渲染时将自定义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变量?

详细说明。。。此扩展适用于以下内容:在控制面板的Addons->Extensions中,他们将激活扩展。在该扩展的"设置"中,他们将能够通过频道授权可以"编辑"该频道中条目的成员或组。

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

您能让<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}
  ...

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

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

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

希望能有所帮助。