【发布时间】:2014-11-03 04:11:43
【问题描述】:
使用Smarty模板引擎我很困惑,我想从数据库中检索记录并将它们放入一个选项列表中。
这在 PHP 中很简单
$sqlFrom = "SELECT * FROM howto_lang_From WHERE Activation=1";
$resultFrom = mysql_query($sqlFrom);
echo '<select name="from" class="list" required>';
echo '<option value="">Choose</option>';
while ($lanFrom = mysql_fetch_assoc($resultFrom)) {
echo "<option>$lanFrom[From]</option>";
}
echo '</select>';
但在 Smarty 模板中我不确定,尝试过类似的方法,但无法正常工作
**PHP:**
$sqlFrom = "SELECT * FROM howto_lang_From WHERE Activation=1";
$resultFrom = mysql_query($sqlFrom);
while ($lanfrom = mysql_fetch_assoc($resultFrom)) {
$result[] = $lanfrom;
}
$smarty->assign("FROM", "$result");
**Template:**
<select name="from" class="list" required>
<option value="">Choose</option>
{section name=from loop=$FROM}
<option>{$FROM[from].From}</option>
{/section}
</select>
还有一个问题!! 我是一个普通的 PHP 程序员,看了一眼这个模板引擎,我遇到了很多困惑!那么,创建依赖于 SMARTY 的网站真的值得吗?是不是将 PHP 和 HTML 结合起来更容易和可读的原始方式!?
谢谢。
【问题讨论】:
-
使用 foreach 而不是 section。如果你循环一个对象smarty.net/docsv2/en/language.function.foreach.tpl,那就容易多了
-
关于您的主要问题,我们使用模板的原因是为了确保前后端关注点的分离。您的逻辑不应该(而且很难)放在模板中,而将显示放在逻辑中同样困难。您的前端设计人员不必担心
mysql_fetch_assoc或类似方法来关心您的数据库引擎/设计。 -
我希望得到进一步的解释 )) {foreach from=$myArray item=foo}
- {$foo}
{/foreach} -
而不是您当前的:
{section name=from loop=$FROM} <option>{$FROM[from].From}</option> {/section}您应该改为:{foreach from=$FROM item=fromItem}<option>{$fromItem}</option>{/foreach}另外我认为您需要重新考虑 FROM 作为命名值,它有点模糊。如果您正在处理翻译,您是否考虑过inputLanguage或类似的东西,更清楚您打算将其用于什么。 -
好了,现在更清楚了,但是“item=fromItem”部分应该怎么设置呢?谢谢你的建议,真的!为什么我不把它命名为“inputLanguage”听起来容易多了! ))