Фильтрация элементов веб-приложения Business Catalyst по категориям ВНУТРИ макета сведений об элементе веб-приложения

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

Для дальнейшего пояснения у меня есть Веб-приложение 1 (Области обучения), которое содержит такие элементы, как естествознание, английский язык, математика и т. д. Каждый элемент классифицируется с использованием BC: естествознание, английский язык, математика и т. д.

У меня также есть Веб-приложение 2 (ресурсы), которое будет содержать широкий спектр учебных материалов. Каждый элемент также будет классифицирован с использованием категорий BC.

Я хочу отображать элементы из Веб-приложения 2 в макете сведений Веб-приложения 1 в соответствии с классификацией категорий "текущего" элемента Веб-приложения 1.

BC по умолчанию позволяет вам выводить список элементов веб-приложения в соответствии с идентификатором категории, например

{module_webapps id="Web App 2 ID" filter="classified" itemId="Category ID"}

Это не сработает, потому что я собираюсь разместить это внутри подробного макета веб-приложения 1, поэтому идентификатор категории должен меняться в зависимости от того, на каком элементе веб-приложения 1 мы находимся.

Например, на странице «Наука» (элемент веб-приложения 1, классифицированный как «Наука») будут отображаться элементы веб-приложения 2, которые были классифицированы как «Наука», на странице английского языка (элемент веб-приложения 1, классифицированный как английский) будут отображаться элементы веб-приложения 2, которые были классифицированы как английский язык, и так далее для каждой из различных областей обучения.

Есть ли способ сделать это? Я надеялся, что может быть доступен {tag_categoryId}, чтобы я мог сделать что-то вроде:

{module_webapps id="Web App 2 ID" filter="classified" itemId="{tag_categoryId}"}

но есть только {tag_classifications}, который выводит название категории, а НЕ идентификатор, который требуется.

Возможно, есть какой-то способ сделать это с помощью Liquid?


person Luke    schedule 22.09.2015    source источник


Ответы (1)


Оказывается, это возможно с помощью разметки BC Liquid.

Это немного обходной путь, но он не сложный и работает.

Мое решение требует:

  • тег {{classifications}} (устаревший синтаксис {tag_classifications}), доступный внутри макета сведений о веб-приложении.
  • {module_categorylist} (в окружении тегов <select> по умолчанию выводится раскрывающийся список каждой категории на веб-сайте)

Вы можете отключить рендеринг {module_categorylist} по умолчанию, используя template="", и можете назначить данные коллекции, к которой можно получить доступ с помощью Liquid:

{module_categorylist collection="gttCategories" render="collection" template=""}

Итак, мое решение выглядит следующим образом: (Следующий код вставляется в подробный макет веб-приложения 1.)

{module_categorylist collection="myCategories" render="collection" template=""}

{% for item in myCategories.items -%}

    {% if item.name == {{this.classifications}} -%}

        {module_webapps id="Web App 2 ID" filter="classified" itemId="{{item.id}}"}

    {% endif -%}

{% endfor -%}

Оператор FOR перебирает список категорий, выведенных в коллекции myCategories из файла {module_categorylist}.

Оператор IF просматривает имя каждого элемента категории в списке и сравнивает его с {{classifications}}. ({{classifications}} выводит название категории «текущего» элемента веб-приложения 1.)

Для каждого совпадения он отображает модуль Web App 2 с идентификатором этой категории, вставленным в параметр itemId.

person Luke    schedule 22.09.2015