Друпалургия

Окружение для веб разработки с Docker за 20 минут (Алан Бондарчук)[DrupalCamp Краснодар 2016]

Drupal в рунете - ср, 06/09/2017 - 11:47

Алан Бондарчук в своем докладе с Drupal Camp Краснодар 2016 показывает как легко и быстро поднять локальное окружение для веб-разработки с Docker и при необходимости подкрутить его под свои нужды.
Также в докладе есть информация о том, как подключить memcache, solr и другие инструменты и избавиться от модуля Devel.
Наш канал на YouTube -> https://www.youtube.com/user/drupalyug
Презентация находится здесь -> https://www.slideshare.net/DrupalYug/docker-20

>> Все презентации с конференции "DrupalCamp Краснодар 2016"

Версия Drupal: Drupal 8.*Drupal 7.*Ключевые слова: DrupalCampDrupalYugФорумы: Drupal Юг0 Спасибо
Категории: Друпалургия

Окружение для веб разработки с Docker за 20 минут (Алан Бондарчук)[DrupalCamp Краснодар 2016]

Drupal в рунете - ср, 06/09/2017 - 11:47

Алан Бондарчук в своем докладе с Drupal Camp Краснодар 2016 показывает как легко и быстро поднять локальное окружение для веб-разработки с Docker и при необходимости подкрутить его под свои нужды.
Также в докладе есть информация о том, как подключить memcache, solr и другие инструменты и избавиться от модуля Devel.
Наш канал на YouTube -> https://www.youtube.com/user/drupalyug
Презентация находится здесь -> https://www.slideshare.net/DrupalYug/docker-20

>> Все презентации с конференции "DrupalCamp Краснодар 2016"

Версия Drupal: Drupal 8.*Drupal 7.*Ключевые слова: DrupalCampDrupalYugФорумы: Drupal Юг0 Спасибо
Категории: Друпалургия

Универсальное платежное решение для интернет магазинов и сервисов (Станислав Ревва) [DrupalCamp Краснодар 2016]

Drupal в рунете - пн, 04/09/2017 - 16:26

А вот и доклад с Drupal Camp Краснодар 2016 от нашего золотого спонсора PayAnyWay https://www.payanyway.ru - универсального платёжного решения для веб-сервисов и интернет магазинов.
Презентация находится здесь -> https://www.slideshare.net/DrupalYug/ss-75922186
Наш канал на YouTube -> https://www.youtube.com/user/drupalyug
Очень удобное решение, рассказываем друзьям и коллегам, делимся этой записью!

>> Все презентации с конференции "DrupalCamp Краснодар 2016"

Ключевые слова: DrupalCamp DrupalYug Версия Drupal: Drupal 8.* Drupal 7.* Форумы: Drupal Юг 0 Thanks
Категории: Друпалургия

Универсальное платежное решение для интернет магазинов и сервисов (Станислав Ревва) [DrupalCamp Краснодар 2016]

Drupal в рунете - пн, 04/09/2017 - 16:26

А вот и доклад с Drupal Camp Краснодар 2016 от нашего золотого спонсора PayAnyWay https://www.payanyway.ru - универсального платёжного решения для веб-сервисов и интернет магазинов.
Презентация находится здесь -> https://www.slideshare.net/DrupalYug/ss-75922186
Наш канал на YouTube -> https://www.youtube.com/user/drupalyug
Очень удобное решение, рассказываем друзьям и коллегам, делимся этой записью!

>> Все презентации с конференции "DrupalCamp Краснодар 2016"

Версия Drupal: Drupal 8.*Drupal 7.*Ключевые слова: DrupalCampDrupalYugФорумы: Drupal Юг0 Спасибо
Категории: Друпалургия

Универсальное платежное решение для интернет магазинов и сервисов (Станислав Ревва) [DrupalCamp Краснодар 2016]

Drupal в рунете - пн, 04/09/2017 - 16:26

А вот и доклад с Drupal Camp Краснодар 2016 от нашего золотого спонсора PayAnyWay https://www.payanyway.ru - универсального платёжного решения для веб-сервисов и интернет магазинов.
Презентация находится здесь -> https://www.slideshare.net/DrupalYug/ss-75922186
Наш канал на YouTube -> https://www.youtube.com/user/drupalyug
Очень удобное решение, рассказываем друзьям и коллегам, делимся этой записью!

>> Все презентации с конференции "DrupalCamp Краснодар 2016"

Версия Drupal: Drupal 8.*Drupal 7.*Ключевые слова: DrupalCampDrupalYugФорумы: Drupal Юг0 Спасибо
Категории: Друпалургия

Значение контента в интернет продвижении (Юлия Кулиш)[DrupalCamp Краснодар 2016]

Drupal в рунете - пт, 01/09/2017 - 11:17

