Вы здесь

Вопрос от новичка по алгоритму для хранения и рендеринга нестандартных структур данных

0

Моя задача показывать портфолио с сайта Behance, который имеет API для отдачи нужных данных.

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

  1. Очевидно их нужно кешировать, так как каждый раз забирать их с Behance это затраты по времени. К тому же Behance имеет лимиты на отдачу.

1.1. Но что мы кешируем? Массивы для каждой страницы?
1.2. Кешируем значит храним? А если сбросить кеш, то как восстановить данные по процедуре инициализации?
1.3. Где то задается период жизни кеша, на случай если исходный объект изменился? Где вызвать процедуру обновления кеша?

2 . Возникла идея темизировать эти массивы, так как они содержат все необходимые данные. Это правильный подход? Можно уточнить алгоритм, куда копать?
Я так понимаю что мне нужно передать (подготовить?) эти массивы в процедуру рендеринга, которая добавит им разметки? А дальше? Передать в шаблон?

Версия Drupal: 
7.x
Категория: 
Theming
Вопрос задан 03.11.2015 - 00:59
Аватар пользователя Artu
Artu
24

Эти данные уже на вашем ресурсе, как отдаются? Т.е. есть ли выборки по полям этих данных или они просто отдаются друг за другом куском?

Комментарий оставлен 03.11.2015 - 01:12

Ответы

2

1.Создайте специальный тип материала с текстовым полем типа "Длинный текст".
2.При импорте сохраняейте в нем свой массив (возможно json или сериализованный)
3.Напишите для поля свой форматтер, который будет выводить эти данные в нужном виде.
Пример форматтера: http://www.metaltoad.com/blog/drupal-7-tutorial-creating-custom-formatters

Ответ дан 03.11.2015 - 08:02

orion76, В Вашем варианте нет кеширования?
Почему Вы считаете что лучше без кеша?

Комментарий оставлен 03.11.2015 - 10:31

Потому-что кэш предназначен для хранения временных данных..
А судя по вопросу, данные не совсем временные..

Тем более, эти данные необходимо выводить на страницах сайта, а стандартной нодой это делать проще, гибче и менее геморойно и менее извращенно-)
Можете кэшировать сам вывод сущности, если очень надо-)

Комментарий оставлен 03.11.2015 - 14:03

ноды не для того предназначены
это явный костыль

Комментарий оставлен 03.11.2015 - 23:23

Веский аргумент..
тогда да.., только в кэш..
ну в край - в сессию..

Комментарий оставлен 04.11.2015 - 01:54
1

1.1 не важно. можно хранить как массивы, так и html
1.2 да, храните, но временно. Код на получение этих данных должен проверять наличие данных в кеше, если есть - возвращаем данные, если нет - делаем запрос к behance, записываем данные в кеш, возвращаем данные.
тут пример есть - http://habrahabr.ru/post/269385/
1.3 в функции cache_set четвертый параметр - время жизни кеша

2 тут пример - https://api.drupal.org/api/drupal/modules%21system%21system.api.php/func...

Ответ дан 03.11.2015 - 06:59

Да, прочитал статью про кеширование уже ночью.
2. В hook_theme_registry_alter я должен определить какими preprocess хуками я буду обрабатывать эти массивы?

Комментарий оставлен 03.11.2015 - 10:35