Как сделать выполнение синхронизации по крону в фоне?

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

Аватар пользователя Наденька Наденька 11 февраля 2017 в 18:32

Привет ребята. Помогите пожалуйста составить цепочку действий в голове с теоретической частью.

Задача:

Мне нужно скажем каждые 20 минут получать обновления и кидать в мою базу данных.

Дано:

1) В типе материала есть ссылка на внешний календарь который там на внешних ресурсах живёт своей жизнью.
2) Есть php класс который принимает на вход путь до календаря и в случае появления новых данных пишет в базу

Вопрос:

Собственно вопрос: Где должно быть связующее звено между нодой у которой указана ссылка на внешний ресурс и PHP классом который будет приминать данные и сохранять их в базу. Куда направлять крон и как должна работать та часть кода которая будет смотреть в ноду брать там NID и ссылку и посылать её в класс который в свою очередь будет в случае необходимости писать даты в отдельную таблицу в виде nid | date1 | date2

Вопрос по большей части чисто теоретический от незнания архитектуры. Буду очень благодарна на пинку в сторону просветления. А ещё больше буду благодарна за советы - что почитать что бы подобные вопросы впредь не возникали.

Комментарии

Аватар пользователя bumble bumble 11 февраля 2017 в 22:36

Наденька wrote:

Где должно быть связующее звено

Однозначно в своем модуле.

Вам нужно следовать приблизительно следующему алгоритму:

  • получить список нод с заполненным полем (если таких нод несколько)
  • проверить формат поля, чтоб и правда содержал ссылку куда нужно
  • и список в цикле обработать (передать путь до календаря и нид)

Так же учитывайте, что если нод/календарей будет много - есть вероятность нехватки времени для обработки всех элементов списка. В таком случае, может иметь смысл дополнительная запись обработанных элементов, или использование очередей.

Аватар пользователя Наденька Наденька 11 февраля 2017 в 23:45

Благодарю за информацию. То что в кастомном модуле это разумеется. Я немного не понимаю логику в том плане можно ли заставить допустим тот же кастомный модуль срабатывать по крону? Модуль же не отдельный файл. И возможно ли это делать в фоне, что бы сам сайт не тупил при каждом запуске.

Аватар пользователя gun_dose gun_dose 11 февраля 2017 в 23:24

В данных из этого календаря должен быть хоть какой-то айдишник. Его надо писать в ноду невидимым полем. Поставьте например элисия крон, чтобы раз в 20 минут запускать только это задание, а не все сразу. И не забудьте настроить крон в системе, чтобы он работал действительно в фоне, а не по заходу посетителя.

Аватар пользователя Наденька Наденька 11 февраля 2017 в 23:52

В ноде так-же прикручен модуль availability calendar, так что да айдишник календаря можно сказать есть, я как раз пытаюсь придумать синхронизацию в него со стороннего ресурса.
Насколько я понимаю об этом модуле идёт речь? Спасибо поковыряю.

Аватар пользователя gun_dose gun_dose 11 февраля 2017 в 23:54

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