2012-04-23 20 views
8

tengo una macro ramita para la creación de un elemento de formulario cuadro combinado de esta manera:nombre de la variable variable en ramita

{% macro select(name, label, choices, help, value) %} 
<div class="control-group"> 
    <label class="control-label" for="{{ name }}">{{ label }}</label> 
    <div class="controls"> 
     {% for choice in choices %} 
      {% if value is not empty and value == choice.id %} 
       <option value="{{ choice.id }}" selected="selected">{{ choice.code }} - {{ choice.name }}</option> 
      {% else %} 
       <option value="{{ choice.id }}">{{ choice.name }}</option> 
      {% endif %} 
     {% endfor %} 
     <p class="help-block">{{ help }}</p> 
    </div> 
</div> 
{% endmacro %} 

Como se puede ver, no es muy flexible, ya que sólo puedo utilizar objetos con id y el campo de nombre como el valor de la opción y la etiqueta. Antes de migrar en rama, utilizo esta función PHP:

function form_select($name, $label, $choices, $keycol, $valcol, $value=null, $help=null) 
{ ?> 
<div class="control-group"> 
    <label class="control-label" for="<?php echo $name; ?>"><?php echo $label; ?></label> 
    <div class="controls"> 
     <select name="<?php echo $name; ?>" class="span7" id="<?php echo $name; ?>"> 
      <?php foreach ($choices as $choice) : ?> 
       <option value="<?php echo $choice->$keycol; ?>" <?php if ($choice->$keycol == $value) echo "selected"; ?>> 
        <?php echo $choice->$valcol; ?> 
       </option> 
      <?php endforeach; ?> 
     </select> 
     <p class="help-block"><?php echo $help; ?></p> 
    </div> 
</div> 
<?php } 

Con esta función puedo enviar objetos arbitrarios a la función y utilizarlo como el valor de opción y la etiqueta pasando el nombre del campo a la función ($keycol y $valcol) y acceder a ellos a través de la función de nombre de variable variable de PHP ($choice->$keycol y $choice->$valcol).

¿De todos modos puedo recrear esta función como una macro de rama?

Respuesta

Cuestiones relacionadas