Велосипед #2: Динамический подсчет городов

Главные вкладки

Аватар пользователя Мирослав Ли Мирослав Ли 8 октября 2018 в 14:45
1

В telegram-канале для новичков появилась рубрика «? Велосипед», в которой разбираются интересные задачи, возникающие при создании сайтов, и способы их решения.

[hr]

Задача:

Есть тип материала «Города». У каждого города есть страница, при переходе на которую можно посмотреть контакты и адрес филиала. Имеется блок на главной, внутри него отображается количество филиалов. См. рисунок ниже ?

Задача состоит в том, чтобы при удалении или добавлении нового филиала, это число в блоке менялось автоматически.

Решение:

Рассмотрим 2 способа решения.

Первый способ (самый простой)

Этот способ не такой гибкий как второй, но об этом позже.

Заходим в это представление и кликаем Добавить новое поле.

Выбираем поле Текстовая область и нажимаем кнопку добавления.

Выбираем токен для подсчета строк, добавляем его в поле текста и применяем.

Сохраняем представление и смотрим на результат.

[hr]

Второй способ

Cделать программно в твиге. Для этого необходимо объявить свой кастомный модуль и написать обработчик (функцию) для twig.

Можете подсмотреть или клонировать готовый мой модуль-заготовку из Git-репозитория.

Открываем файл twig_functions/src/Twig/Extension/Extensions.php

Теперь мы объявляем новую функцию cities. Обратите внимание, что она написана 2 раза. 1й - это имя функции, по которому вы будете обращаться в твиге, а 2й - это имя функции-обработчика, которую мы объявим ниже.

Объявляем функцию.

Считаем количество городов и отдаем в return.

Теперь нам надо вызвать эту функцию в шаблоне этого блока или в любом другом. Открываем шаблон и вызываем в нужном месте. Я для примера размещу ее под содержимым. Можно еще обернуть в

с классом city.

Теперь сохраняем твиг и сбрасываем кэш. После чего видим результат.

P.S. Не забудьте включить свой кастомный модуль, иначе возникнет ошибка на сайте.

Как видим все вывелось. Там правда филиалы не склоняются, но это уже совсем другая история ?

Ответы на возможные вопросы

Почему второй способ универсальнее?

Потому что вы данную функцию сможете выводить в любом твиге сайта и одновременно ?

Например если вам нужно будет вывести это же количество на странице контактов, то вы просто вызываете снова эту функцию и у вас сразу отобразится актуальное количество городов. Когда добавите еще один город, то во всех местах одновременно это число поменяется. На мой взгляд очень удобно. Конечно существет еще способы решения этой задачи, но я же постарался выбрать самые подходящие на мой взгляд. Если у вас есть еще идеи, как ее можно решить, с удовольствием обсужу с в чате, в комментариях под этим постом или в личке.

Почему в репозиторий я не поместил весь код из этой статьи?

Первое, что у вас задача может быть видоизмененной, и мой код в точности не подойдет. Все равно придется стирать его и дописывать под себя.

Когда пишите руками, вы невольно задумываетесь о том, для чего этот кусок кода. А зачем я тут присваиваю переменную? Для чего я тут считаю? и т.д. И таким способом вы быстрее поймете как работает друпал.

Мне все равно не понятно. Что делать?

Если что-то не понятно было в процессе статьи, например как клонировать с репозитория код, или что такое git и как им пользоваться, или не понятно вообще что такое Views или Twig и т.п., дайте мне знать, и я подготовлю список ссылки для изучения или напишу статью по этой теме. В общем, обращайтесь ?

Не стоит забывать такие источники информации как google, официальная документация drupal и не исключайте вариант просто спросить в чате или в лс.

[hr]

Контакты

Канал в telegram: https://t.me/drupal_beginner_channel
Youtube канал: https://www.youtube.com/channel/UCdVPCpneA3HiUaLg1DJm1gA
Чат где можно задать вопросы: https://t.me/drupal_beginner
Мой профиль в telegram: https://t.me/miroslav_lee

Комментарии

Аватар пользователя Orion76 Orion76 26 декабря 2018 в 21:06

Имхо конечно,
но большинство людей, прочитав эту статью будут думать, что статья про то, как вывести кол-во определенных материалов .

А на самом деле, статья про то, как написать свою функцию для твига.
Согласитесь, этот ее смысл намного универсальнее и наверное востребованнее.-)