Как заставить счетчик TWIG игнорировать кеш Drupal? - PullRequest
0 голосов
/ 19 июня 2020

Этот вопрос связан с моим предыдущим вопросом:

Как создать счетчик с TWIG?

У меня есть сайт с Drupal 8 и меню, которое включает счетчик задач:

введите здесь описание изображения

Счетчик работает нормально, но для его обновления мне каждый раз приходится очищать кеш drupal.

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

Вот код меню:

commerce-store - Professionnel - menu. html .twig

<nav role="navigation" aria-labelledby="menu-page-boutique" id="menu-page-boutique" class="contextual-region">
  <ul class="nav navbar-nav m-0">
    <li class="dropdown">
      <a href="#" class="dropdown-toggle" data-toggle="dropdown"><i class="fas fa-plus-circle fa-lg"></i> Gérer votre {{ store_entity.type.entity.label }}</a>
      <ul class="dropdown-menu">
        <li class="task">
          <a href="/store/{{ store_entity.id }}/tasks" data-drupal-link-system-path="/store/{{ store_entity.id }}/tasks">
            <i class="fas fa-tasks fa-lg"></i> <b>Liste des tâches</b>
            <span class="badge badge-warning task-badge-warning">
              {% if drupal_view_result('boutique_page_liste_des_taches_produit_non_publie', 'block_1') is not empty %}
                {% set warnings = warnings + 1 %}
              {% endif %}
              {% if drupal_view_result('boutique_page_liste_des_taches_role_marchand', 'block_1') is empty %}
                {% set warnings = warnings + 1 %}
              {% endif %}
              {{ warnings }}
            </span>
            <span class="badge badge-danger task-badge-danger">
              {% if drupal_view_result('boutique_page_liste_des_taches_aucun_produit', 'block_1') is empty %}
                {% set dangers = dangers + 1 %}
              {% endif %}
              {% if drupal_view_result('boutique_page_liste_des_taches_aucune_variation', 'block_1') is not empty %}
                {% set dangers = dangers + 1 %}
              {% endif %}
              {% if drupal_view_result('boutique_page_liste_des_taches_commande', 'block_1') is not empty %}
                {% set dangers = dangers + 1 %}
              {% endif %}
              {% if drupal_view_result('boutique_page_liste_des_taches_mode_de_livraison', 'block_1') is empty %}
                {% set dangers = dangers + 1 %}
              {% endif %}
              {% if drupal_view_result('boutique_page_liste_des_taches_passerelle_de_paiement', 'block_1') is empty %}
                {% set dangers = dangers + 1 %}
              {% endif %}
              {{ dangers }}
            </span>
          </a>
        </li>
        <li>
          <a href="/store/{{ store_entity.id }}/point-of-sale" data-drupal-link-system-path="/store/{{ store_entity.id }}/point-of-sale"><i class="fas fa-cash-register fa-lg"></i> Point de vente</a>
        </li>
        <li>
          <a href="/store/{{ store_entity.id }}/migrate" data-drupal-link-system-path="/store/{{ store_entity.id }}/migrate"><i class="fas fa-exchange-alt  fa-lg"></i> Migrer</a>
        </li>
        <li>
          <a href="/store/{{ store_entity.id }}" data-drupal-link-system-path="/store/{{ store_entity.id }}"><i class="fas fa-glasses  fa-lg"></i> Voir</a>
        </li>
        <li>
          <a href="/store/{{ store_entity.id }}/edit" data-drupal-link-system-path="/store/{{ store_entity.id }}/edit"><i class="fas fa-feather-alt fa-lg"></i> Modifier</a>
        </li>
        <li>
          <a href="/store/{{ store_entity.id }}/delete" data-drupal-link-system-path="/store/{{ store_entity.id }}/delete"><i class="fas fa-trash-alt fa-lg"></i> Supprimer</a>
        </li>
        <li>
          <a href="/store/{{ store_entity.id }}/translations" data-drupal-link-system-path="/store/{{ store_entity.id }}/translations"><i class="fas fa-globe fa-lg"></i> Traductions</a>
        </li>
        <li>
          <a href="/store/{{ store_entity.id }}/members" data-drupal-link-system-path="/store/{{ store_entity.id }}/members"><i class="fas fa-sitemap fa-lg"></i> L'équipe</a>
        </li>
        <li>
          <a href="/store/{{ store_entity.id }}/relationship" data-drupal-link-system-path="/store/{{ store_entity.id }}/relationship"><i class="fas fa-link  fa-lg"></i> Relations</a>
        </li>
        <li>
          <a href="/store/{{ store_entity.id }}/products" data-drupal-link-system-path="/store/{{ store_entity.id }}/products"><i class="fas fa-gift  fa-lg"></i> Produits</a>
        </li>
        <li>
          <a href="/store/{{ store_entity.id }}/promotions" data-drupal-link-system-path="/store/{{ store_entity.id }}/promotions"><i class="fas fa-percentage fa-lg"></i> Promotions</a>
        </li>
        <li>
          <a href="/store/{{ store_entity.id }}/payment-gateways" data-drupal-link-system-path="/store/{{ store_entity.id }}/payment-gateways"><i class="fas fa-credit-card fa-lg"></i> Modes de paiement</a>
        </li>
        <li>
          <a href="/store/{{ store_entity.id }}/shipping-methods" data-drupal-link-system-path="/store/{{ store_entity.id }}/shipping-methods"><i class="fas fa-truck fa-lg"></i> Modes de livraison</a>
        </li>
        <li>
          <a href="/store/{{ store_entity.id }}/orders" data-drupal-link-system-path="/store/{{ store_entity.id }}/orders"><i class="fas fa-shopping-cart fa-lg"></i> Commandes</a>
        </li>
        <li>
          <a href="/store/{{ store_entity.id }}/inventory" data-drupal-link-system-path="/store/{{ store_entity.id }}/inventory"><i class="fas fa-clipboard-list fa-lg"></i> Inventaire</a>
        </li>
        <li>
          <a href="/store/{{ store_entity.id }}/reports" data-drupal-link-system-path="/store/{{ store_entity.id }}/reports"><i class="fas fa-calculator fa-lg"></i> Rapports de vente</a>
        </li>
        <li>
          <a href="/store/{{ store_entity.id }}/like" data-drupal-link-system-path="/store/{{ store_entity.id }}/like"><i class="fas fa-heartbeat fa-lg"></i> Mentions j'aime</a>
        </li>
        <li>
          <a href="/store/{{ store_entity.id }}/seo" data-drupal-link-system-path="/store/{{ store_entity.id }}/seo"><i class="fas fa-flag-checkered fa-lg"></i> Référencement</a>
        </li>
      </ul>
    </li>
  </ul>
</nav>

Меню - это режим отображения (в Commerce), который изменен с помощью файла TWIG, приведенного выше, и который отображается с блоком представления.

Итак, мой вопрос. Как заставить счетчик игнорировать кеш Drupal?

введите описание изображения здесь

введите описание изображения здесь

Если мы не могу обновить с помощью TWIG, можем ли мы использовать JS?

В моей теме у меня есть файл JS:

bootstrap. js

(function ($, Drupal) {

  'use strict';

})(jQuery, Drupal);

Что мне добавить, чтобы обновить счетчик задач?

1 Ответ

0 голосов
/ 19 июня 2020

Есть в основном 2 решения для обхода http-кеша и сохранения кеша страниц в Symfony.

Первое - вы загружаете данные, которые не должны кэшироваться по запросу ajax.

Самый простой способ сделать это - использовать hinclude :

https://symfony.com/doc/current/templating/hinclude.html

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

https://symfony.com/doc/current/http_cache/esi.html

Для обоих вам необходимо создать новый контроллер, который будет загружать нужные данные для визуализации.

...