Prestashop заставит целое число взорваться в smarty

Я делаю небольшой модуль в prestashop. В этом я взял базу данных (ps_customer_module), как это

id image_id customer_name 
1  2        john
2  23       simon
3  45       doe
4  9        rocky

Теперь я извлекаю всю базу данных из модуля

$get_users = 'SELECT * FROM '._DB_PREFIX_.'customer_module;
$users = Db::getInstance()->ExecuteS( $get_users );

здесь, когда я делаю print_r($users). Я получаю такой результат

Array
(
    [0] => Array
        (
            [id] => 1
            [image_id] => 2
            [customer_name] => john
        )

    [1] => Array
        (
            [id] => 2
            [image_id] => 23
            [customer_name] => simon
        )
    [2] => Array
        (
            [id] => 3
            [image_id] => 45
            [customer_name] => doe
        )
    [3] => Array
        (
            [id] => 4
            [image_id] => 9
            [customer_name] => rocky
        )              

)

Теперь я назначил массив смарт-шаблону следующим образом.

$this->context->smarty->assign( 'users', $users );

и я показываю весь результат в списке с циклом foreach, подобным этому

<ul>
    {foreach from=$users item=row}
    <li>
        <h3>{$row.customer_name}</h3>
        <img src="img/{$row.image_id}/{$row.image_id}.jpg" alt="">
    </li>
    {/foreach}
</ul>

выше метод отлично работает с изображением с одним номером image_id. Допустим, image_id 1, так что там все работает нормально. Но если идентификатор изображения равен 45, то он работает как

<img src="img/45/45.jpg" alt="">

но фактический каталог изображений выглядит так

<img src="img/4/5/45.jpg" alt="">

так может кто-нибудь любезно сказать мне, как взорвать image_id, когда будет image_id с двумя цифрами, и разделить их с помощью / (косая черта). Надеюсь, вы поняли мою точку зрения. Любая помощь будет действительно ценна. Спасибо


person NewUser    schedule 18.08.2014    source источник


Ответы (1)


Вам нужно использовать функции PHP str_split и implode в качестве модификаторов (конечно, вы можете сделать то же самое в PHP, если хотите). Я создал образец сценария для этого.

PHP-файл:

$users = Array
(
    0 => Array
    (
        'image_id' => 2

    ),
    1 => Array
    (
        'image_id' => 45

    ),
    2 => Array
    (
        'image_id' => 101

    ),
    3 => Array
    (
        'image_id' => 2012

    ),

);

$smarty->assign('users',$users);

Умный шаблон:

{foreach from=$users item=row}
    img/{$row.image_id|str_split|implode:'/'}/{$row.image_id}.jpg<br />
{/foreach}

Выход:

img/2/2.jpg
img/4/5/45.jpg
img/1/0/1/101.jpg
img/2/0/1/2/2012.jpg

PS. Вы должны предоставлять свои данные PHP в вопросах, не используя var_dump, а используя var_export, чтобы их можно было легко вставить без изменений.

person Marcin Nabiałek    schedule 18.08.2014