如何在主题tpl
文件中编写摘要jQuery代码?有可能吗?
在theme\classicChild\modules\ps_customersignin\ps_customersignin.tpl
的最后一个中,我使用了jQuery代码,但是在chrome console
中,我收到了(jQuery is not defined)
消息:
{literal}
<script type="text/javascript">
jQuery(document).ready(function($){
alert('x');
});
</script>
{/literal}
编辑: 还可以在jQuery代码前使用 displayBeforeBodyClosingTag 钩子,但不起作用。
{hook h='displayBeforeBodyClosingTag'}
{literal}
<script type="text/javascript">
jQuery(document).ready(function($){
alert('x');
});
</script>
{/literal}
答案 0 :(得分:1)
当jQuery尚未加载时,这是一个典型错误,只需在hookDisplayHeader`时在模块$this->context->controller->addJquery();
的方法renderWidget
的方法/modules/ps_customersignin/ps_customersignin.php
中添加此代码public function renderWidget($hookName, array $configuration)
{
if ($hookName == 'displayHeader' && method_exists($this->context->controller, 'addJquery')) {
return $this->context->controller->addJquery();
}
$this->smarty->assign($this->getWidgetVariables($hookName, $configuration));
return $this->fetch($this->templateFile);
}
。
最终结果示例:
FindControls
此后,您需要将模块连接到模块位置的钩子displayHeader上。
答案 1 :(得分:1)
之所以发生这种情况,是因为在正文关闭tad之前调用了包括core.js(其中包括jquery)在内的所有脚本,而您尝试更早使用它。因此,我认为不可能以这种方式添加脚本,而需要将代码移至模块控制器类