Directus — Пример хука для создания или обновления элемента в другой коллекции

Я создаю мобильное приложение, в котором есть представление списка, в котором отображаются ссылки на статьи. Контент приложения поддерживается Directus.

Представление списка имеет

title
description (200 characters, no HTML)
image

В статье есть

title
content (html)
image

Чтобы уменьшить размер запросов API, я храню данные представления списка в коллекции под названием articles_list, а статьи — в коллекции под названием articles.

Чтобы Directus оставался интуитивно понятным для автора, мне нужно, чтобы Directus автоматически создавал/обновлял/удалял элемент в коллекции articles_list при создании/обновлении/удалении элемента в коллекции articles.

Обе коллекции хранят в основном одни и те же данные, за исключением того, что articles_list имеет description вместо content. Поле description содержит первые 200 символов content после удаления тегов HTML.

Я просмотрел документацию по хукам, но не знаю, как создать новый элемент в другой коллекции (articles_list). Как лучше всего использовать внешнюю библиотеку, такую ​​как ezyang/htmlpurifier? Как мне отладить мой хук?

Любая помощь будет принята с благодарностью. Я все еще учусь понимать, как работает Directus.


person neville    schedule 04.03.2019    source источник


Ответы (2)


Я бы рекомендовал создать одну коллекцию с 4 полями:

title
excerpt (/ description)
content (html)
image

Затем вы можете использовать параметр fields, чтобы запрашивать только title и excerpt на ваших обзорных страницах, чтобы сэкономить некоторую пропускную способность / задержку:

/items/articles?fields=title,excerpt

Это также избавляет вас от необходимости синхронизировать две коллекции и избавляет от необходимости хранить дубликаты данных ????

person Rijk    schedule 04.03.2019
comment
Благодарю вас! Но мне все равно нужно будет удалить теги HTML и обрезать отрывок, для которого потребуется очиститель HTML? Также не могли бы вы ответить, как лучше всего отладить хук? - person neville; 05.03.2019
comment
Нет, я бы рекомендовал иметь отдельную текстовую область рядом с основным HTML для выдержки. Таким образом, вам не нужно выполнять какую-либо очистку HTML (и вы получаете дополнительный бонус в виде возможности настраивать отрывок отдельно от html. - person Rijk; 05.03.2019
comment
Отладка хука аналогична отладке любой другой части PHP. Я сам не PHP-разработчик, но я склоняюсь к var_dump() и die() на своем пути к победе ???? - person Rijk; 05.03.2019
comment
Я подумал, что автору было бы проще, если бы отрывок автоматически брался из содержания. Но, возможно, слишком много для меня, чтобы реализовать на данном этапе. Я подумал, что это может быть лучшим способом, и я делаю что-то подобное, когда использую Laravel, но, поскольку хуки происходят в фоновом режиме, они обычно не выводятся в окно браузера или нет? - person neville; 05.03.2019

Это пример отладки внутри хука введите здесь описание изображения

И ваш вопрос здесь, если вы хотите изменить другое поле коллекции из хука, лучше использовать ZendDB Пример хука фильтра для обновления элемента со связанным полем

person Nemesius    schedule 25.04.2020