Prestashop 1.6.1.16 - 我的js文件已加载,但我的功能还没有看到

时间:2017-08-11 08:07:09

标签: javascript php html override prestashop

我是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">&times;</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()
}

你认为我能做什么?

1 个答案:

答案 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'))时将其挂钩,如果已经安装了模块,请将其重置或手动挂钩。