Фотографии Вконтакте в MODx Revo
Сниппет, который позволяет вывести фотографии из альбома любой группы или же человека. Сниппет использует pdoTools.
Использование параметров и документация:
Код сниппета:
В чанке tpl_vkPhoto, можно использовать все переменные, которые генерирует API Вконтакте. к примеру,
[[+src_big]], [[+text]] и другие.
P.S. Аналогов не увидел, может есть и более лаконичные решения, но меня устроило такое.
Использование параметров и документация:
https://vk.com/pages?oid=-1&p=photos.getСниппет: getVKphotoКод сниппета:
$oid = $modx->getOption('oid',$scriptProperties,'0');//группа или учетка
$aid = $modx->getOption('aid',$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
$photo_sizes = $modx->getOption('photo_sizes',$scriptProperties,'0');//1 - позволяет получать все размеры фотографий.
$limit=$modx->getOption('limit',$scriptProperties,'10'); //количество загружаемых фото
$class = $modx->getOption('class',$scriptProperties,'');
$tpl = $modx->getOption('tpl',$scriptProperties,'@INLINE <li>[[+src_big]]</li>');
$cacheOptions = array(
xPDO::OPT_CACHE_KEY => 'myCache',
xPDO::OPT_CACHE_HANDLER => 'cache.xPDOAPCCache'
);
$json=$modx->cacheManager->get('getvkphoto'.$aid, $cacheOptions);
if (!isset($json))
{
$url = 'https://api.vk.com/method/photos.get?oid='.$oid.'&aid='.$aid.'&rev='.$rev.'&extended='.$extended.'&feed_type='.$feed_type.'&limit='.$limit.'&photo_sizes='.$photo_sizes;
$json = file_get_contents($url);
$modx->cacheManager->set('getvkphoto'.$aid, $json, 3600, $cacheOptions);
}
$data = json_decode($json, true);
$response = $data['response'];
$output = '';
$pdo = $modx->getService('pdoTools');
foreach ($response as $res) {
$res['class'] = $class;
$output .= $pdo->getChunk($tpl, $res);
}
return $output;Вызов сниппета:[[getVKphoto?
&oid=`-20629724`
&aid=`173443310`
&rev=`1`
&extended=`0`
&feed_type=`photo`
&photo_sizes=`0`
&limit=`15`
&tpl=`tpl_vkPhoto`
]]в tpl можно использовать @CODE, @INLINE (спасибо pdoTools)В чанке tpl_vkPhoto, можно использовать все переменные, которые генерирует API Вконтакте. к примеру,
[[+src_big]], [[+text]] и другие.
P.S. Аналогов не увидел, может есть и более лаконичные решения, но меня устроило такое.
Комментарии: 27
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
github.com/modxcms/revolution/blob/d63cc1735422a9c5c51b18a9f21d26bd1f6c390b/core/xpdo/cache/xpdocachemanager.class.php#L728
Вообще не думаю что стоит неопределительный настройки хэндлера. Если у кого то нет apc? Работать же не будет. Пс 3600 не равно двум часам. Моя ошибка.
Цель — гарантированный показ фотографий из альбомов. Я думаю сервера Вконтакте чаще всего работают быстрее, чем некоторые хостинги. Время загрузки 20 фото — добавляет 0,4 секунды. Если бы можно было кэшировать и изображения, было бы замечательно :-)
И да решил проверить ссылку:
api.vk.com/method/photos.get?oid=9776487&aid=229820379
Пишет: Доступ запрещен
Но если так:
api.vk.com/method/photos.get?gid=9776487&aid=229820379
То всё работает.
&oid=`-20629724` меняем на gid. убираем "-" и вуаля.
Со временам появляется вышеупомянутая ошибка (PHP warning: Invalid argument supplied for foreach()) при кешировании, чистим (core/cache).
Ну и для закрытых групп, облом.
Столкнулся с проблемой. Упорно игноррит лимит, всегда выводит 15 штук. Пытаюсь разобраться почему, но не понимаю пока что.
По сабжу, надо смотреть лог ошибок, проверить api, может вконтакт что то изменил. Исходя из анализа уже доработать то что необходимо.
[2018-01-21 20:22:37] (ERROR @ /home/o/oooakg/kulibin.club/public_html/core/xpdo/cache/xpdoapccache.class.php: 36) xPDOAPCCache[myCache]: Error creating APC cache provider; xPDOAPCCache requires the APC extension for PHP, version 2.0.0 or later.
prntscr.com/i3jopj
Если писать $photo_sizes = 1, тогда ничего не отображает. Если 0, тогда доступны src_xxbig в том числе. Не понял почему.
Чтобы все отображались $limit я так понял должен быть -1. Если 0, то ничего не будет.
А как ваше кеширование работает я не понял. Подставил код, ничего не отображается. Кеш чистил, ничего. Если можете, то доделайте и поясните.
uid группы не нужно писать с минусом.