如果变量包含数组中的值,如何在变量周围添加 HTML 标签,如果它不在 Smarty 中,如何保持原样?
How to add HTML tags around a variable if it contains a value from an array, and leave it as it is if it doesn't in Smarty?
在 Smarty 中,我有这个变量:
{assign var=newNAME value='SNMS Stros Mos KOP2 APC'}
我有以下数组:
{$spec_array = ['Stros Mos', 'Monk Dup', 'Lip Mok']}
我需要检查 $newNAME
中的 'Stros Mos' 是否在数组中。在我搜索“如何检查字符串是否包含数组中的值”时,我发现您可以遍历数组。在这种情况下,条件是:“如果该值包含在数组中,则在其周围添加 <i></i>
,否则保持原样”。这是我想出的:
{foreach from=$spec_array item=spec}
{if $newNAME|strpos:$spec}
<span class="thumbName">{$newNAME|replace:$spec:"<i>$spec</i>" nofilter}</span>
{else}
<span class="thumbName">{$newNAME}</span>
{/if}
{/foreach}
问题是它输出了 3 <span>
,这样:
SNMS <i>Stros Mos</i> KOP2 APC
SNMS Stros Mos KOP2 APC
SNMS Stros Mos KOP2 APC
我明白为什么:这是因为数组中的项目正在循环,如果满足条件 - 在值周围添加斜体,如果不按原样打印。因为数组中有 3 个值,所以我得到 3 个输出。我只需要第一个输出。 $newNAME
可以是任何东西,有时它不会包含 $spec_array
中的任何值。我觉得这里的 foreach 循环不起作用。我知道这是一个逻辑问题而不是编码问题,但我在 PHP 和 Smarty 方面真的很新,而且我不是一个伟大的思想家。任何帮助表示赞赏。
您需要使用新变量并在找到匹配项时中断循环。此外,条件 $newNAME|strpos:$spec !== false
更好(如果允许在文本的“0”位置搜索字符串)。
{foreach $spec_array as $spec}
{if $newNAME|strpos:$spec !== false}
{assign var=newNAME_parsed value=$newNAME|replace:$spec:"<i>$spec</i>"}
{break}
{else}
{assign var=newNAME_parsed value=$newNAME}
{/if}
{/foreach}
<span class="thumbName">{$newNAME_parsed nofilter}</span>
在 Smarty 中,我有这个变量:
{assign var=newNAME value='SNMS Stros Mos KOP2 APC'}
我有以下数组:
{$spec_array = ['Stros Mos', 'Monk Dup', 'Lip Mok']}
我需要检查 $newNAME
中的 'Stros Mos' 是否在数组中。在我搜索“如何检查字符串是否包含数组中的值”时,我发现您可以遍历数组。在这种情况下,条件是:“如果该值包含在数组中,则在其周围添加 <i></i>
,否则保持原样”。这是我想出的:
{foreach from=$spec_array item=spec}
{if $newNAME|strpos:$spec}
<span class="thumbName">{$newNAME|replace:$spec:"<i>$spec</i>" nofilter}</span>
{else}
<span class="thumbName">{$newNAME}</span>
{/if}
{/foreach}
问题是它输出了 3 <span>
,这样:
SNMS <i>Stros Mos</i> KOP2 APC
SNMS Stros Mos KOP2 APC
SNMS Stros Mos KOP2 APC
我明白为什么:这是因为数组中的项目正在循环,如果满足条件 - 在值周围添加斜体,如果不按原样打印。因为数组中有 3 个值,所以我得到 3 个输出。我只需要第一个输出。 $newNAME
可以是任何东西,有时它不会包含 $spec_array
中的任何值。我觉得这里的 foreach 循环不起作用。我知道这是一个逻辑问题而不是编码问题,但我在 PHP 和 Smarty 方面真的很新,而且我不是一个伟大的思想家。任何帮助表示赞赏。
您需要使用新变量并在找到匹配项时中断循环。此外,条件 $newNAME|strpos:$spec !== false
更好(如果允许在文本的“0”位置搜索字符串)。
{foreach $spec_array as $spec}
{if $newNAME|strpos:$spec !== false}
{assign var=newNAME_parsed value=$newNAME|replace:$spec:"<i>$spec</i>"}
{break}
{else}
{assign var=newNAME_parsed value=$newNAME}
{/if}
{/foreach}
<span class="thumbName">{$newNAME_parsed nofilter}</span>