Наши доклады с Drupal Camp Краснодар 2016 подходят к концу и конечно же мы не могли забыть о докладах наших спонсоров.
Поэтому смотрим доклад Юлии Кулиш - представителя компании eGeek's.Content о важности и нужности контент-маркетинга.
Презентация находится здесь -> https://www.slideshare.net/DrupalYug/ss-75916934
Наш канал на YouTube -> https://www.youtube.com/user/drupalyug
Делимся докладом с коллегами, репостим и оставляем свои лайки.

>> Все презентации с конференции "DrupalCamp Краснодар 2016"

Ключевые слова: DrupalCamp DrupalYug Версия Drupal: Drupal 8.* Drupal 7.* Форумы: Drupal Юг 0 Thanks
Категории: Друпалургия

Значение контента в интернет продвижении (Юлия Кулиш)[DrupalCamp Краснодар 2016]

Drupal в рунете - пт, 01/09/2017 - 11:17

Наши доклады с Drupal Camp Краснодар 2016 подходят к концу и конечно же мы не могли забыть о докладах наших спонсоров.
Поэтому смотрим доклад Юлии Кулиш - представителя компании eGeek's.Content о важности и нужности контент-маркетинга.
Презентация находится здесь -> https://www.slideshare.net/DrupalYug/ss-75916934
Наш канал на YouTube -> https://www.youtube.com/user/drupalyug
Делимся докладом с коллегами, репостим и оставляем свои лайки.

>> Все презентации с конференции "DrupalCamp Краснодар 2016"

Версия Drupal: Drupal 8.*Drupal 7.*Ключевые слова: DrupalCampDrupalYugФорумы: Drupal Юг0 Спасибо
Категории: Друпалургия

Значение контента в интернет продвижении (Юлия Кулиш)[DrupalCamp Краснодар 2016]

Drupal в рунете - пт, 01/09/2017 - 11:17

Наши доклады с Drupal Camp Краснодар 2016 подходят к концу и конечно же мы не могли забыть о докладах наших спонсоров.
Поэтому смотрим доклад Юлии Кулиш - представителя компании eGeek's.Content о важности и нужности контент-маркетинга.
Презентация находится здесь -> https://www.slideshare.net/DrupalYug/ss-75916934
Наш канал на YouTube -> https://www.youtube.com/user/drupalyug
Делимся докладом с коллегами, репостим и оставляем свои лайки.

>> Все презентации с конференции "DrupalCamp Краснодар 2016"

Версия Drupal: Drupal 8.*Drupal 7.*Ключевые слова: DrupalCampDrupalYug Форумы: Drupal Юг0 Спасибо
Категории: Друпалургия

Drupal 8 for site builders (Андрей Юртаев) [DrupalCamp Краснодар 2016]

Drupal в рунете - ср, 30/08/2017 - 11:50

Теперь DrupalCamp Краснодар 2016 радует нас докладом Андрея Юртаева об особенностях Drupal 8 и его отличиях от 7го.
Презентация находится здесь -> https://www.slideshare.net/DrupalYug/drupal-8-for-site-builders-76091310
Наш канал на YouTube -> https://www.youtube.com/user/drupalyug
Делимся докладом с коллегами, репостим и оставляем свои лайки.

>> Все презентации с конференции "DrupalCamp Краснодар 2016"

Ключевые слова: DrupalCamp DrupalYug Версия Drupal: Drupal 8.* Drupal 7.* Форумы: Drupal Юг 0 Thanks
Категории: Друпалургия

Drupal 8 for site builders (Андрей Юртаев) [DrupalCamp Краснодар 2016]

Drupal в рунете - ср, 30/08/2017 - 11:50

Теперь DrupalCamp Краснодар 2016 радует нас докладом Андрея Юртаева об особенностях Drupal 8 и его отличиях от 7го.
Презентация находится здесь -> https://www.slideshare.net/DrupalYug/drupal-8-for-site-builders-76091310
Наш канал на YouTube -> https://www.youtube.com/user/drupalyug
Делимся докладом с коллегами, репостим и оставляем свои лайки.

>> Все презентации с конференции "DrupalCamp Краснодар 2016"

Версия Drupal: Drupal 8.*Drupal 7.*Ключевые слова: DrupalCampDrupalYugФорумы: Drupal Юг0 Спасибо
Категории: Друпалургия

Drupal 8 for site builders (Андрей Юртаев) [DrupalCamp Краснодар 2016]

Drupal в рунете - ср, 30/08/2017 - 11:50

Теперь DrupalCamp Краснодар 2016 радует нас докладом Андрея Юртаева об особенностях Drupal 8 и его отличиях от 7го.
Презентация находится здесь -> https://www.slideshare.net/DrupalYug/drupal-8-for-site-builders-76091310
Наш канал на YouTube -> https://www.youtube.com/user/drupalyug
Делимся докладом с коллегами, репостим и оставляем свои лайки.

