У меня есть пользовательская функция, которая добавляется к объекту Twig следующим образом:
...
add_filter('get_twig', array(get_class(),'add_twig_functions'));
...
public static function add_twig_functions($twig)
{
$twig->addFunction(new Twig_SimpleFunction('get_table', array(get_class(), 'get_table')));
return $twig;
}
...
public static function get_table($cycle, $visible = true, $id = null)
{
....
}
Внутри шаблона ветки я пытаюсь назвать его так:
{{ get_table('mth', user_data.cycle = 'Monthly', 'table-mth') }}
Однако я получаю сообщение об ошибке:
Неустранимая ошибка PHP: необработанное исключение Twig_Error_Syntax с сообщением
‘Имя параметра должно быть строкой, задано «Twig_Node_Expression_GetAttr»
Мой предполагаемый результат заключается в том, что $visible
параметр передается как true, если user_data.cycle
переменная context равна ‘Monthly’, но, очевидно, я делаю это неправильно.
Я также попытался изменить свой вызов на:
{{ get_table('mth', (user_data.cycle = 'Monthly'), 'table-mth') }}
Однако это только дает мне:
Неустранимая ошибка PHP: необработанное исключение Twig_Error_Syntax с сообщением
«Открытая скобка закрыта неправильно. Неожиданный маркер
«operator» of value «=» (ожидается «пунктуация» со значением «)»)
Есть ли ожидаемый способ передачи логического выражения в функцию ветки? Timber на версии 1.1.6, для чего это стоит. Вся документация, которую я смог найти по расширению с помощью функций, находится на http://twig.sensiolabs.org/doc/advanced.html, но на самом деле это не распространяется на параметры.
Ну, это только я не помню, как сравнения в ветке … У меня сложилось впечатление, что =
в Twig был эквивалент PHP ==
, а также ==
в ветке был эквивалент PHP ===
Но я не знаю, откуда у меня такое впечатление, потому что это неправильно.
{{ get_table('mth', (user_data.cycle == 'Monthly'), 'table-mth') }}
работает нормально и как положено. Там идет бессмысленный час поиска неисправностей.
Других решений пока нет …