fenom-template / fenom

Template Engine for PHP. Maintainers wanted!
Other
446 stars 108 forks source link

Как правильно сделать сравнение ? #141

Closed maxisoft-git closed 9 years ago

maxisoft-git commented 9 years ago

Столкнулся с проблемой использования модификатора или функции in для проверки наличия переменной в масиве данных.

вот так работает отлично

{if $var|in:$cfg.org_req} checked{/if}

а вот так не хочет, понимаю что и не должно но очень нужно, ибо описать отдельно 100 перемененных в начале нет смысла

{if 'email'|in:$cfg.org_req} checked{/if}
sleuthhound commented 9 years ago

Так работает же

{set $test = ['test']}
{if 'test'|in:$test} checked{/if}

Аналогично с многомерным массивом

{set $test = ['test' => ['test']]}
{if 'test'|in:$test} checked{/if}
{if 'test'|in:$test.test} checked{/if}

Мы одной версией библиотеки пользуемся? Может из-за разных версий PHP? У меня:

linux-mint Caches # php -v
PHP 5.5.12-2ubuntu4.1 (cli) (built: Oct 29 2014 11:59:49) 
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
    with Zend OPcache v7.0.4-dev, Copyright (c) 1999-2014, by Zend Technologies
maxisoft-git commented 9 years ago

Да одной версий последней с мастер бранча. :)

{if 'test'|in:$cfg.org_ord} checked{/if}

Увы не работает не могу понять почему переменная $cfg передается в шаблон и содержит ассоциатиный массив с данными.

sleuthhound commented 9 years ago

Я обновляю после официального релиза(https://github.com/fenom-template/fenom/tree/2.4.6), не с master ветки.

maxisoft-git commented 9 years ago

Я как бы тоже, просто странная ситуация произошла более ранняя версия которая была до этого работает так как нужно, хотя есть подозрение, на то что глюк с моей стороны из за того что проект весь на cp1251 может быть из за этого ломается strip и не работает сравнение, буду сегодня вечером ковырять тесты.

bzick commented 9 years ago

попробуйте оператор присутствия https://github.com/fenom-template/fenom/blob/master/docs/ru/operators.md#Оператор-присутсвия

$cfg.org_ord - строка или массив?

maxisoft-git commented 9 years ago

Оператор присутствия тоже не сработал, в $cfg.org_ord находится массив

bzick commented 9 years ago

из контекста не ясно, $var - у вас массив ?

maxisoft-git commented 9 years ago

прошу прощение что запутанно описал вопрос. Суть в следующем если в шаблон передать переменную $var и над ней сделать поиск в массиве, через модификатор или опреатором все будет работать, у меня возникла проблема при другой записи а именно

{if 'name'|in:$cfg.org_ord}

переменная $cfg является ассоциативным массимов, а org_ord просто массив ('0'=>'name','1'=>'phone'....)

bzick commented 9 years ago

Как я понял из сообщения

{if $var|in:$cfg.org_ord} работает
{if 'name'|in:$cfg.org_ord} НЕ работает

? Пытался воссоздать багу в тестах, пока не выходит. Нужно больше разъяснений от Вас (рабочий варинат кода шаблона и тот который падает) или падающий пример.

bzick commented 9 years ago

Максимум что удалось выжать это PHP warning при {if []|in:$list}

maxisoft-git commented 9 years ago

готовлю примеры по двум багам, причем они в большей степени странные, думал из за OS и кодировки файлов, а нет на ноуте под WIN таже ерунда.

bzick commented 9 years ago

Можете скинуть пример, как работает и как не работает?

bzick commented 9 years ago

просто фрагмент шаблона

maxisoft-git commented 9 years ago

Вот кусок шаблона

                    <div class="form-group">
                        <div class="row">
                            <div class="col-md-9">E-mail</div>
                            <div class="col-md-3">
                                <input type="checkbox" class="btn-switch" name="ord_req[]"{if 'email'|in:$cfg.org_req} checked{/if} value="email" data-size="small" data-on-color="success" data-off-color="danger" data-on-text="Да" data-off-text="Нет">
                            </div>
                        </div>
                    </div>
                    <div class="form-group">
                        <div class="row">
                            <div class="col-md-9">Адрес доставки</div>
                            <div class="col-md-3">
                                <input type="checkbox" class="btn-switch" name="ord_req[]"{if 'address'|in:$cfg.org_req} checked{/if} value="address" data-size="small" data-on-color="success" data-off-color="danger" data-on-text="Да" data-off-text="Нет">
                            </div>
                        </div>
                    </div>

Если заменить 'address' на заренее инициализированную переменную $address то все сработает. вот переменная с массивом

  $cfg = Array(
        'is_shop'              => 1,
        'is_skip_pay'          => 0,
        'show_vendors'         => 1,
        'show_cats'            => 0,
        'show_subcats'         => 1,
        'show_desc'            => 0,
        'show_full_desc'       => 1,
        'show_thumb'           => 1,
        'show_hit_img'         => 1,
        'show_decimals'        => 0,
        'show_filter'          => 1,
        'show_filter_vendors'  => 1,
        'show_compare'         => 1,
        'compare_prices'       => 1,
        'show_char_grp'        => 1,
        'show_comments'        => 1,
        'show_related'         => 1,
        'related_count'        => 4,
        'img_w'                => 700,
        'img_h'                => 700,
        'thumb_w'              => 220,
        'thumb_h'              => 220,
        'img_sqr'              => 0,
        'thumb_sqr'            => 1,
        'watermark'            => 1,
        'perpage'              => 15,
        'currency'             => 'р .',
        'notify_send'          => 1,
        'notify_send_customer' => 1,
        'notify_email'         => '',
        'qty_mode'             => 'any',
        'subcats_order'        => 'NSLeft',
        'show_cat_chars'       => 1,
        'show_items_nav'       => 1,
        'link_ttl'             => 48,
        'items_orderby'        => 'ordering',
        'items_orderto'        => 'asc',
        'after_cart'           => 'stay',
        'ord_req'              => Array(
            '0' => 'name',
            '1' => 'phone',
            '2' => 'email',
            '3' => 'address',
            '4' => 'org',
            '5' => 'inn',
        ),
        'track_qty'            => 0,
        'ratings'              => 1,
        'discount'             => Array(
            '5000'  => 5,
            '8000'  => 8,
            '15000' => 15
        ),
        'component_enabled'    => 1,
        'show_nested'          => 1,
        'yml'                  => Array(
            'shop_name'    => '',
            'shop_company' => '',
            'shop_url'     => '',
            'base_curr'    => 'RUR ',
            'ldc'          => 150,
            'store'        => 0,
            'pickup'       => 1,
            'delivery'     => 1,
            'curr'         => Array(
                'RUR' => 'CBRF',
                'UAH' => 'CBRF',
                'BYR' => 'CBRF',
                'KZT' => 'CBRF',
                'USD' => 'CBRF'
            )
        ),
        'club_discount'        => 5,
        'percent_pays_point'   => 30,
        'price_post'           => 0,
        'exclude_email'        => array(),
        'excludes_email'       => 1,
        'day_delay_bonus'      => 7
    );