Smarty - {IF} {/ IF}内的条件过多

时间:2013-05-08 14:36:06

标签: php smarty conditional-statements

我遇到了以下问题 - 我需要使用条件{IF} {/ IF}和许多变量,但是当我放入代码时整个网站都变成了空白:

{if $product.id_category_default == 6 || $product.id_category_default == 9 || $product.id_category_default == 10 || $product.id_category_default == 11 || $product.id_category_default == 12 || $product.id_category_default == 13 || $product.id_category_default == 14 || $product.id_category_default == 8 || $product.id_category_default == 60 || $product.id_category_default == 35 || $product.id_category_default == 36 || $product.id_category_default == 37 || $product.id_category_default == 38 || $product.id_category_default == 39 || $product.id_category_default == 40 || $product.id_category_default == 41 || $product.id_category_default == 93 || $product.id_category_default == 31 || $product.id_category_default == 32 || $product.id_category_default == 33 || $product.id_category_default == 34 || $product.id_category_default == 94 || $product.id_category_default == 53 || $product.id_category_default == 54 || $product.id_category_default == 55 || $product.id_category_default == 56 || $product.id_category_default == 57 || $product.id_category_default == 58 || $product.id_category_default == 59 || $product.id_category_default == 95 || $product.id_category_default == 19 || $product.id_category_default == 20 || $product.id_category_default == 24 || $product.id_category_default == 21 || $product.id_category_default == 22 || $product.id_category_default == 23 || $product.id_category_default == 27 || $product.id_category_default == 28 || $product.id_category_default == 29 || $product.id_category_default == 30 || $product.id_category_default == 96 || $product.id_category_default == 97 || $product.id_category_default == 98 || $product.id_category_default == 99 || $product.id_category_default == 100 || $product.id_category_default == 51 || $product.id_category_default == 50 || $product.id_category_default == 52 || $product.id_category_default == 49 || $product.id_category_default == 101 || $product.id_category_default == 102}gardena{/if}
{if $product.id_category_default == 7 || $product.id_category_default == 15 || $product.id_category_default == 16 || $product.id_category_default == 17 || $product.id_category_default == 18 || $product.id_category_default == 61 || $product.id_category_default == 62 || $product.id_category_default == 63 || $product.id_category_default == 64 || $product.id_category_default == 65 || $product.id_category_default == 66 || $product.id_category_default == 67 || $product.id_category_default == 68 || $product.id_category_default == 69 || $product.id_category_default == 70 || $product.id_category_default == 71 || $product.id_category_default == 72 || $product.id_category_default == 73 || $product.id_category_default == 74 || $product.id_category_default == 75 || $product.id_category_default == 76 || $product.id_category_default == 77 || $product.id_category_default == 78 || $product.id_category_default == 79 || $product.id_category_default == 80 || $product.id_category_default == 81 || $product.id_category_default == 82 || $product.id_category_default == 83 || $product.id_category_default == 84 || $product.id_category_default == 85 || $product.id_category_default == 86 || $product.id_category_default == 87 || $product.id_category_default == 88 || $product.id_category_default == 89 || $product.id_category_default == 90 || $product.id_category_default == 91 || $product.id_category_default == 92}beam{/if}

可以由太多变量引起吗?或者也许有办法缩短这段代码?

3 个答案:

答案 0 :(得分:1)

最好将IMHO移动到控制器中并在那里构建一个displayproducts数组,然后使用

{if $displayproducts.gardena}gardena{/if}

Smarty模板有时会被网页设计师阅读..

答案 1 :(得分:0)

即使这不会导致错误,无论是在控制器还是视图中,都会出现一长串的幻数"像这样应该立即成为一个糟糕的代码气味"。任何阅读代码的人(包括你!)都不知道这个列表的来源或实际含义,何时添加或删除项目,代码中的其他地方需要保持同步等等。 / p>

你需要问问自己这个ID列表实际意味着什么,以及为什么这些特定类别以这种方式行事 - 它们可能具有一些共同的属性,应该给它一个描述性的名称,而不管它对前端的影响如何。

如果id_category_default引用数据库表中的某个ID,请向该表添加一列(例如is_gardena),并将其与项目数据一起检索。然后,您可以在Smarty代码中使用简单的if语句,如{if $product.category_is_gardena} ... {/if}

如果在您的应用程序中无法实现,那么至少将此逻辑捕获到一个命名良好且注释完整的函数中,该函数包含一组适当的ID和对什么的解释他们指的是。然后,您可以将其注册为Smarty修改器并使用类似{if $product.id_category_default|is_gardena_category} ... {/if}的内容。

答案 2 :(得分:-1)

使用数组

$validValues = array("6", "7", "9", "15");
if(in_array($product.id_category_default, $validValues))
{
    // Do somthing
}