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


smarty: модификатор truncate внутри {assign}


  • Вы не можете ответить в тему
Сообщений в теме: 6

#1 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 27 February 2013 - 12:05 PM

А есть ли возможность применить truncate не только в документально описанном виде {$xxx|truncate:20}, но и внутри блока assign, т.е. примерно так:
{assign var=aaa value="тут некий текст `$xxx|tuncate:20` и тут тоже"}
или, в минимуме,
{assign var=aaa value=`$xxx|tuncate:20`}
Т.е. с подстановкой $xxx, обрезанного по заданным трункейтом параметрам.
`$xxx|truncate:20` не работает.

Как я понимаю, модификатор применяется именно к переменной, т.е. должен работать в любом месте смарти-кода, вопрос только в правильности синтаксиса. Или я не правильно понимаю?
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#2 ruter

    Продвинутый пользователь

  • VIP
  • 334 сообщений
Репутация: 151
Мастер

Отправлено 27 February 2013 - 07:32 PM

А есть ли возможность применить truncate не только в документально описанном виде {$xxx|truncate:20}, но и внутри блока assign, т.е. примерно так:
{assign var=aaa value="тут некий текст `$xxx|tuncate:20` и тут тоже"}


Вот этот вариант сработал у меня: {assign var=aaa value="тут некий текст `$aab|truncate:20` и тут тоже"}
$aab содержало текст: Лучшие автомобили для Вас доступны прямо сегодня
Вывело так: тут некий текст Лучшие автомобили... и тут тоже

надо писать truncate, а не tuncate - опечатка

да и еще для обрезки кирилицы лучше использовать функцию на php с использованием мультибайтной кодировки mb_
  • 0

#3 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 27 February 2013 - 10:41 PM

надо писать truncate, а не tuncate - опечатка

Я от руки набивал, просто для понимания, вкралась опечатка. В правильном виде тоже не работает :).

Вот это штатная строка из ShopCMS-ного product_brief.tpl.html

{assign var="tlink" value="<a href="product_`$product_info.productID`.html">`$product_info.name`</a>"}

а это с добавлением truncate и она выдает `Array.name|truncate:20` вместо обрезанной строки с названием товара

{assign var="tlink" value="<a href="product_`$product_info.productID`.html">`$product_info.name|truncate:20`</a>"}

и даже если я упрощаю до

{assign var="tlink" value="xxx`$product_info.name|truncate:20`xxx"}

то все равно получаю xxx`Array.name|truncate:20`xxx

Может, оно работает в более поздней версии smarty, чем штатно в ShopCMS?

PS. Сейчас строки взяты именно копированием, т.е. точные.

да и еще для обрезки кирилицы лучше использовать функцию на php с использованием мультибайтной кодировки mb_

Еще удобнее создать свой модификатор mb_truncate (см. http://www.guyrutenb...ty-mb_truncate/), но в штатном ShopCMS, как мне кажется, это излишне.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#4 R.Sergey

    Администратор

  • Администраторы
  • 2810 сообщений
Репутация: 332
Мастер

Отправлено 28 February 2013 - 01:17 AM

или, в минимуме, {assign var=aaa value=`$xxx|truncate:20`}


Заработает если уберешь обратные кавычки.
Но вот чтобы туда еще ссылку прилепить не знаю как, если добавляешь произвольный текст придется ставить обратные кавычки чтобы выводилось значение переменной, а поставишь кавычки перестанет работать truncate <_<

В общем лично я бы сделал так
{assign var="name" value=$product_info.name|truncate:20}
{assign var="tlink" value="<a href="product_`$product_info.productID`.html">`$name`</a>"}
{$tlink}

  • 1

#5 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 28 February 2013 - 01:22 AM

В общем лично я бы сделал так

Ага, я примерно такой ход и предполагал, спрашивая про "в минимуме". Только не догадался обратные кавычки убрать. Не сообразил, что они нужны только когда переменная находится внутри текста. Хотя это-то как раз описано в доке.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#6 ruter

    Продвинутый пользователь

  • VIP
  • 334 сообщений
Репутация: 151
Мастер

Отправлено 28 February 2013 - 09:42 AM

или, в минимуме, {assign var=aaa value=`$xxx|truncate:20`}

Заработает если уберешь обратные кавычки. Но вот чтобы туда еще ссылку прилепить не знаю как, если добавляешь произвольный текст придется ставить обратные кавычки чтобы выводилось значение переменной, а поставишь кавычки перестанет работать truncate <_< В общем лично я бы сделал так
{assign var="name" value=$product_info.name|truncate:20} {assign var="tlink" value="<A href="product_`$product_info.productID`.html">`$name`</A>"} {$tlink}



Да, я смотрел в версии Smarty 3. Но не думаю, что с этим что-то изменилось. Если не получается в одной строке кода, всегда можно решить в таком варианте, как 'R.Sergey' написал Я предполагал такой вариант, но всегда хочется с минимумом кода:)) но не всегда сразу получается
  • 0

#7 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 04 March 2013 - 06:56 PM

Я нашел таки жирную (и вполне подробную) точку в этом вопросе :).
http://www.smarty.ne...ntax.quotes.tpl
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)