Ошибка в тегах - товары

Тема в разделе "Ошибки и их решения", создана пользователем Chukcha, 15 ноя 2020.

  1. Chukcha

    Chukcha Специалист

    Сообщения:
    3.013
    Симпатии:
    685
    Ошибка не явная, но если бы был включен strict режим для твига, то она была бы выявлена давно

    Код:
            {% for i in 0..tags|length %}
            {% if i < (tags|length - 1) %} <a href="{{ tags[i].href }}">{{ tags[i].tag }}</a>,
            {% else %} <a href="{{ tags[i].href }}">{{ tags[i].tag }}</a> {% endif %}
            {% endfor %} </p>
    
    Если есть метки
    но считаются от 0
    а цикл до количества

    в результате

    имеем
    <a href=""></a>

    Элемента нет

    Исправляем

    Код:
            {% for i in 0..(tags|length - 1) %}
            {% if i < (tags|length - 1) %} <a href="{{ tags[i].href }}">{{ tags[i].tag }}</a>,
            {% else %} <a href="{{ tags[i].href }}">{{ tags[i].tag }}</a> {% endif %}
            {% endfor %} </p>
    
     
    Ravilr нравится это.
  2. Chukcha

    Chukcha Специалист

    Сообщения:
    3.013
    Симпатии:
    685
    В продолжение

    бывает

    теги (метки)

    фф, ыы, вв,

    последний элемент пустой

    Код:
                $data['tags'] = array();
    
                if ($product_info['tag']) {
                    $tags = explode(',', $product_info['tag']);
                    foreach ($tags as $tag) {
                        $data['tags'][] = array(
                            'tag'  => trim($tag),
                            'href' => $this->url->link('product/search', 'tag=' . trim($tag))
                        );
                    }
                }
    
    Вижу два решения


    Код:
                $data['tags'] = array();
    
                if ($product_info['tag']) {
                    $tags = explode(',', $product_info['tag']);
                    $tags = array_filter($tags);
                    foreach ($tags as $tag) {
                        $data['tags'][] = array(
                            'tag'  => trim($tag),
                            'href' => $this->url->link('product/search', 'tag=' . trim($tag))
                        );
                    }
                }
    
    
    Код:
                $data['tags'] = array();
    
                if ($product_info['tag']) {
                    $tags = explode(',', $product_info['tag']);
                    $tags = array_filter($tags);
                    foreach ($tags as $tag) {
                        if (trim($tag)) {
                        $data['tags'][] = array(
                            'tag'  => trim($tag),
                            'href' => $this->url->link('product/search', 'tag=' . trim($tag))
                        );
                        }
                    }
                }
    
     
  3. Chukcha

    Chukcha Специалист

    Сообщения:
    3.013
    Симпатии:
    685
  4. Ravilr

    Ravilr Специалист

    Сообщения:
    3.877
    Симпатии:
    1.064
  5. Chukcha

    Chukcha Специалист

    Сообщения:
    3.013
    Симпатии:
    685
  6. Ravilr

    Ravilr Специалист

    Сообщения:
    3.877
    Симпатии:
    1.064
    А почему три, немного не понял?
     
  7. Chukcha

    Chukcha Специалист

    Сообщения:
    3.013
    Симпатии:
    685
    1. ошибка в шаблоне
    2. ошибка - не т фильтрации на пустое значение
    3 не верная проверка на пустой get в контроллере search
     
    Ravilr нравится это.