How to access key and value of an array in smarty template?

38,187

Solution 1

Use key in your foreach:

{foreach from=$enquiries_labels item=label key=key}
          <option value="{$key}" {if $data.key == $key} selected="selected" {/if}>{$label}
          </option>
{/foreach}

It's all there in the documentation.

Solution 2

Smarty 3 foreach construction is like this

{foreach $products as $p}
    {$p@key}: {$p}
{/foreach}

Solution 3

Use the key attribute.

{foreach from=$enquiries_labels item="label" key="key"}
    <option value="{$key}"{if $data.key == $key} selected="selected"{/if}>{$label}</option>
{/foreach}

Solution 4

this also works

{foreach $products as $product}
    key: {$product@key} -> value: {$product@value} 
{/foreach}

{$product@value} = {$product}
Share:
38,187
PHPLover
Author by

PHPLover

Updated on July 05, 2022

Comments

  • PHPLover
    PHPLover almost 2 years

    I'm assigning an array named $enquiries_labels from php file to a smarty template file. If I print the array in PHP file it's output is as follows:

    Array
    (
        [0] => New Enquiry
        [1] => Retail Enquiry
        [2] => Feedback
        [3] => Payment Query
        [4] => Package Query
        [5] => Test Query
    )
    

    Now after assigning this array to a smarty file I want to access these values in a select HTML control. For it I need to use foreach loop construct of smarty template engine. If a pre-selected value is matching with the key from array then I'll keep that value selected. For achieving this I tried below code, but it didn't work for me. Can anyone help me in this regard please? For your reference I'm putting below the code I tried in smarty template:

    <select name="contact_label" id="contact_label"> 
    {if $enquiries_labels}
                      {foreach from=$enquiries_labels item=label}
                        <option value="{$label.key}" {if $data.key == $label.key} selected="selected" {/if}>{$label.value}
                        </option>
                      {/foreach}
                    {/if}
          </select>
    

    Thanks for spending some of your valuable time in understanding my issue.

  • MaxZoom
    MaxZoom almost 7 years
    This is so much simpler and elegant
  • Paul Spiegel
    Paul Spiegel about 6 years
    Why not {foreach $products as $key => $p} ...?