2015-11-24 11 views
5

Muszę uruchomić następującą logikę w szablonach woltów, ale wygląda na to, że nie obsługuje jej. KILKA pomysłów na obejścia?phalcon volt operatory bitowe?

{% for index, p_key in partner_var %} 
<input id="{{ key }}[]" name="{{ key }}[]" value="{{ p_key.id }}" type="checkbox" 
{% if user.p_body & (1 << (p_key.id - 1)) %} 
    checked 
{% endif %}> 
{{ p_key.title }} 

zakończy się błędem błąd skanera przed "(1 < < (p_key.id.

Odpowiedz

3

Jesteś poprawne, Volt nie obsługuje operatory bitowe. Jednym z obejścia jest stworzenie funkcji podczas deklarowania voltService:

$di->setShared('view', function() { 

    $view = new \Phalcon\Mvc\View(); 

    $view->registerEngines(array(
     '.volt' => 'voltService' 
    )); 

    return $view; 
}); 

$di->set('voltService', function ($view, $di) { 
    // ... 

    $volt = new Phalcon\Mvc\View\Engine\Volt($view, $di); 
    // ... 

    $compiler = $volt->getCompiler(); 

    $compiler->addFunction('bit_and', function($resolvedArgs, $exprArgs) use ($compiler) { 

     return sprintf(
      '(%s & %s)', 
      $compiler->expression($exprArgs[0]['expr']), 
      $compiler->expression($exprArgs[1]['expr']) 
     ); 

    }); 

    return $volt; 
}); 

użyć jako szablonu funkcji w Volt

{% if bit_and(2, keyword.getFlags()) %} 
    checked="checked" 
{% endif %}