【问题标题】:Option list in SmartySmarty 中的选项列表
【发布时间】: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} &lt;option&gt;{$FROM[from].From}&lt;/option&gt; {/section} 您应该改为:{foreach from=$FROM item=fromItem}&lt;option&gt;{$fromItem}&lt;/option&gt;{/foreach} 另外我认为您需要重新考虑 FROM 作为命名值,它有点模糊。如果您正在处理翻译,您是否考虑过 inputLanguage 或类似的东西,更清楚您打算将其用于什么。
  • 好了,现在更清楚了,但是“item=fromItem”部分应该怎么设置呢?谢谢你的建议,真的!为什么我不把它命名为“inputLanguage”听起来容易多了! ))
  • 标签: smarty option


    【解决方案1】:

    您的代码只有一个问题。如果您将error_reporting 设置为E_ALL,您就会知道这一点。

    使用这条线:

    $smarty->assign("FROM", "$result");
    

    您将 $result 数组转换为字符串,如果 error_reporting 设置正确,您将收到通知:Notice: Array to string conversion in ...

    所以把这行改成:

    $smarty->assign("FROM", $result);
    

    只需删除引号。

    您还应该使用PDOmysqli,因为mysql 已弃用。

    值得使用模板吗?在我看来 - 是的。它们使您将逻辑与显示数据分开。您首先获取数据并准备它们以进行显示,然后再显示它。当然,您也可以在纯 PHP 中执行此操作,但 Smarty 语法(或其他模板语法)使视图更容易浏览或更改。但是你需要学习模板语法、设置等,通常不是那么明显。

    【讨论】:

    • 感谢您的回复,我按照您的解释做了,但现在我有一个列表,其中每个选项都命名为“Array”,我使用了 {debug} 并得到了这个 $inputLanguage Smarty_Variable 对象(3) ->value = Array (6) 0 => Array (1) From => "Adygha (Kabardian)" 1 => Array (1) From => "Arabic" 2 => Array (1) From => "English" 3 => Array (1) From => "German" 4 => Array (1) From => "Russian" 5 => Array (1) From => "Turkish" ->nocache = false ->scope = "file:index.tpl" 而不是语言,我得到的是 "Array" "Array" "Array"
    • 好的,我通过了))谢谢先生,在关注您的帖子后,我将模板顺序从 {foreach from=$inputLanguage item=fromItem} {/ foreach} 带回了语言本身,“英语”“俄语”......非常感谢你))如果我遇到其他问题,我需要你的支持)))
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签