Prestashop 1.7- фрагмент кода jQuery внутри файлов шаблонов (jQuery не определен)

#jquery #prestashop #prestashop-1.7

#jquery #prestashop #prestashop-1.7

Вопрос:

Как можно записать фрагмент кода jQuery внутри tpl файлов темы? Возможно ли это вообще?

В последнем из themeclassicChildmodulesps_customersigninps_customersignin.tpl я использовал код jQuery, но в chrome console я получаю (jQuery is not defined) сообщение:

 {literal}
<script type="text/javascript">

        jQuery(document).ready(function($){
            alert('x');
        });


</script>
{/literal}
  

Редактировать:
также используйте хук displayBeforeBodyClosingTag перед кодом jquery, но это не работает.

 {hook h='displayBeforeBodyClosingTag'}

{literal}
<script type="text/javascript">

        jQuery(document).ready(function($){
            alert('x');
        });


</script>
{/literal}
  

Ответ №1:

Это типичная ошибка, когда jQuery на данный момент еще не загружен, просто добавьте этот код $this->context->controller->addJquery(); в метод renderWidget модуля /modules/ps_customersignin/ps_customersignin.php , когда hookDisplayHeader`.

Пример конечного результата:

 public function renderWidget($hookName, array $configuration)
{
    if ($hookName == 'displayHeader' amp;amp; method_exists($this->context->controller, 'addJquery')) {
        return $this->context->controller->addJquery();
    }

    $this->smarty->assign($this->getWidgetVariables($hookName, $configuration));

    return $this->fetch($this->templateFile);
}
  

После этого вам нужно будет прикрепить модуль к hook displayHeader в позициях модуля.

Комментарии:

1. Эта функция не действует в теме PrestaShop 1.7. jQuery2 регистрируется ядром в каждой теме. classes/controller/FrontController.php public function addJquery($version = null, $folder = null, $minifier = true) { /* This is deprecated in PrestaShop 1.7 and has no effect in PrestaShop 1.7 theme. jQuery2 is register by the core on every theme. Have a look at the /themes/_core folder. */ }

2. Я добавил изменение в свой ответ, пожалуйста, попробуйте сейчас с этими изменениями и дайте мне знать. Не забудьте очистить кэш.

3. Я всегда очищаю кэш и включаю режим отладки. Я попробую это. Важным событием является то, что прошлой ночью фрагмент кода jquery сработал!!! . jquery is not define Все еще существует on chrome console , но jquery работает очень хорошо. Я не вношу никаких важных изменений!

4.Я попробовал ваш новый код, не имеет никакого эффекта. сообщение jquery is not define все еще существует. Но, как я сказал в предыдущем комментарии, jquery code work действительно, даже несмотря на то, что jquery is not define отображается на chrome console developer tools !!!

Ответ №2:

Это происходит из-за всех скриптов, включая core.js (который включает jquery) вызывается перед закрытием тела tad, и вы пытаетесь использовать его раньше. Итак, я думаю, что невозможно добавить ваш скрипт таким образом, и вам нужно переместить ваш код в класс module controller

Комментарии:

1. Спасибо, я верю, что это возможно. Просто я новичок в Prestashop и ищу правильный путь…