>> Все презентации с конференции "DrupalCamp Краснодар 2016"

Версия Drupal: Drupal 8.*Drupal 7.*Ключевые слова: DrupalCampDrupalYug Форумы: Drupal Юг0 Спасибо
Категории: Друпалургия

Drupal: Фиксим вывод reCaptcha на AJAX формах

Разработчики модуля reCAPTCHA третий год не могут заставить работать капчу на ajax формах. Проблема в следующем — при перезагрузке формы с помощью AJAX капча пропадает, поскольку модуль никак не реагирует на подгрузку динамического контента. Фиксим самостоятельно:

(function ($) { Drupal.behaviors.mymodule = { attach: function (context, settings) { if ('grecaptcha' in window && context !== document) {

Читать дальше →

Похожие записи:

Категории: Друпалургия

Современные средства аналитики. Настройка и использование колтрекинга на Drupal (Максим Хорошко) [DrupalCamp Краснодар 2016]

Drupal в рунете - пн, 28/08/2017 - 11:20

Максим Хорошко в своём докладе осветит такую проблему, как отслеживание звонков с помощью callback-tracker систем, который позволяют узнать информацию вплоть до той, с какого объявления пришёл звонок.
И конечно же на DrupalCamp Краснодар 2016 Максим рассмотрел кейс по интеграции таких систем на сайт, созданный на CMS Drupal.
Презентация находится здесь -> https://www.slideshare.net/secret/VEi1sXtdTaK5
Наш канал на YouTube -> https://www.youtube.com/user/drupalyug
Делимся этой записью с друзьями и коллегами, а с нами делимся лайками!

>> Все презентации с конференции "DrupalCamp Краснодар 2016"

Ключевые слова: DrupalCamp DrupalYug Версия Drupal: Drupal 8.* Drupal 7.* Форумы: Drupal Юг 0 Thanks
Категории: Друпалургия

Современные средства аналитики. Настройка и использование колтрекинга на Drupal (Максим Хорошко) [DrupalCamp Краснодар 2016]

Drupal в рунете - пн, 28/08/2017 - 11:20

Максим Хорошко в своём докладе осветит такую проблему, как отслеживание звонков с помощью callback-tracker систем, который позволяют узнать информацию вплоть до той, с какого объявления пришёл звонок.
И конечно же на DrupalCamp Краснодар 2016 Максим рассмотрел кейс по интеграции таких систем на сайт, созданный на CMS Drupal.
Презентация находится здесь -> https://www.slideshare.net/secret/VEi1sXtdTaK5
Наш канал на YouTube -> https://www.youtube.com/user/drupalyug
Делимся этой записью с друзьями и коллегами, а с нами делимся лайками!

>> Все презентации с конференции "DrupalCamp Краснодар 2016"

Версия Drupal: Drupal 8.*Drupal 7.*Ключевые слова: DrupalCampDrupalYugФорумы: Drupal Юг0 Спасибо
Категории: Друпалургия

Современные средства аналитики. Настройка и использование колтрекинга на Drupal (Максим Хорошко) [DrupalCamp Краснодар 2016]

Drupal в рунете - пн, 28/08/2017 - 11:20

Максим Хорошко в своём докладе осветит такую проблему, как отслеживание звонков с помощью callback-tracker систем, который позволяют узнать информацию вплоть до той, с какого объявления пришёл звонок.
И конечно же на DrupalCamp Краснодар 2016 Максим рассмотрел кейс по интеграции таких систем на сайт, созданный на CMS Drupal.
Презентация находится здесь -> https://www.slideshare.net/secret/VEi1sXtdTaK5
Наш канал на YouTube -> https://www.youtube.com/user/drupalyug
Делимся этой записью с друзьями и коллегами, а с нами делимся лайками!

>> Все презентации с конференции "DrupalCamp Краснодар 2016"

Версия Drupal: Drupal 8.*Drupal 7.*Ключевые слова: DrupalCampDrupalYug Форумы: Drupal Юг0 Спасибо
Категории: Друпалургия

JSONAPI - забудьте всё, чему вас учили в Drupal-школе!

Drupal в рунете - сб, 26/08/2017 - 16:23


В продолжение темы о headless-Drupal хочу рассказать о замечательнейшем модуле JSONAPI. Согласно официальному описанию, модуль является имплементацией спецификации JSON API для Drupal.. Что же представляет из себя эта спецификация? Во-первых, сам формат данных (структура полей). Во-вторых, формат запроса данных - фильтрация, необходимые поля, сортировки и т.д. Лично я считаю этот модуль крайне необходимым для построения headless-систем, ведь JSONAPI не только делает данные более удобными для разбора на фронтенде, но и существенно сокращает этап разработки бэкенда и экономит не только ваше время, но и ресурсы сервера. И вот почему:

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

Итак, перейдём к перечислению возможностей и преимуществ модуля.

Формат данных.

Известно, что в восьмёрке в ядре есть модуль REST, который позволяет получать в json любые материалы, но есть одно "но" - структура данных там будет приблизительно такая:

{
  title: [
    value: 'My node'
  ]
}

С виду, ничего страшного, но в таком случае к значению поля обратиться можно будет только через "titlte[0].value". Конечно, всем, кто знаком с друпалом, знакома и эта запись, но по факту такие данные крайне неудобно разбирать в Javascript и тем более неудобно их формировать. JSONAPI делает эту структуру куда более понятной:

{
  "data": {
    "type": "node--my-bundle",
    "id": "2ee9f0ef-1b25-4bbe-a00f-8649c68b1f7e",
    "attributes": {
      "title": "An Example"
    },
    "relationships": {
      "uid": {
        "data": {
          "type": "user--user",
          "id": "53bb14cc-544a-4cf2-88e8-e9cdd0b6948f"
        }
      }
    }
  }
}

Как видно, данные разделены на две секции - attributes и relationships, в первой отображаются поля самой запрошенной сущности, а во второй - поля-референсы - ссылка на автора, таксономия и т.д.

Запрос нескольких сущностей

Чтобы запросить одну сущность, необходимо сделать GET-запрос на адрес вида /jsonapi/{entity_type}/{bundle}/{uuid}, например:

/jsonapi/node/article/53bb14cc-544a-4cf2-88e8-e9cdd0b6948f

Как видно, здесь необходимо оперировать uuid, то же самое касается и PATCH- и DELETE-запросов.

Однако, если мы запросим адрес /jsonapi/node/article, то получим список всех статей. Вернее не всех, а только 50 штук, т.к. в модуле JSONAPI стоит ограничение выводить не более 50 сущностей. Но этот число можно уменьшить, просто указав в запросе параметр количества сущностей на страницу:

http://example.com/jsonapi/node/article?page[limit]=10

Чтобы получить ещё десяток статей, укажем параметр offset:

http://example.com/jsonapi/node/article?page[limit]=10&page[offset]=10

Сортировка выборки

Полученную выборку можно отсортировать по любым критериям. Тут стоит отметить, что многие параметры в JSONAPI имеют две формы записи - полную и сокращённую. Например, отсортировать статьи по дате создания можно так:

SHORT
sort=created

NORMAL
sort[sort-created][path]=created

Отсортировать по имени автора в обратном порядке:

SHORT
sort=-uid.name

NORMAL
sort[sort-author][path]=uid.name
sort[sort-author][direction]=DESC

Отсортировать одновременно по нескольким критериям:

SHORT
sort=-created,uid.name

NORMAL
sort[sort-created][path]=created
sort[sort-created][direction]=DESC
sort[sort-author][path]=uid.name

Фильтрация выборки

Параметры фильтров по своей структуре аналогичны параметрам сортировки. Вот пример для получения только опубликованных материалов:

SHORT
filter[status][value]=1

NORMAL
filter[status-filter][condition][path]=status
filter[status-filter][condition][value]=1

Хочу заметить, что в данном случае в краткой форме status - это системное название поля, а в полной форме status-filter - это произвольное название фильтра.

Как вы уже догадались, с помощью фильтров можно запрашивать ноды по nid, а не по uuid.

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

SHORT
filter[uid.name][value]=admin

NORMAL
filter[name-filter][condition][path]=uid.name
filter[name-filter][condition][value]=admin

Также есть возможность фильтровать не только по критерию равенства, доступны операторы "IN", "NOT IN", ">", "<", "<>", "BETWEEN" и "CONTAINS". Вот пример для фильтра по нескольким именам авторов:

NORMAL
filter[name-filter][condition][path]=uid.name
filter[name-filter][condition][operator]=IN
filter[name-filter][condition][value][]=admin
filter[name-filter][condition][value][]=john

Больше примеров вы найдёте здесь

Запрос связанных сущностей

По умолчанию связанные сущности не возвращаются сервером, отдаётся лишь информация о типе сущностей и их uuid в секции relationships. Однако мы можем запросить и их, просто указав параметр include в нашем запросе, например include=uid добавит в ответ сервера все поля авторов. Вернее сказать не поля, а сущности, просто они будут не в секции data, а в секции included.

Указание нужных полей

Часто нам не нужны все поля сущности. Для этого есть параметр fields. Например:

http://example.com/jsonapi/node/article/{{article_uuid}}?include=uid&fields[node--article]=title,body&fields[uid]=name

Этот запрос выдаст нам заголовок статьи, её текст и имя автора.

Итого

Как видно, Views нам действительно теперь не нужен. В принципе, теперь для сборки бэкенда на Drupal достаточно создать все нужные сущности и их поля и установить модуль jsonapi. И всё.

Что у модуля под капотом?

Говорят, что при некоторых запросах JSONAPI даже не делает полный бутстрап друпала, но я не проверял это. Как бы то ни было, по быстродействию даже на глаз видно, что модуль работает быстрее, чем views. А логирование SQL-запросов показало, что сперва делается один запрос, возвращающий айдишники сущностей, а сами сущности берутся из таблицы cache_entity. В отличие от того же views - не нужно тратить ресурсы на построение объекта самого представления.

Недостатки

- не поддерживаются обратные референсы (например, в выборке по пользователям не получится собрать их материалы)
- не поддерживается агрегация
- нельзя получить за один запрос более 50 сущностей (но существуют обходные пути - параллельные запросы либо модуль Subrequests)

Первые два недостатка порой весьма критичны, причём их никогда не пофиксят, ибо это подразумевается в самом стандарте спецификации JSONAPI. Тем не менее, с такими запросами легко справляется Views, именно поэтому я и писал, что он почти не нужен.

PS: данная статья не является переводом официальной документации, хоть и содержит выдержки из неё. Для тех, кто хочет узнать больше, рекомендую следующие ссылки:

Страница модуля: https://www.drupal.org/project/jsonapi

Официальная документация: https://www.drupal.org/docs/8/modules/json-api

Видеоуроки на YouTube: https://www.youtube.com/playlist?list=PLZOQ_ZMpYrZsyO-3IstImK1okrpfAjuMZ - это реально круто!

Спецификация стандарта: http://jsonapi.org/

Ссылка на оригинал статьи в моём блоге: http://wellsolutions.by/article/jsonapi-zabudte-vsyo-chemu-vas-uchili-v-...

Модули и темы: jsonapi Ключевые слова: Headless Тип материала: Предлагаю решение Версия Drupal: Drupal 8.* Форумы: Установка и настройка 6 Thanks
Категории: Друпалургия

JSONAPI - забудьте всё, чему вас учили в Drupal-школе!

Drupal в рунете - сб, 26/08/2017 - 16:23


В продолжение темы о headless-Drupal хочу рассказать о замечательнейшем модуле JSONAPI. Согласно официальному описанию, модуль является имплементацией спецификации JSON API для Drupal.. Что же представляет из себя эта спецификация? Во-первых, сам формат данных (структура полей). Во-вторых, формат запроса данных - фильтрация, необходимые поля, сортировки и т.д. Лично я считаю этот модуль крайне необходимым для построения headless-систем, ведь JSONAPI не только делает данные более удобными для разбора на фронтенде, но и существенно сокращает этап разработки бэкенда и экономит не только ваше время, но и ресурсы сервера. И вот почему:

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

Итак, перейдём к перечислению возможностей и преимуществ модуля.

Формат данных.

Известно, что в восьмёрке в ядре есть модуль REST, который позволяет получать в json любые материалы, но есть одно "но" - структура данных там будет приблизительно такая:

{
  title: [
    value: 'My node'
  ]
}

С виду, ничего страшного, но в таком случае к значению поля обратиться можно будет только через "titlte[0].value". Конечно, всем, кто знаком с друпалом, знакома и эта запись, но по факту такие данные крайне неудобно разбирать в Javascript и тем более неудобно их формировать. JSONAPI делает эту структуру куда более понятной:

{
  "data": {
    "type": "node--my-bundle",
    "id": "2ee9f0ef-1b25-4bbe-a00f-8649c68b1f7e",
    "attributes": {
      "title": "An Example"
    },
    "relationships": {
      "uid": {
        "data": {
          "type": "user--user",
          "id": "53bb14cc-544a-4cf2-88e8-e9cdd0b6948f"
        }
      }
    }
  }
}

Как видно, данные разделены на две секции - attributes и relationships, в первой отображаются поля самой запрошенной сущности, а во второй - поля-референсы - ссылка на автора, таксономия и т.д.

Запрос нескольких сущностей

Чтобы запросить одну сущность, необходимо сделать GET-запрос на адрес вида /jsonapi/{entity_type}/{bundle}/{uuid}, например:

/jsonapi/node/article/53bb14cc-544a-4cf2-88e8-e9cdd0b6948f

Как видно, здесь необходимо оперировать uuid, то же самое касается и PATCH- и DELETE-запросов.

Однако, если мы запросим адрес /jsonapi/node/article, то получим список всех статей. Вернее не всех, а только 50 штук, т.к. в модуле JSONAPI стоит ограничение выводить не более 50 сущностей. Но этот число можно уменьшить, просто указав в запросе параметр количества сущностей на страницу:

http://example.com/jsonapi/node/article?page[limit]=10

Чтобы получить ещё десяток статей, укажем параметр offset:

http://example.com/jsonapi/node/article?page[limit]=10&page[offset]=10

Сортировка выборки

Полученную выборку можно отсортировать по любым критериям. Тут стоит отметить, что многие параметры в JSONAPI имеют две формы записи - полную и сокращённую. Например, отсортировать статьи по дате создания можно так:

SHORT
sort=created

NORMAL
sort[sort-created][path]=created

Отсортировать по имени автора в обратном порядке:

SHORT
sort=-uid.name

NORMAL
sort[sort-author][path]=uid.name
sort[sort-author][direction]=DESC

Отсортировать одновременно по нескольким критериям:

SHORT
sort=-created,uid.name

NORMAL
sort[sort-created][path]=created
sort[sort-created][direction]=DESC
sort[sort-author][path]=uid.name Фильтрация выборки

Параметры фильтров по своей структуре аналогичны параметрам сортировки. Вот пример для получения только опубликованных материалов:

SHORT
filter[status][value]=1

NORMAL
filter[status-filter][condition][path]=status
filter[status-filter][condition][value]=1

Хочу заметить, что в данном случае в краткой форме status - это системное название поля, а в полной форме status-filter - это произвольное название фильтра.

Как вы уже догадались, с помощью фильтров можно запрашивать ноды по nid, а не по uuid.

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

SHORT
filter[uid.name][value]=admin

NORMAL
filter[name-filter][condition][path]=uid.name
filter[name-filter][condition][value]=admin

Также есть возможность фильтровать не только по критерию равенства, доступны операторы "IN", "NOT IN", ">", "<", "<>", "BETWEEN" и "CONTAINS". Вот пример для фильтра по нескольким именам авторов:

NORMAL
filter[name-filter][condition][path]=uid.name
filter[name-filter][condition][operator]=IN
filter[name-filter][condition][value][]=admin
filter[name-filter][condition][value][]=john

Больше примеров вы найдёте здесь

Запрос связанных сущностей

По умолчанию связанные сущности не возвращаются сервером, отдаётся лишь информация о типе сущностей и их uuid в секции relationships. Однако мы можем запросить и их, просто указав параметр include в нашем запросе, например include=uid добавит в ответ сервера все поля авторов. Вернее сказать не поля, а сущности, просто они будут не в секции data, а в секции included.

Указание нужных полей

Часто нам не нужны все поля сущности. Для этого есть параметр fields. Например:

http://example.com/jsonapi/node/article/{{article_uuid}}?include=uid&fields[node--article]=title,body&fields[uid]=name

Этот запрос выдаст нам заголовок статьи, её текст и имя автора.

Итого

Как видно, Views нам действительно теперь не нужен. В принципе, теперь для сборки бэкенда на Drupal достаточно создать все нужные сущности и их поля и установить модуль jsonapi. И всё.

Что у модуля под капотом?

Говорят, что при некоторых запросах JSONAPI даже не делает полный бутстрап друпала, но я не проверял это. Как бы то ни было, по быстродействию даже на глаз видно, что модуль работает быстрее, чем views. А логирование SQL-запросов показало, что сперва делается один запрос, возвращающий айдишники сущностей, а сами сущности берутся из таблицы cache_entity. В отличие от того же views - не нужно тратить ресурсы на построение объекта самого представления.

Недостатки

- не поддерживаются обратные референсы (например, в выборке по пользователям не получится собрать их материалы)
- не поддерживается агрегация
- нельзя получить за один запрос более 50 сущностей (но существуют обходные пути - параллельные запросы либо модуль Subrequests)

Первые два недостатка порой весьма критичны, причём их никогда не пофиксят, ибо это подразумевается в самом стандарте спецификации JSONAPI. Тем не менее, с такими запросами легко справляется Views, именно поэтому я и писал, что он почти не нужен.

PS: данная статья не является переводом официальной документации, хоть и содержит выдержки из неё. Для тех, кто хочет узнать больше, рекомендую следующие ссылки:

Страница модуля: https://www.drupal.org/project/jsonapi

Официальная документация: https://www.drupal.org/docs/8/modules/json-api

Видеоуроки на YouTube: https://www.youtube.com/playlist?list=PLZOQ_ZMpYrZsyO-3IstImK1okrpfAjuMZ - это реально круто!

Спецификация стандарта: http://jsonapi.org/

Ссылка на оригинал статьи в моём блоге: http://wellsolutions.by/article/jsonapi-zabudte-vsyo-chemu-vas-uchili-v-drupal-shkole

Тип материала: Предлагаю решениеВерсия Drupal: Drupal 8.*Ключевые слова: HeadlessМодули и темы: jsonapiФорумы: Установка и настройка6 Спасибо
Категории: Друпалургия

JSONAPI - забудьте всё, чему вас учили в Drupal-школе!

Drupal в рунете - сб, 26/08/2017 - 16:23


В продолжение темы о headless-Drupal хочу рассказать о замечательнейшем модуле JSONAPI. Согласно официальному описанию, модуль является имплементацией спецификации JSON API для Drupal.. Что же представляет из себя эта спецификация? Во-первых, сам формат данных (структура полей). Во-вторых, формат запроса данных - фильтрация, необходимые поля, сортировки и т.д. Лично я считаю этот модуль крайне необходимым для построения headless-систем, ведь JSONAPI не только делает данные более удобными для разбора на фронтенде, но и существенно сокращает этап разработки бэкенда и экономит не только ваше время, но и ресурсы сервера. И вот почему:

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

Итак, перейдём к перечислению возможностей и преимуществ модуля.

Формат данных.

Известно, что в восьмёрке в ядре есть модуль REST, который позволяет получать в json любые материалы, но есть одно "но" - структура данных там будет приблизительно такая:

{
  title: [
    value: 'My node'
  ]
}

С виду, ничего страшного, но в таком случае к значению поля обратиться можно будет только через "titlte[0].value". Конечно, всем, кто знаком с друпалом, знакома и эта запись, но по факту такие данные крайне неудобно разбирать в Javascript и тем более неудобно их формировать. JSONAPI делает эту структуру куда более понятной:

{
  "data": {
    "type": "node--my-bundle",
    "id": "2ee9f0ef-1b25-4bbe-a00f-8649c68b1f7e",
    "attributes": {
      "title": "An Example"
    },
    "relationships": {
      "uid": {
        "data": {
          "type": "user--user",
          "id": "53bb14cc-544a-4cf2-88e8-e9cdd0b6948f"
        }
      }
    }
  }
}

Как видно, данные разделены на две секции - attributes и relationships, в первой отображаются поля самой запрошенной сущности, а во второй - поля-референсы - ссылка на автора, таксономия и т.д.

Запрос нескольких сущностей

Чтобы запросить одну сущность, необходимо сделать GET-запрос на адрес вида /jsonapi/{entity_type}/{bundle}/{uuid}, например:

/jsonapi/node/article/53bb14cc-544a-4cf2-88e8-e9cdd0b6948f

Как видно, здесь необходимо оперировать uuid, то же самое касается и PATCH- и DELETE-запросов.

Однако, если мы запросим адрес /jsonapi/node/article, то получим список всех статей. Вернее не всех, а только 50 штук, т.к. в модуле JSONAPI стоит ограничение выводить не более 50 сущностей. Но этот число можно уменьшить, просто указав в запросе параметр количества сущностей на страницу:

http://example.com/jsonapi/node/article?page[limit]=10

Чтобы получить ещё десяток статей, укажем параметр offset:

http://example.com/jsonapi/node/article?page[limit]=10&page[offset]=10

Сортировка выборки

Полученную выборку можно отсортировать по любым критериям. Тут стоит отметить, что многие параметры в JSONAPI имеют две формы записи - полную и сокращённую. Например, отсортировать статьи по дате создания можно так:

SHORT
sort=created

NORMAL
sort[sort-created][path]=created

Отсортировать по имени автора в обратном порядке:

SHORT
sort=-uid.name

NORMAL
sort[sort-author][path]=uid.name
sort[sort-author][direction]=DESC

Отсортировать одновременно по нескольким критериям:

SHORT
sort=-created,uid.name

NORMAL
sort[sort-created][path]=created
sort[sort-created][direction]=DESC
sort[sort-author][path]=uid.name Фильтрация выборки

Параметры фильтров по своей структуре аналогичны параметрам сортировки. Вот пример для получения только опубликованных материалов:

SHORT
filter[status][value]=1

NORMAL
filter[status-filter][condition][path]=status
filter[status-filter][condition][value]=1

Хочу заметить, что в данном случае в краткой форме status - это системное название поля, а в полной форме status-filter - это произвольное название фильтра.

Как вы уже догадались, с помощью фильтров можно запрашивать ноды по nid, а не по uuid.

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

SHORT
filter[uid.name][value]=admin

NORMAL
filter[name-filter][condition][path]=uid.name
filter[name-filter][condition][value]=admin

Также есть возможность фильтровать не только по критерию равенства, доступны операторы "IN", "NOT IN", ">", "<", "<>", "BETWEEN" и "CONTAINS". Вот пример для фильтра по нескольким именам авторов:

NORMAL
filter[name-filter][condition][path]=uid.name
filter[name-filter][condition][operator]=IN
filter[name-filter][condition][value][]=admin
filter[name-filter][condition][value][]=john

Больше примеров вы найдёте здесь

Запрос связанных сущностей

По умолчанию связанные сущности не возвращаются сервером, отдаётся лишь информация о типе сущностей и их uuid в секции relationships. Однако мы можем запросить и их, просто указав параметр include в нашем запросе, например include=uid добавит в ответ сервера все поля авторов. Вернее сказать не поля, а сущности, просто они будут не в секции data, а в секции included.

Указание нужных полей

Часто нам не нужны все поля сущности. Для этого есть параметр fields. Например:

http://example.com/jsonapi/node/article/{{article_uuid}}?include=uid&fields[node--article]=title,body&fields[uid]=name

Этот запрос выдаст нам заголовок статьи, её текст и имя автора.

Итого

Как видно, Views нам действительно теперь не нужен. В принципе, теперь для сборки бэкенда на Drupal достаточно создать все нужные сущности и их поля и установить модуль jsonapi. И всё.

Что у модуля под капотом?

Говорят, что при некоторых запросах JSONAPI даже не делает полный бутстрап друпала, но я не проверял это. Как бы то ни было, по быстродействию даже на глаз видно, что модуль работает быстрее, чем views. А логирование SQL-запросов показало, что сперва делается один запрос, возвращающий айдишники сущностей, а сами сущности берутся из таблицы cache_entity. В отличие от того же views - не нужно тратить ресурсы на построение объекта самого представления.

Недостатки

- не поддерживаются обратные референсы (например, в выборке по пользователям не получится собрать их материалы)
- не поддерживается агрегация
- нельзя получить за один запрос более 50 сущностей (но существуют обходные пути - параллельные запросы либо модуль Subrequests)

Первые два недостатка порой весьма критичны, причём их никогда не пофиксят, ибо это подразумевается в самом стандарте спецификации JSONAPI. Тем не менее, с такими запросами легко справляется Views, именно поэтому я и писал, что он почти не нужен.

PS: данная статья не является переводом официальной документации, хоть и содержит выдержки из неё. Для тех, кто хочет узнать больше, рекомендую следующие ссылки:

Страница модуля: https://www.drupal.org/project/jsonapi

Официальная документация: https://www.drupal.org/docs/8/modules/json-api

Видеоуроки на YouTube: https://www.youtube.com/playlist?list=PLZOQ_ZMpYrZsyO-3IstImK1okrpfAjuMZ - это реально круто!

Спецификация стандарта: http://jsonapi.org/

Ссылка на оригинал статьи в моём блоге: http://wellsolutions.by/article/jsonapi-zabudte-vsyo-chemu-vas-uchili-v-drupal-shkole

Тип материала: Предлагаю решениеВерсия Drupal: Drupal 8.*Ключевые слова: HeadlessМодули и темы: jsonapi Форумы: Установка и настройка2 Спасибо
Категории: Друпалургия

Semantic Web и schema.org для интернет-магазинов (Сергей Синица) [DrupalCamp Краснодар 2016]

Drupal в рунете - пт, 25/08/2017 - 11:25

Легкий поиск, красивые сниппеты, машинное распознавание контента и другие возможности семантической разметки в докладе Сергея Синицы.
Презентация находится здесь -> https://www.slideshare.net/secret/5eSh9UjcbYYOWD
Наш канал на YouTube -> https://www.youtube.com/user/drupalyug
Делимся этой записью с друзьями и коллегами, а с нами делимся лайками!

>> Все презентации с конференции "DrupalCamp Краснодар 2016"

Ключевые слова: DrupalCamp DrupalYug Версия Drupal: Drupal 8.* Drupal 7.* Форумы: Drupal Юг 0 Thanks
Категории: Друпалургия

Semantic Web и schema.org для интернет-магазинов (Сергей Синица) [DrupalCamp Краснодар 2016]

Drupal в рунете - пт, 25/08/2017 - 11:25

Легкий поиск, красивые сниппеты, машинное распознавание контента и другие возможности семантической разметки в докладе Сергея Синицы.
Презентация находится здесь -> https://www.slideshare.net/secret/5eSh9UjcbYYOWD
Наш канал на YouTube -> https://www.youtube.com/user/drupalyug
Делимся этой записью с друзьями и коллегами, а с нами делимся лайками!

>> Все презентации с конференции "DrupalCamp Краснодар 2016"

Версия Drupal: Drupal 8.*Drupal 7.*Ключевые слова: DrupalCampDrupalYugФорумы: Drupal Юг0 Спасибо
Категории: Друпалургия

Страницы

Подписка на Друпалургия сбор новостей - Друпалургия