Expression Engine — проблема с панировочными сухарями!

Хорошо, я настроил пробную версию хлебных крошек, используя операторы IF segment и IF category_id. Причина в том, что у меня есть разные продукты, связанные с 2-3 категориями и т. д.

Я прошел всю пробную версию, и все работает нормально (хотя много кода!)

Тем не менее, ОДНА категория, с которой у меня возникла большая проблема, я часами пытался ее исправить, но не могу, в основном эта категория находится в 2 родительских и 2 дочерних категориях в одной группе категорий... Все у других есть только один родитель и один ребенок, поэтому мой код работает нормально.

Я пробовал все, но это воспитывает

Игрушки >> Бен 10 >> Дети >> Бен 10

Он повторяет как категории, так и родителей, потому что запись находится в обеих из них в одной группе... Итак, я попытался создать два отдельных оператора if вдали от моего основного оператора if, например:

Мой код:

{if segment_2 == "view"}
    {exp:channel:entries channel="toys"}
    {categories}
    {if parent_id == "25"}
    {if category_id == "31"}
    <li>
    <a href="(URL TO CATEGORY)">Toys</a>
    </li>
    <li>
    <a href="{path='toys/list'}">{category_name}</a>
    </li>
    {/if}
    {/if}
    {/categories}
    {/exp:channel:entries}
{/if}

{if segment_2 == "view"}
    {exp:channel:entries channel="toys"}
    {categories}
    {if parent_id == "26"}
    {if category_id == "40"}
    <li>
    <a href="(URL TO CATEGORY)">Children</a>
    </li>
    <li>
    <a href="{path='toys/list'}">{category_name}</a>
    </li>
    {/if}
    {/if}
    {/categories}
    {/exp:channel:entries}
{/if}

Я бы предположил, что определение конкретного родителя и идентификатора кошки будет отображать только один...

Любые решения?


person John Stant    schedule 08.07.2011    source источник
comment
Я бы порекомендовал выработать привычку делать отступы в коде — это поможет другим понять и прочитать вашу логику, а также обеспечить правильное закрытие всех вложенных тегов.   -  person rjb    schedule 08.07.2011


Ответы (2)


В целях отладки часто бывает полезно понять и «визуализировать» структуру данных, с которыми вы имеете дело.

Чтобы получить представление о категориях, которые вы пытаетесь найти в своих навигационных цепочках , используйте следующий код для вывода parent_id и category_id каждой категории:

{exp:channel:entries channel="toys"}
    {categories}
        <strong>{category_name}</strong> [{parent_id}, {category_id}]<br />
    {/categories}
{/exp:channel:entries}

Это даст вам вывод, например:

Toys [0, 1]       // Parent Category
Children [1, 2]   // Child Category

Вооружившись этой информацией, вы можете изменить свои условные навигационные цепочки, чтобы работать с продуктами, отнесенными к двум или более категориям:

{exp:channel:entries channel="toys"}
    {categories limit="2"}    
        {if parent_id == "0"}
            <!-- Show the Parent Category -->
            <li><a href="{path=toys/list}">{category_name}</a></li>
        {/if}

        {if parent_id != "0"}
            <!-- Show the Child Category -->
            <li><a href="{path=toys/list}">{category_name}</a></li>
        {/if}
    {/categories}
{/exp:channel:entries}
person rjb    schedule 08.07.2011
comment
Привет, спасибо за это, но это все еще не работает. Теперь он сначала выводит дочернюю категорию и по-прежнему отображает только ту же родительскую категорию на странице ben 10. - person John Stant; 08.07.2011

Можете ли вы использовать оператор AND в своих условных предложениях? Что-то вроде {if parent_id == "26" && category_id == "40"}

Просто предположение. Это означает, что вы выполняете одну проверку, и оба условия должны выполняться.

person daveyfaherty    schedule 08.07.2011
comment
Спасибо за помощь, но я попробовал это, он по-прежнему показывает обоих родителей и оба идентификатора, поскольку у меня есть 2 условия if, и запись находится в каждом родителе и каждом идентификаторе... - person John Stant; 08.07.2011
comment
По сути, EE берет первый оператор IF и говорит: «Да, он находится в этом родительском идентификаторе и да, он находится в этом идентификаторе категории». Затем вывод результатов. Затем он перемещает следующий оператор IF и говорит: да, он также находится в этом родительском идентификаторе и да, он находится в этом идентификаторе категории... так что он также выводит это. Мне нужно, чтобы он просто выводил один в зависимости от того, пришел ли пользователь из категории d_ben10 или c_ben10 (оба моих имени идентификатора категории) - person John Stant; 08.07.2011