【问题标题】:PHP MYSQL TWIG Dropdown Menu CreationPHP MYSQL TWIG 下拉菜单创建
【发布时间】:2014-05-23 19:59:59
【问题描述】:

我是 twig 新手,但对 php 和 mysql 有一定的了解。我想要做的应该很简单,但我无法弄清楚。

我正在尝试使用 php 和 twig 为模板引擎简单地创建一个 mysql 驱动的下拉菜单。

我有单独的 PHP 和 twig 模板文件,但我无法弄清楚它们应该如何组合在一起。 PHP 目前做了所有聪明的事情,并在页面底部回显 $template->render(array (...etc )。

谁能提供一个例子,说明如何在html中使用php、mysql和twig渲染形成一个简单的下拉菜单?

谢谢

编辑-> 好的,我有:

// get list of years we have data for
$stmt = getvisithistoryyear($db);
$years = $stmt->fetchAll();


echo "<select name=\"pcid\">"; 
echo "<option size =30 ></option>";
foreach ($years as $year){
echo "<option value='".$year['year']."'>".$year['year']."</option>";
}
echo "</select>";

在我的显示下拉列表的 php 文件中,但不是我单独的树枝模板的一部分。我不知道该怎么做是在树枝模板中显示它,抱歉含糊不清但我不知道该怎么做,所以很难解释!

上面的函数只返回一个年份列表,即 2013、2012、2011 年,我想在下拉列表中显示这些年份,以便用户选择他们想要选择的年份。

在我目前拥有的模板中:

<table class="flexitable">
{% for y in years %}
<tr>
<td><a href="visitarchive.php?year={{y.year}}">{{y.year|escape}}</a></td>
</tr>
{% endfor %}
</table>

显示一长串年份,我只想将其格式化为下拉列表

设置我使用的树枝模板: // 包含并注册 Twig 自动加载器 包括'../Twig/Autoloader.php'; Twig_Autoloader::register();

// define template directory location
$loader = new Twig_Loader_Filesystem('../templates');

// initialize Twig environment
$twig = new Twig_Environment($loader);

// load template
$template = $twig->loadTemplate('dashboard/visitarchive.tmpl');

为了渲染树枝,我在底部的 php 中调用了以下代码

// set template variables
// render template
echo $template->render(array (
'pageTitle' => 'Visit Archive',
'etc' => 'etc'));

【问题讨论】:

  • 请edit 输入您尝试过的代码的问题。如果我们能看到你的所作所为,对我们来说就容易多了!
  • 你的项目中做过模板渲染吗?可以提供一些关于你所做的事情的来源吗?否则此链接可能会帮助您如何使用树枝模板创建不同的页面devzone.zend.com/1886/…
  • 我做了很多模板渲染,但就是不知道如何使用 php 和 twig 格式化下拉菜单。我不知道 部分是否应该在 Php 或 twig 模板中,或者如果它在 php 中,如何将其呈现到 twig 模板中
  • 感谢来源;还有一件事是您呈现模板的方式

标签: php html mysql drop-down-menu twig


【解决方案1】:

我为 twig 中的数据绑定表单控件制作了一些有用的宏。

您可以将它们放入 html 或 twig 文件中。

我将它们放在我命名为“forms_helpers.html”的文件中(如果这样做,您需要将 cmets 更改为 html cmets)。

//accepts options as a simple list or range.
/*
    name: control name
    id: control id
    bound_value: the currently selected value
    opt: a range of values e.g. 1..6

*/

{% macro simpleDropdown(name, id, bound_value, opt) %}
    <select class="form-control" id="{{id}}" name="{{name}}">
        {% for a in opt %}
            <option {% if (a == bound_value) %} selected {% endif %} value="{{a}}">{{a}}</option>
        {% endfor %}
    </select>
{% endmacro %}

//accepts options as an associative array.
/*
    name: control name
    id: control id
    bound_value: the currently selected value
    options_array: the associative array that provides the options. e.g. a list of inventory items from a database
    text_field: the field name in the collection that will provide the option text
    value_field: the field name in the collection that will provide the option value
*/
{% macro arrayDropDown(name, id, bound_value, options_array, text_field, value_field) %}
   <select class="form-control" id="{{id}}" name="{{name}}">
       <option value="0">[SELECT]</option>
        {% for a in options_array %}
            <option {% if (a[value_field] == bound_value) %} selected {% endif %} value="{{a[value_field]}}">{{a[text_field]}}</option>
        {% endfor %}
    </select>
{% endmacro %}

宏的使用方法如下:

{% import "forms_helper.html" as forms %}
<div>
    {{ forms.simpleDropdown("myControlName","myControlId", currentlySelectedValue, 0..10)}}
</div>

如果有人感兴趣,我还有其他几个,但这两个应该可以处理大多数下拉菜单。

【讨论】:

  • 这是一个非常好的答案,我很想看看您创建的其他助手。似乎 twig 应该为这样的助手提供一个 repo,但他们似乎并不太关心非 symfony 的实现。
【解决方案2】:

这是您需要在呈现页面的 php 文件中执行的操作

// fetch all data you need before rendering the template
$stmt = getvisithistoryyear($db);
$years = $stmt->fetchAll();

// define template directory location
$loader = new Twig_Loader_Filesystem('../templates');

// initialize Twig environment
$twig = new Twig_Environment($loader);

// load template
$template = $twig->loadTemplate('dashboard/visitarchive.tmpl');

// as you see I pass the $years to template below
echo $template->render(array (
   'pageTitle' => 'Visit Archive',
   'years' => $years
   'etc' => 'etc'
));

现在您可以将模板更改为

<table class="flexitable">
   <tr>
      <td>Years: </td>
      <td><select name="pcid">
      {% for y in years %}
         <option value="{{ y['year'] }}">{{ y['year'] }}</option>
      {% endfor %}
      </select></td>
{% for y in years %}
</table>

希望对你有帮助

【讨论】:

  • @user3670221 基于您在源代码中提供的内容,我只是将它们混合在一起,向您展示使用 twig 创建表单的方法
  • 谢谢,这帮助很大,几乎就在那里。 getvisithistoryyear 返回一个数组,但模板显示的是一个空的下拉列表并且没有显示年份。我的数组显示: Array ( [0] => Array ( [year] => 2013 ) [1] => Array ( [year] => 2012 ) [2] => Array ( [year] => 2011 ) [3 ] => 数组 ( [year] => 2010 ) [4] => 数组 ( [year] => 2009 ) [5] => 数组 ( [year] => 2008 ) [6] => 数组 ( [year] => 2007 )) 我应该在 部分放什么?将年份放在“”中似乎不起作用
  • 我不知道为什么我的最后一次更改没有提交;应该是&lt;option value="{{ y['year'] }}"&gt;{{ y['year'] }}&lt;/option&gt;;我更新了我的答案;基于您提供的数组,它应该可以工作
  • 非常感谢 Javad,效果很好。非常感谢您的时间和努力帮助我。
  • @user3670221 你也可以选择它来帮助他人
猜你喜欢
  • 1970-01-01
  • 2012-07-20
  • 1970-01-01
  • 1970-01-01
  • 2012-01-20
  • 2012-01-12
  • 2013-12-09
  • 2014-12-04
相关资源
最近更新 更多