我是Prestashop的新手(1.6.1.16)。 我使用默认的prestashop主题(default-bootstrap)。
我做了什么:
我将内容放在/themes/default-bootstrap/product.tpl
中:
在最高评论之后(关于LICENSE和其他人的评论):
<script type="text/javascript" src="modules/ask_bid/js/ask.js">
</script>
<button onclick="take_asks({$product->id})">See asks</button>
<input type="hidden" id="product-id" value="{$product->id}" />
<input type="hidden" id="customer-id" value="{$id_customer}" />
<!-- Modal -->
<div id="modal" class="modal fade">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-
dismiss="modal">×</button>
<h4 class="modal-title">Modal Header</h4>
</div>
<div class="modal-body">
<p>Some text in the modal.</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default"
data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
{$product->id}
来自
/controllers/front/ProductController.php<br>
和{$id_customer}
来自
/override/controllers/front/ProductController.php
我在/modules/ask_bid/js/ask.js
创建了下一个内容:
function isJSON(data) {
var ret = true;
try {
JSON.parse(data);
}catch(e) {
ret = false;
}
return ret;
}
function take_asks (id_product) {
$.ajax({
type: 'POST',
url: baseDir + 'modules/ask_bid/ajax.php',
data: 'method=take_asks&id_product='+id_product,
dataType: 'text',
success: function(json) {
if(isJSON(json)) {
var json = JSON.parse(json);
//alert("json: " + json[0].comment);
}
},
error: function() {
alert("error");
}
});
}
此外,模式并不像一个人 我的模态显示(不隐藏),这是不正常的。 它就在按钮之后而不是在空中&#34;在空中&#34; (我希望你知道我的意思)。
我有js错误:
/modules/ask_bid/js/ask.js
已加载(我在INSPECT-&gt; f12 / Network中也看到了这一点),但未看到take_asks()
。
我收到下一个控制台错误(当我按下&#39; Take ask&#39;按钮时):
未捕获的ReferenceError:未定义take_asks 在HTMLButtonElement.onclick(index.php? id_product = 6&安培;控制器=产物&安培; id_lang = 1:413)
我尝试了什么
-I删除了class_index.php
- 我删除了缓存(用CTRL-f5)
- 我试图从/override/controllers/front/ProductController.php添加js文件
但是没有工作,我也没有收到错误:
public function setMedia()
{
$this->addJS('modules/ask_bid/js/ask.js');
parent::setMedia();
}
...或...
function init () {
$this->context->controller->addJS('modules/ask_bid/js/ask.js');
parent::init()
}
你认为我能做什么?
答案 0 :(得分:1)
您应该在模块中创建一个hookheader:
public function hookHeader($params)
{
$this->context->controller->addJS(($this->_path).'js/ask.js');
}
您只能在产品页面上添加:
public function hookHeader($params)
{
if (!isset($this->context->controller->php_self) || $this->context->controller->php_self != 'product')
return;
$this->context->controller->addJS(($this->_path).'js/ask.js');
}
并在您的模块中使用
安装钩子到标题$this->registerHook('header'))
要在不更改主题tpls的情况下向产品页面添加内容(如评论中所述),您可以使用displayFooterProduct&#34;在产品说明下添加新块。&#34;。
public function hookDisplayFooterProduct($params)
{
return "code you want to insert";
}
在此钩子中,您可以访问以下参数: $ params = array(&#39; product&#39; =&gt; Product,&#39; category&#39; =&gt; Category)
另外,请记住在安装$this->registerHook('displayFooterProduct'))
时将其挂钩,如果已经安装了模块,请将其重置或手动挂钩。