$access_token = ($modx->getOption('vk_access_token')?: '-1'); // Токен приложения ВК
$owner_id = ($modx->getOption('vk_group_id')?: '-1'); // Id группы
$post_id = $modx->getOption('post_id', $scriptProperties, '0'); // Пост
$extended = $modx->getOption('extended', $scriptProperties, '1'); // Расширенные поля
$class = $modx->getOption('class', $scriptProperties, '');
$tpl = $modx->getOption('tpl', $scriptProperties, '@INLINE <li><img src="[[+photo.sizes.7.url]]"></li>');
$skip_imgages = $modx->getOption('skip_img', $scriptProperties, ''); // Строка со значениями картинок, которые нужно пропустить
$response = $modx->cacheManager->get('vk_photos_'.$modx->resource->id, [xPDO::OPT_CACHE_KEY => 'vk_photos']);
if(empty($response) || $request['refresh'] == 1) {
$ch = curl_init();
$options = [
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_URL => 'https://api.vk.com/method/wall.getById?&access_token='.$access_token.'&posts=-'.$owner_id.'_'.$post_id.'&v=5.120'
];
curl_setopt_array($ch, $options);
$result = json_decode(curl_exec($ch), true); // Декодируем полученный json массив
curl_close($ch);
$response = $result['response'][0]['attachments'];
$photos = $modx->cacheManager->set('vk_photos_'.$modx->resource->id, $response, 86400, [xPDO::OPT_CACHE_KEY => 'vk_photos']);
}
$pdo = $modx->getService('pdoTools');
$modx->setPlaceholder($totalVar, count($response));
$response = array_slice($response, $offset, $limit, true);
$skip_imgages = str_replace(' ', '', $skip_imgages); // Вырезать из строки со значениями пропуска картинок пробелы
$skip_imgages_arr = explode(",", $skip_imgages); // Создать массив значений номеров изображений, которые нужно пропустить
//$modx->log(modX::LOG_LEVEL_ERROR, "skip_imgages_arr: " . print_r($skip_imgages_arr, 1), 'FILE');
if ($response) {
$idx = 0; // Счётчик - индекс в массиве вывода
foreach ($response as $res) {
if (!in_array($idx + 1, $skip_imgages_arr)) {
$res['class'] = $class;
$res['idx'] = $idx;
$output .= $pdo->getChunk($tpl, $res);
}
$idx++;
}
}
return $output;
Ну закардкодил под pdoPage и правда)) $modx->setPlaceholder($totalVar, count($response)); Сейчас в пустой плейсхолдер пишешь, не знаю выходит ли это боком, ну я бы поправил от греха.. $response = $modx->cacheManager->get('vk_photos_'.$modx->resource->id Кэшируешь относительно id текущего ресурса, а не переданных в сниппет данных. Казалось бы это на вкус и цвет, но есть вариант что в этом и дело, не зависимо от того, что передашь в сниппет, ключ кэша будет одинаковый!
Обсуждают сегодня