Есть массив, где key="слова заменяемые на" item="другие слова" У меня получалось вывести только последнию итерацию, поэтому я добавил условие, что в первой итерации берется исходная строка, а следующие итерации уже работают с измененной, чтобы поменять другие совпадение. Но так не работает
<h2 class="js-replace-words">
{assign var=arrReplace value=['Салфетки влажные'=>'штуки','что-то'=>'еще']}
{foreach from=$arrReplace key=o item=n}
{if $smarty.foreach.arrReplace.first}
{assign var=str value=$prodnameTruncate[0]}
{else}
{assign var=str value=$str}
{/if}
{assign var=newstr value=$str|replace:$o:$n}
{/foreach}
{$newstr}
</h2>
На js код который должен полуится в итоге, выглядит так:
for (var i=0; i < arrReplace.length; i++){
var str = $('h2').text();
var newstr = str.split(array[i].o).join(array[i].n);
$('h2').text(newstr);
};
там 2 ошибки. логическая: {assign var=str value=$str} и синтаксическая: не добавил "name" для foreach. Вот так выглядит рабочий код:
{foreach from=$arrReplace key=o item=n name=arrReplace}
{if $smarty.foreach.arrReplace.first}
{assign var=str value=$prodnameTruncate[0]}
{else}
{assign var=str value=$newstr}
{/if}
{assign var=newstr value=$str|replace:$o:$n}
{/foreach}
функция str_replace
в пхп может принимать не только строки в качестве параметров замены, но и массивы.
не знаю на сколько целесообразно проводить саму замену в шаблоне, и может имеет смысл вынести это в слой бизнес-логики.
В дополнение к ответу @Eugen Gedroyc замечу, что переход на smarty3 позволит вам писать код куда более наглядно и понятно, и приведенный код будет выглядеть так:
{$arrReplace = ['Салфетки влажные'=>'штуки','что-то'=>'еще']}
{foreach $arrReplace as $o => $n}
{if $n@first}
{$str = $prodnameTruncate[0]}
{else}
{$str = $newstr}
{/if}
{$newstr = $str|replace:$o:$n}
{/foreach}
{$newstr}
в целом, если перед циклом установить начальное значение переменной, то проверки номера итераций тоже не нужны
{$arrReplace = ['Салфетки влажные'=>'штуки','что-то'=>'еще']}
{$str = $prodnameTruncate[0]}
{foreach $arrReplace as $o => $n}
{$str = $str|replace:$o:$n}
{/foreach}
{$str}
ну и в заключение, просто передав массивы замены в функцию все можно свести к
{$arrReplace = ['Салфетки влажные'=>'штуки','что-то'=>'еще']}
{$keys = $arrReplace|array_keys}
{$values = $arrReplace|array_values}
{$prodnameTruncate[0]|replace:$keys:$values}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Нормально подключился к приложению через yandex-php-library, могу создавать каталоги, файлы и тд
Visual StudioВ настройках example добавил в каталоги библиотек vc++ python/include, python/libs, корень boost_{version}, boost/stage/lib, где скомпилированные boost_ dll-ки, при этом...
При помощи этого кода числа выводятся в обратном порядке, что изменить в коде, чтобы они выводились в прямом порядке?