我正在使用Opencart,我有一个非常有用的插件,来自旧版本的php。我注意到那枝条并不难,我试图将PHP代码转换成树枝。简单的ifs / for循环/回声很容易,但原作者使用动态创建的变量名。
当动态部分仅来自一个变量时,我看到了使用attribute和_context的示例。但是当变量名由2个,3个或更多变量部分组成时会发生什么?
这是一个实际的例子(还有更多这样的例子)
${'var_' . $extension['name'] . '_' . $geo_zone['geo_zone_id'] . '_' . $customer_group['customer_group_id'] . '_order_total_sort_order'};
这是可以实现的,还是一种与树枝完全不相容的思维方式?
编辑: 我理解我们如何使用动态创建的变量的值。但是,有可能在不了解各种组件的情况下对其进行初始化吗?或者检查这样的变量是否存在?在我的特定情况下,变量由用户定义的字段创建,然后自由使用,也通过if检查。
<select name="var_<?= $geo_zone['geo_zone_id']; ?>_<?= $group['group_id']; ?>_tax_class_id">
<option value="0" <?php if(${'var_' . $geo_zone['geo_zone_id'] . '_' . $group['group_id'] . '_tax_class_id'} == 0){ echo 'selected'; } ?>><?= $text_none; ?></option>
</select>
老实说,我不知道如何将它变成树枝。
答案 0 :(得分:1)
你只是把它们全部联系起来?
{% set long_variable_name_here = 'foo' %}
{% set long = 'long' %}
{% set variable = 'variable' %}
{% set name = 'name' %}
{% set here = 'here' %}
{{ attribute(_context, long~'_'~variable~'_'~name~'_'~here) }}
{% set var_1_1_tax_class_id = 0 %}
<select name="var_{{ geo_zone['geo_zone_id'] | default(1) }}_{{ group['group_id']|default(1) }}_tax_class_id">
<option value="0"{{ attribute(_context, 'var_'~geo_zone['geo_zone_id']|default(1)~'_'~group['group_id']|default(1)~'_tax_class_id') | default(-1) == 0 ? ' checked' }}>{{ text_none | default('text') }}</option>
</select>