Получить значение переменной Smarty, имя которой состоит из переменных

0

У меня есть набор массивов переменных php, которые назначаются шаблону SMARTY. Ниже приведена переменная php:

$smarty = new Smarty;
for ($i = 1; $i <= 3; ++$i) {
  ${'field'.$i} = array('group_rank_edit_' . $i, 'some_data'.$i);

  // Assign variable to the template
  $smarty->assign('field'.$i , ${'field'.$i});
}

Таким образом, для шаблона назначено 3 массива. Теперь в шаблоне возникают трудности с извлечением значений. Предположим, что шаблон выглядит следующим образом:

{{for $i=1 to 3}}
  $().ready(function() {
    $("#group-ranks-edit-form").validate({
        rules: {
           {{$field.{{$i}}.0}}: {
                required: true,
            }
        },
     });
});
{{/for}}

Так что один из результатов будет выглядеть так:

$().ready(function() {
    $("#group-ranks-edit-form").validate({
        rules: {
          group_rank_edit_1 : {
                required: true,
            }
        },
     });
});

Очевидно, что следующий формат не приводит к предполагаемому результату:

{{$field.{{$i}}.0}}

Есть идеи? Я использую Smarty 3 BTW.

Очень признателен

Теги:
smarty

1 ответ

2
Лучший ответ

Вы можете хранить свои поля только в одном массиве (PHP) итерации по нему (Smarty) с помощью foreach.

PHP

$smarty = new Smarty;
$f      = [];                // array will contain data of all 3 fields
for ($i = 1; $i <= 3; ++$i)  // fill array with data
{
    $f[$i] = array('group_rank_edit_' . $i, 'some_data'.$i);
}
$smarty->assign('f' , $f);   // assign the array to smarty

всезнайка

{foreach from=$f key=i item=data}
    {literal}
        $().ready(function() {
            $("#group-ranks-edit-form").validate({
                rules:
    {/literal}
                    {$data.0}:
    {literal}
                    {
                        required: true,
                    }
                },
            });
        });
    {/literal}
{/foreach}

Выход, созданный Smarty

$().ready(function() {
    $("#group-ranks-edit-form").validate({
        rules:
            group_rank_edit_1:
            {
                required: true,
            }
        },
    });
});

$().ready(function() {
    $("#group-ranks-edit-form").validate({
        rules:
            group_rank_edit_2:
            {
                required: true,
            }
        },
    });
});

$().ready(function() {
    $("#group-ranks-edit-form").validate({
        rules:
            group_rank_edit_3:
            {
                required: true,
            }
        },
    });
});
  • 0
    Отличное решение ... спасибо Тим

Ещё вопросы

Сообщество Overcoder
Наверх
Меню