Автор Тема: Smarty не работает в скрипте  (Прочитано 292 раз)

07 Март 2021, 10:52:48
  • Старожил
  • ****
  • Сообщений: 259
  • Репутация: +2/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Здравствуйте
Создал JS-скрипт, в нем используются переменные Smarty, например: '{$column_name}'.
Если скрипт размещен прямо в файле .tpl, то все работает нормально.
Но если этот скрипт разместить в отдельном JS файле и подключить его в контроллере
public function setMedia()
{
        parent::setMedia();
        $this->addJS(array(
               __PS_BASE_URI__.$this->admin_webpath.'/themes/default/template/controllers/reports/graphs.js'
        ));
}
то Smarty перестает работать: на экран так и выводится  '{$column_name}'
Как быть, если хочется для удобства вынести скрипт в отдельный файл?
Спасибо
07 Март 2021, 10:59:36
Ответ #1
  • Ветеран
  • *****
  • Сообщений: 16673
  • Репутация: +14630/-5
  • Сообщество PrestaShop
    • Просмотр профиля
В js файлах нельзя использовать переменные от других языков.
Переменные smarty невозможно использовать в таких файлах.
07 Март 2021, 13:37:33
Ответ #2
  • Старожил
  • ****
  • Сообщений: 259
  • Репутация: +2/-0
  • Сообщество PrestaShop
    • Просмотр профиля
В js файлах нельзя использовать переменные от других языков.
Переменные smarty невозможно использовать в таких файлах.
Спасибо
08 Март 2021, 09:53:47
Ответ #3
  • Пользователь
  • **
  • Сообщений: 97
  • Репутация: +1/-0
  • PrestaGeek
    • Просмотр профиля
    • Мой сайт
Добрый день!
Если я правильно понял.
Можно передавать переменные прямо JS независимо, где находится скрипт.

Media::addJsDef(array('переменная' => 'значение', 'переменная' => 'значение'));

Для передачи переменных используйте хуки.
telegram: @PrestaGeek
08 Март 2021, 18:32:36
Ответ #4
  • Старожил
  • ****
  • Сообщений: 259
  • Репутация: +2/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Добрый день!
Если я правильно понял.
Можно передавать переменные прямо JS независимо, где находится скрипт.

Media::addJsDef(array('переменная' => 'значение', 'переменная' => 'значение'));

Для передачи переменных используйте хуки.
У меня вопрос возник только из-за того, что захотелось вывести JS-скрипты в отдельный файл (для удобства).
Решил таким способом:
1. Создал отдельную tpl
2. В ней разместил код:
Цитировать
<script>...мой js-код...</script>
3. Подключил эту tpl к основной.
Может быть этот способ "не совсем этичный", но изначальная цель достигнута.
Все равно всем спасибо!