жидкая разметка бизнес-катализатора для тегов блога

Я использую ресурс blogposts для вывода своих сообщений в блоге и добавил разбиение на страницы для отображения трех сообщений за раз. Это работает так, как предполагается. Но с ресурсом сообщений в блоге я также добавил fields="tag" subresource="tags, чтобы я мог отображать теги, связанные с каждым сообщением в блоге.

Но я не могу вывести эту часть. Это код, который я использовал:

{% if globals.get.limit %}
    {% assign limit = globals.get.limit | convert: "number" %}
{% else %}
    {% assign limit = 3 %}
{% endif %}

{% if globals.get.skip %}
    {% assign skip = globals.get.skip | convert: "number" %}
{% else %}
    {% assign skip = 0 %}
{% endif %}

{% assign resource = "blogposts" fields="tag" subresource="tags"%}

{module_data resource="{{resource}}" version="v3" template="" limit="{{limit}}" skip="{{skip}}" collection="bpost"}

{% assign moduloCheck =  bpost.totalItemsCount | modulo :limit %}

{% if moduloCheck == 0 %}
    {% assign totalPages = bpost.totalItemsCount | divided_by: limit | minus: 1 %}
{% else %}
    {% assign totalPages = bpost.totalItemsCount | divided_by: limit %}
{% endif %}

{% assign currentPage =  globals.get.skip|divided_by:limit %}
<hr />
{% for item in bpost.items %}
    <h2>{{item.postTitle}}</h2>
    <p>{{item.postBody}}</p>
    <p>Skapad&nbsp;<span>{{item.releaseDate | date: "yyyy-MM-dd \ hh:mm:ss tt"}}</span></p>
    <p><a href="{{item.postUrl}}">Kommentera</a></p>
    <br />
    <ul>
        {% for item in bpost.items -%}
            <li><a href="/retreivepostsbytag.html?tagid={{item.tag.id}}"># {{item.tag.tagName}}</a></li>
        {% endfor -%}
    </ul>
    <hr />
{% endfor %}

<span>Sida:
    {% for pageNum in (0..totalPages) %}
        {% if pageNum == currentPage %}
            {{ pageNum | plus: 1 }}
        {% else %}
            <a href="{{ globals.get.id }}?skip={{ pageNum|times:globals.get.limit }}&amp;limit={{ limit }}">{{ pageNum | plus: 1 }}</a>
        {% endif %}
    {% endfor %}
</span>

Вот тестовая страница, на которой я пытаюсь реализовать этот код: testpage

Спасибо, -Сохайл


person user2371684    schedule 24.06.2015    source источник


Ответы (1)


Запрос подресурса для данных тега должен выполняться один раз для каждого сообщения, например:

{% for item in bpost.items %}
    ...

    {module_data resource="blogposts" version="v3" fields="objectId,tagId,objectType,siteId,tag,post" subresource="tags" resourceId="{{ item.id }}" skip="0" limit="10" order="objectType" collection="postTagData"}
    <ul>
        {% for tagMeta in postTagData.items -%}
            <li>
                <a href="/retreivepostsbytag.html?tagid={{ tagMeta.tag.id }}"
                  >{{ tagMeta.tag.tagName }}</a>
            </li>
        {% endfor -%}
    </ul>

    ...
{% endfor %}

Кроме того, ваша переменная resource всегда устанавливалась только в blogposts, другая часть (fields="tag" subresource="tags") отбрасывалась. Я бы изменил это на это, для ясности:

{% assign resource = "blogposts" %}

РЕДАКТИРОВАТЬ: Вот ваш код, измененный, чтобы включить изменения:

{% if globals.get.limit %}
    {% assign limit = globals.get.limit | convert: "number" %}
{% else %}
    {% assign limit = 3 %}
{% endif %}

{% if globals.get.skip %}
    {% assign skip = globals.get.skip | convert: "number" %}
{% else %}
    {% assign skip = 0 %}
{% endif %}

{% assign resource = "blogposts" %} <!-- `fields="tag" subresource="tags"` was being discarded -->

{module_data resource="{{resource}}" version="v3" template="" limit="{{limit}}" skip="{{skip}}" collection="bpost"}

{% assign moduloCheck =  bpost.totalItemsCount | modulo :limit %}

{% if moduloCheck == 0 %}
    {% assign totalPages = bpost.totalItemsCount | divided_by: limit | minus: 1 %}
{% else %}
    {% assign totalPages = bpost.totalItemsCount | divided_by: limit %}
{% endif %}

{% assign currentPage =  globals.get.skip|divided_by:limit %}
<hr />

{% for item in bpost.items %}
    <h2>{{item.postTitle}}</h2>
    <p>{{item.postBody}}</p>
    <p>Skapad&nbsp;<span>{{item.releaseDate | date: "yyyy-MM-dd \ hh:mm:ss tt"}}</span></p>
    <p><a href="{{item.postUrl}}">Kommentera</a></p>
    <br />

    {module_data resource="blogposts" version="v3" fields="objectId,tagId,objectType,siteId,tag,post" subresource="tags" resourceId="{{ item.id }}" skip="0" limit="10" order="objectType" collection="postTagData"}
    <ul>
        {% for tagMeta in postTagData.items -%}
            <li>
                <a href="/retreivepostsbytag.html?tagid={{ tagMeta.tag.id }}"
                    >{{ tagMeta.tag.tagName }}</a>
            </li>
        {% endfor -%}
    </ul>

    <hr />
{% endfor %}

<span>Sida:
    {% for pageNum in (0..totalPages) %}
        {% if pageNum == currentPage %}
            {{ pageNum | plus: 1 }}
        {% else %}
            <a href="{{ globals.get.id }}?skip={{ pageNum|times:globals.get.limit }}&amp;limit={{ limit }}">{{ pageNum | plus: 1 }}</a>
        {% endif %}
    {% endfor %}
</span>
person Robert K. Bell    schedule 28.06.2015
comment
Спасибо, мне интересно одно. Элементы тега ul повторяются три раза для каждого поста в блоге. Это связано с тем, что для bpost коллекции установлено значение 3? Если да, то есть ли способ исправить это, чтобы список тегов зацикливался только один раз для каждого сообщения в блоге? - person user2371684; 29.06.2015
comment
@user2371684 user2371684 вам нужно только один раз перебрать bpost.items, поэтому вы получите ровно столько <ul>, сколько <h2>. - person Robert K. Bell; 29.06.2015
comment
Итак, какую часть кода мне нужно изменить, чтобы добиться этого, поскольку ограничение, установленное для коллекции bpost, установлено на 3, чтобы разрешить только три сообщения на странице? Или я совершенно не прав насчет того, где он зацикливается три раза? - person user2371684; 29.06.2015
comment
@ user2371684 Я обновил ответ, чтобы показать изменения в контексте. - person Robert K. Bell; 29.06.2015