1

我正在开发自己的自定义 CMS,它允许我创建一小段代码并将它们放置在整个站点上——Joomla 也可以这样做。我想做的是每个代码块都可能有自己的 JS 文件,这些文件只与那个块相关。所以我想使用 PHP 将 JS 动态添加到 head 标签中。现在我在网上找到了这个解决方案并为它创建了一个类。

<script type="text/javascript">
var script = document.createElement('script');
script.type = "text/javascript";
script.src = "/path/to/pikachoosejs/jquery.pikachoose.js";
document.getElementsByTagName('head')[0].appendChild(script);
</script>

这是PHP版本:

<?php function loadcss($path) { ?>
<script>
var script = document.createElement('script');
script.type = "text/javascript";
script.src = "<?php echo $path; ?>";
document.getElementsByTagName('head')[0].appendChild(script);
</script>
<?php } ?>

现在问题来了,如果我添加此代码,它确实包含在 Head Tag 中。但是,不知何故 Pikachoose 不起作用。如果我做一个正常的包括使用

<script type="text/javascript" src="/path/to/pikachoosejs/jquery.pikachoose.js"> </script>

这是我用来调用脚本的 PHP 函数 -

它工作正常。我不确定我哪里出错了。有人可以帮忙吗?

4

5 回答 5

0

您的解决方案是script在 HTML 的某处写入标签,具体取决于调用函数的位置。它与 Joomla 有很大不同!特别是因为它依赖于客户端将脚本附加到头部。

为了做一些 Joomla!-ish,您需要使用输出缓冲区,或者可能是 jQuery 的服务器端等价物,例如phpQuery

对于像你这样的简单案例,我会使用phpQuery,因为它使 jQuery 编码器的事情变得更容易。


您的迷你 CMS 的简单设置可能是这样的。在它的开头,但在下面,除非您明确打算,否则不要在您的代码中使用任何 HTML。

phpQuery::newDocumentFileHTML('/path/to/template.html');

它通过将模板文件加载到其内存中为 phpQuery 创建一个新的上下文,并且是必需的,但可以是不同的变体之一。请参阅基础文档

附加脚本的功能:

function loadJS( $name ) {
    pq('<script>')->attr('src', $name)->appendTo('head');
}

jQuery 中可用的几乎所有方法在 phpQuery 中也可用。到目前为止,我发现的唯一例外是该css方法,因为如果不深入分析链接的样式表,就不可能知道哪些样式将在客户端呈现。

最后,将 DOM 写入您的响应:

echo pq('html');

无论是您当前的方法还是这种方法,jquery.pikachoose.js脚本实际上都应该有效。检查开发者工具中的资源,看看它是否已加载。如果是这样,请检查是否有任何与您的脚本相关的错误阻止它作为 jQuery 插件正确加载。

于 2013-10-17T05:33:09.590 回答
0

如果你想让脚本由 PHP 生成,你需要把它放在一个 PHP 文件中。将文件重命名为 js/getdata.js.php 并相应地更新 src。

于 2013-10-17T06:36:59.473 回答
0

尝试这个:

(function () { 
var li = document.createElement('script'); 
li.type = 'text/javascript'; 
li.src= "<?php echo $path; ?>";
li.async=true;
var s = document.getElementsByTagName('script')[0]; 
s.parentNode.insertBefore(li, s); 
})();
于 2013-10-17T05:22:27.993 回答
0

另一种简单而可靠的方法是将脚本标记字符串保存在变量中。

<?php function loadcss($path) { ?>

     $sc = "<script type='text/javascript' src='$path'></script>"; ?>
     document.getElementsByTagName('head')[0].innerHTML += '<?php echo $sc ?>';

<?php } ?>

考虑两件事,您正在获得正确的路径。你真的有一个头标签。如果是,则使用以下代码。

这段代码应该是正确的,但如果你没有让它工作......为了确保这段代码是正确的......你可以检查你的头部元素(使用萤火虫),你会看到。脚本节点将使用此代码编写

于 2013-10-17T07:46:15.170 回答
0
var js = document.createElement('script');
js.src = 'http://xxx./yyy.js';
document.getelementsbytagname('head')[0].appendChild();

我认为这是最好的一个。

于 2016-05-11T10:57:36.340 回答