Нужна пагинация кастомного сниппета
Ребята, нужна пагинация сниппета, чтобы с pdoPage работало. Помогите.
<?php
// VK API
$owner_id = $modx->getOption('owner_id', $scriptProperties, '0'); // Группа
$album_id = $modx->getOption('album_id', $scriptProperties, '0'); // Альбом
$rev = $modx->getOption('rev', $scriptProperties, '1'); // 1 новые сверху
$extended = $modx->getOption('extended', $scriptProperties, '0'); // Расширенные поля
$feed_type = $modx->getOption('feed_type', $scriptProperties, 'photo'); // photo, photo_tag
$count = $modx->getOption('count', $scriptProperties, ''); // Количество загружаемых фото
$class = $modx->getOption('class', $scriptProperties, '');
$tpl = $modx->getOption('tpl', $scriptProperties, '@INLINE <li><img src="[[+src_bigxx]]"></li>');
$query = file_get_contents('https://api.vk.com/method/photos.get?owner_id=-'.$owner_id.'&album_id='.$album_id.'&rev='.$rev.'&extended='.$extended.'&feed_type='.$feed_type.'&count='.$count);
$result = json_decode($query, true); // Декодируем полученный json массив
$response = $result['response'];
$output = '';
$pdo = $modx->getService('pdoTools');
foreach ($response as $res) {
$res['class'] = $class;
$output .= $pdo->getChunk($tpl, $res);
}
return $output; Комментарии: 31
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Если нужен idx в чанках:
[[!pdoPage?
Вызвал. Страниц очень много. На деле 66 фото.
Страницы некоторые отображают те же фотки.
Можете посмотреть сами.
И код сниппета полный еще раз (с изменениями)
А то что фото повторяются — это скорее всего заслуга vk, что он возвращает каждый раз немного другой порядок. Скорее всего стоит 1 раз получить и записать в кеш, при загрузке страницы проверять кеш — если нет, получать снова, иначе брать из кеша.
Большое спасибо за решение проблемы! Я просто сам практически ничего не понимаю в этом. Стихия другая, но делать нужно. Я вот код автора переделал, т.к. почти не работал. А за пагинацию спасибо.
Но лучше все-таки писать в кеш, чтобы не запрашивать каждый раз все фото. Кеш сбрасывать плагином на очистку кеша сайта, или передавая определенный параметр на страницу (refresh=1), ну или кеш, например, на сутки делать.
Файл с кешем лежит тут core/cache/vk_photos/
То нужно лезть в core/cache/vk_photos/ и чистить?
Надо будет вызвать страницу с get-параметром refresh=1
Проверьте, правильно ли я делаю кеширование, спасибо:
Вы пишите кеш и получаете его из разных файлов
Нужно привести к одному виду.
Что-то я не верно сделал. Терь у разных альбомов одна превью.
Кстати, можно вместо '' писать null? $output = null;
$output = '';
Ну я поменял, но всё-равно одна превьюшка на всё.
Результат
drive.google.com/open?id=1N8OiAMYFpUFjJXHP64w5vi3NYMm3SaJI
Notice
: Undefined index: response in
/home/o/oooakg/kulibin.club/public_html/core/cache/includes/elements/modsnippet/86.include.cache.php
on line
22
Notice
: Undefined variable: output in
/home/o/oooakg/kulibin.club/public_html/core/cache/includes/elements/modsnippet/86.include.cache.php
on line
35
А это $result = json_decode($query, true); // Декодируем полученный json массив и return $output; строка
Потом посмотрел через echo, что в $query и $result. В Пусто $result, а в $query ошибка запроса. Array выводит. В чём проблема? VK что-то типо изменила?
{«error»:{«error_code»:5,«error_msg»:«User authorization failed: no access_token passed.»,«request_params»:[{«key»:«oauth»,«value»:«1»},{«key»:«method»,«value»:«photos.get»},{«key»:«owner_id»,«value»:"-114376384"},{«key»:«album_id»,«value»:«250351367»},{«key»:«rev»,«value»:«1»},{«key»:«extended»,«value»:«0»},{«key»:«feed_type»,«value»:«photo»},{«key»:«count»,«value»:""},{«key»:«v»,«value»:«5.73»}]}}
Теперь $query такого вида
$query = file_get_contents('https://api.vk.com/method/photos.get?&access_token='.$access_token.'&owner_id=-'.$owner_id.'&album_id='.$album_id.'&rev='.$rev.'&extended='.$extended.'&feed_type='.$feed_type.'&count='.$count.'&v=5.73');
и вначале переменная
// vk.com/apps?act=manage МОИ приложения — Настройки — Сервисный ключ доступа
$access_token = 'тут токе';