0

我遇到了以下问题 - 我需要使用带有许多变量的条件 {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}

会不会是变量太多造成的?或者也许有办法缩短这段代码?

4

3 回答 3

1

恕我直言,最好将逻辑移动到控制器中并在那里构建一个 displayproducts 数组,然后使用

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

Smarty 模板有时是为了让网页设计师阅读..

于 2013-05-08T14:44:43.670 回答
0

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

您需要问自己这个 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}.

于 2013-05-09T18:48:46.893 回答
-1

使用数组

$validValues = array("6", "7", "9", "15");
if(in_array($product.id_category_default, $validValues))
{
    // Do somthing
}
于 2013-05-08T14:45:38.947 回答