Перейти к содержимому


Проблема со Smarty

Smarty Шаблон печати

Сообщений в теме: 5

#1 Krokus

    Участник

  • Пользователи
  • PipPip
  • 12 сообщений
  • Пол:Мужчина
  • Город:Tallinn

Отправлено 17 Декабрь 2015 - 03:09

Приветствую!

Сначала фабула: существует основная таблица, назовем ее "Клиенты", и связанная - пусть будет "Принятые решения". В "Принятые решения" может быть несколько записей, строк. В свое время мною при любезной помощи сотрудников КБ был разработан шаблон печати, при котором в шаблоне печати отображалось значение из поля только первой сверху строки.

Выглядит это так:
{assign var="t" value=""} {foreach from=$Принятые решения name=foo item=subtable name=Принятые решения} {assign var="t" value="`$t+1`"} {if $t eq '1'} {$Принятые решения.Решение} {/if} {/foreach}

И все прекрасно работает.

Однако мне понадобилось усложнить шаблон печати. Сделать так, чтобы, к примеру, при значении "Нет" отображалось бы "1", а при значении "Да" - "2". Казалось бы - что тут сложного?

Используем {if (бла бла) == 'Нет'}1{elseif (бла бла) == 'Да'}2{/if}, где вместо "бла бла" вышеуказанное вычисление.

Но вот беда - не срабатывает "бла бла"!!! :) Ни с такими скобками (), ни с такими {}, ни без.

Пишет Unexpected "{foreach"

Не могли бы сотрудники многоуважаемого КБ подсказать, где собака порылась? Возможно есть другие варианты решения вопроса?

Заранее спасибо,

Крокус

#2 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 17 Декабрь 2015 - 09:43

А что за "бла бла" то? Если это переменная, то синтаксис такой: {if $my_var == 'Нет'}1{elseif $my_var == 'Да'}2{/if}. Впрочем, у вас же выше есть корректный пример, непонятно почему вы тут споткнулись.

Подробности тут.

#3 Krokus

    Участник

  • Пользователи
  • PipPip
  • 12 сообщений
  • Пол:Мужчина
  • Город:Tallinn

Отправлено 17 Декабрь 2015 - 22:37

Мне казалось, что ТАК должно срабатывать, но не срабатывает:

{if ({assign var="t" value=""} {foreach from=$Принятые решения name=foo item=subtable name=Принятые решения} {assign var="t" value="`$t+1`"} {if $t eq '1'} {$Принятые решения.Решение} {/if} {/foreach}) == 'Нет'}1
{elseif ({assign var="t" value=""} {foreach from=$Принятые решения name=foo item=subtable name=Принятые решения} {assign var="t" value="`$t+1`"} {if $t eq '1'} {$Принятые решения.Решение} {/if} {/foreach}) == 'Да'}2
{/if}

#4 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 18 Декабрь 2015 - 09:26

У вас полная бессмыслица с точки зрения программирования. Я конечно понимаю, что вы хотели, но указанная конструкция не возвращает никаких значений, она только выводит переменную на экран, а для сравнения нужен именно результат. Следовательно, что тут нужно было сделать: 1) в изначальной конструкции, которую вам дали, вывод на печать заменить присвоением в переменную (через тот же assign например) 2) затем, в вашей конструкции с if для сравнения использовать уже переменную, как я в предыдущем сообщении описал.

#5 Krokus

    Участник

  • Пользователи
  • PipPip
  • 12 сообщений
  • Пол:Мужчина
  • Город:Tallinn

Отправлено 19 Декабрь 2015 - 23:53

Ясно.

Спасибо.

#6 Krokus

    Участник

  • Пользователи
  • PipPip
  • 12 сообщений
  • Пол:Мужчина
  • Город:Tallinn

Отправлено 21 Декабрь 2015 - 04:22

Вот решение. Может кому пригодится:

{assign var="r" value=""}{assign var="t" value=""} {foreach from="{$Информация}" name="Информация" item=subtable} {assign var="t" value="`$t+1`"} {if $t eq '1'} {assign var="r" value="{$Информация.Принятые решения}"} {/if} {/foreach}
{if $r == 'Да'}Выводим ДА{elseif $r == 'Нет'}Выводим НЕТ{/if}





Количество пользователей, читающих эту тему: 2

0 пользователей, 2 гостей, 0 анонимных