Smarty и Js

Почему-то ругается на синтаксис:

console.log('{$order.items.'+i+'.price}');

У меня переменная 'i', это интерация цикла js.

А $order.items.0.price, $order.items.1.price - товары.

Какая тогда нужна запись чтобы в переменной $order.items.i.price, чтобы i корректно обрабатывался.
Я попробовал поиграть c {literal}, все равно ругается.

2 ответа

  • 1

    Если итерация цикла js, то в момент компиляции smarty о ней ничего не известно. Оперируйте переменными JS для получения результата.

  • 1
    console.log('{ $order.items.'+i+'.price }');

    потому что у вас не правильная запись, либо так, как указано выше, либо вот так (но он не сработает :D, у вас счетчик есть)

    {literal}
    console.log('{/literal}{$order.items.'+i+'.price}{literal}');
    {/literal}

    SMARTY очень не любит фигурные скобки который используются в JS, с ними надо быть аккуратнее


    P.S. вы бы лучше описали чего хотите добиться

    • +1
      destrifer destrifer 12 мая 2021 23:08 #

      Спасибо.

      Но выглядит как костыли. А как тогда правильно?
      Задача проста - надо передать в JS переменные, которые изначально Smarty.
      Такие переменные как, например, номер заказа: {$order.id} - с ними все просто - он всегда один.

      А товаров может быть и много, значит цикл.

      Но внутри как раз и приходится менять 'i' - $order.items.i.price, чтобы узнать цену каждого следующего товара в массиве items.

      Получается переменная от smarty, а счетчик из js.

      Или делать цикл в smarty, а потом присваивать значения js переменным.


Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите