Алексей Ерохин

Алексей Ерохин

С нами с 23 сентября 2013; Место в рейтинге пользователей: #111
Алексей Ерохин
12 февраля 2018, 15:49
1
+1
А если так

&where=`{"template:IN":[1,3,7]}`
Алексей Ерохин
12 февраля 2018, 14:34
0
У вас объект а sort метод для массивов.
Нужно пройти по всем объектам внутри корневого и пихнуть их в массив
Алексей Ерохин
01 февраля 2018, 16:31
1
0
1 вариант. Делать без процессора через newObject
2 вариант. Сделать политику на основе AdministratorTemplate, включить нужные разрешения — для создания документа new_document, дать доступ анонимам к контексту web c этой политикой, и еще могут понадобиться add_children, new_document_in_root, publish_document
Алексей Ерохин
01 февраля 2018, 11:43
0
$response= $modx->cacheManager->get('vk_photos_'.$modx->resource->id, [xPDO::OPT_CACHE_KEY => 'vk_photos']);
$photos= $modx->cacheManager->set('vk_photos_'.$modx->resource->id, $response, 86400, [xPDO::OPT_CACHE_KEY => 'vk_photos']);
Замените эти строчки
Алексей Ерохин
31 января 2018, 18:24
0
Плагин на сохранение ресурса, подключаем класс транслита (используется для alias`ов) и делаем что надо.
Ну или сниппет с тем же функционалом — вызывать как модификатор при выводе
Алексей Ерохин
31 января 2018, 16:27
0
Можно так, можно в скрипт добавить проверку — передавать в адресной строке параметр, если он передан принудительно обновлять кеш.

if(empty($response) || $request['refresh']==1) { 
        /*получаем фото с ВК*/
        $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'];
        $photos= $modx->cacheManager->set('vk_photos',$response, 86400, [xPDO::OPT_CACHE_KEY => 'vk_photos']
    }
Надо будет вызвать страницу с get-параметром refresh=1
Алексей Ерохин
31 января 2018, 16:12
0
Через админку он не почистится. Через сутки при запросе он сгенерируется снова.
Алексей Ерохин
31 января 2018, 15:54
0
$response = $result['response'];
        $photos= $modx->cacheManager->set('vk_photos',$response, 86400, [xPDO::OPT_CACHE_KEY => 'vk_photos']);
Видимо криво скопировал, не хватало закрывающей скобки и точки с запятой.
Алексей Ерохин
31 января 2018, 12:56
0
Некоторые правки
<?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>');
    
    $response= $modx->cacheManager->get('vk_photos', [xPDO::OPT_CACHE_KEY => 'vk_photos']);
    if(empty($response)) { 
        /*получаем фото с ВК*/
        $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'];
        $photos= $modx->cacheManager->set('vk_photos',$response, 86400, [xPDO::OPT_CACHE_KEY => 'vk_photos']
    }
    
    $output = '';
    $pdo = $modx->getService('pdoTools');
    
    $modx->setPlaceholder($totalVar, count($response));
    $response = array_slice($response, $offset, $limit, true);
    
    foreach ($response as $res) {    
        $res['class'] = $class;
        $output .= $pdo->getChunk($tpl, $res);
    }
    return $output;
Файл с кешем лежит тут core/cache/vk_photos/
Алексей Ерохин
31 января 2018, 12:39
0
Хотя теперь не должны повторяться, это было из-за ошибки в коде.

Но лучше все-таки писать в кеш, чтобы не запрашивать каждый раз все фото. Кеш сбрасывать плагином на очистку кеша сайта, или передавая определенный параметр на страницу (refresh=1), ну или кеш, например, на сутки делать.

$photos= $modx->cacheManager->get('vk_photos', [xPDO::OPT_CACHE_KEY => 'vk_photos']);
if(empty($photos)) { 
/*получаем фото с ВК*/
$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'];
$photos= $modx->cacheManager->set('vk_photos',$response, 86400, [xPDO::OPT_CACHE_KEY => 'vk_photos']
}
Алексей Ерохин
31 января 2018, 12:29
0
Ошибочку в коде у себя нашел,
$response = array_slice($response,$offset, $limit, true);
А то что фото повторяются — это скорее всего заслуга vk, что он возвращает каждый раз немного другой порядок. Скорее всего стоит 1 раз получить и записать в кеш, при загрузке страницы проверять кеш — если нет, получать снова, иначе брать из кеша.
Алексей Ерохин
31 января 2018, 12:21
0
А еще что возвращает vk скиньте (json)
Алексей Ерохин
31 января 2018, 12:19
0
Версия pdoTools? Может были какие-то изменения в этих переменных (limit, page, offset)

И код сниппета полный еще раз (с изменениями)
Алексей Ерохин
31 января 2018, 10:50
1
0
Перед foreach
$modx->setPlaceholder($totalVar,count($response));
$response = array_slice($response,$offset, ($limit+$offset), true);
Если нужен idx в чанках:
foreach ($response as $key=>$res) {    
        $res['class'] = $class;
	$res['idx'] = $key+1;
        $output .= $pdo->getChunk($tpl, $res);
    }
Алексей Ерохин
29 января 2018, 13:00
0
В определении кнопок окна buttons перечислены кнопки, у каждой есть handler, для «Сохранить» — стандартный обработчик submit.
Меняете handler на такой:
function() {
		var data = this.fp.getForm().getValues(); //в дату попадает объект c данными формы
	}
Алексей Ерохин
25 января 2018, 16:59
0
params.sw = data.crop.width;
        params.sh = data.crop.height;
        params.sx = data.crop.x;
        params.sy = data.crop.y;
Вставить перед
for (var i in params) {
Алексей Ерохин
25 января 2018, 10:51
1
0
У вас в файле assets/app/js/libs.js подключается jquery 1.11.2, который перекрывает остальные, и поэтому не работает. Скорее всего из-за этого
Алексей Ерохин
25 января 2018, 10:37
0
В системных настройках пропишите collections.renderer_image_path = resourceimages/
Ну или другую настройку создайте в namespace collections и кастомный рендерер еще сделайте, чтобы стандартный остался

В рендерер как вы видите попадает record — эта вся строка из грида, в том числе и id (если вы конечно в настройках коллекции не удалили колонку id)

params.src = MODx.config['collections.renderer_image_path'] + record.id + '/' + data.sourceImg.src;
З.Ы. Не проверял.