Владимир

Владимир

С нами с 28 декабря 2012; Место в рейтинге пользователей: #90
Саша Пекшев
16 января 2015, 15:49
2
+1
Это надо найти и заменить в снипите JSONDerulo

//-----------------------------------------------------------
//  YouTube API V2 uploads
//-----------------------------------------------------------
} elseif( $feed == 'youtubev2uploads' ) {
    $feedUrl = 'http://gdata.youtube.com/feeds/api/users/{username}/uploads?max-results={limit}&start-index={offset}&alt=json';
    
    
    $JSON = file_get_contents("https://gdata.youtube.com/feeds/api/users/".$users."/uploads?v=2&alt=jsonc&max-results=0");
    $JSON_Data = json_decode($JSON);
    $total = $JSON_Data->{'data'}->{'totalItems'};
    $totalVar = $modx->getOption('totalVar', $scriptProperties, 'total');
    $modx->setPlaceholder($totalVar,$total);
        if (empty($offset)) {$offset = '1';}
        else{$offset++;}
    $startIndex = $offset; //$modx->getOption('startIndex', $scriptProperties, 1);

    $videoParams = $modx->getOption('videoParams', $scriptProperties, '?fs=1');
    $excludeEmpty = explode(',', $modx->getOption('excludeEmpty', $scriptProperties, 'link'));
    $feeds = explode(',', $modx->getOption('users', $scriptProperties, ''));

    foreach ($feeds as $username) {
        $cacheId = 'jsonderulo-youtubeuploadsfeed-'.$cacheName.'-'.$username;

        if (($json = $modx->cacheManager->get($cacheId)) === null) {
            if ($ch === null) {
                $ch = curl_init();
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            }

            curl_setopt_array($ch, array(
              CURLOPT_URL => str_replace(array('{username}', '{limit}', '{offset}'), array($username, $limit, $startIndex), $feedUrl),
            ));


            $json = curl_exec($ch);
            if (empty($json)) {
                continue;
            }

            //$modx->cacheManager->set($cacheId, $json, $cacheTime);
        }

        $feed = json_decode($json);

        if ($feed === null) {
            continue;
        }

        $feeditems = $feed->feed;

        foreach ($feeditems->entry as $video) {

            foreach ($excludeEmpty as $k) {
                if ($video->$k == '') {
                    continue 2;
                }
            }

            $videoId = substr($video->id->{'$t'},42);
            $videoContent = $video->content->{'$t'};
            $videoContent = str_replace("\n","
",$videoContent);
            $rawFeedData[] = array(
                'published' => strtotime($video->published->{'$t'}),
                'picture' => $video->{'media$group'}->{'media$thumbnail'}[0]->url,
                'title' => $video->title->{'$t'},
                'ytlink' => $video->link[0]->href,
                'embedlink' => 'https://www.youtube.com/embed/' .$videoId. $videoParams,
                'videoId' => $videoId,
                'content' => $videoContent,
                'author' => $video->author[0]->name->{'$t'},
            );
        }
    }

    foreach ($rawFeedData as $image) {
        $output .= $modx->getChunk($tpl, $image);
    }

И вызов сниппета
[[!pdoPage?
   &elementClass=`modSnippet`
   &element=`JSONDerulo`
   &limit=`5`
   &feed=`youtubev2uploads`
   &tpl=`jd.youTube`
   &users=`YOUTUBE-CHANNEL`
   &cacheTime=`10`
   &cacheName=`youtube.cache`
   &pageLimit=`13`
]]
 
<div class="paging">
<ul class="pagination">
  [[!+page.nav]]
</ul>
</div>
и я кстати с youtube еще описание видео забираю в оригинале этого тоже нету
Андрей
13 января 2015, 18:34
3
+1
из моих Яндекс Новостей (в чанке rss):
<pubDate>[[!ShowDate_en? &val=`[[+publishedon]]`]] +0600</pubDate>
сниппет ShowDate_en:
<?php
setlocale(LC_ALL, 'en_US.UTF-8');
if ( $val == '' ) $val=time();
if ($format == '' ) $format = "%a, %d %b %Y %H:%M:%S";
return strftime($format, $val);
Василий Наумкин
09 января 2015, 10:40
1
+2
Какие именно директории занимают место можно посмотреть командой
du --si --max-depth=1 ~/www

На данный момент, как я вижу, 6 Гб занимает кэш ресурсов, который хранится в 13 601 файле.
du --si --max-depth=1 ~/www/core/cache

На вашем новом тарифе доступно 16 гигабайт SSD, так что должно хватить еще на долго.
Василий Наумкин
30 декабря 2014, 16:06
1
+1
Если у товаров несколько цветов, то получится ерунда. А вообще, все JSON поля копируются в msProductOption.

Так что нужно просто присоединить этот класс и сортировать по нему:
[[!msProducts?
	&parents=`0`
	&leftJoin=`{
		"msProductOption":{
			"class":"msProductOption",
			"on":"msProductOption.key = 'color' AND msProductOption.product_id = msProduct.id"
		}
	}`
	&select=`{
		"msProduct":"*",
		"msProductOption":"value as color"
	}`
	&sortby=`msProductOption.value`
	&sortdir=`ASC`
	&tpl=`@INLINE <p>[[+pagetitle]] [[+color]]</p>`
	&showLog=`1`
]]
Источник вдохновения — bezumkin.ru/training/course2/3006/
Сергей Скат
24 декабря 2014, 16:26
2
0
Кому интересно и кто айдет вопрос, mFilter2 уже отдает все результаты в json которые можно вертеть как угодно, вот мой код для реализации ленты

<script>
              var xhr_is_sent = false;        //флаг отправки
             $(window).scroll(function() {
                  
                     if  ($(window).scrollTop() == $(document).height() - $(window).height()) 
                     {
                        var url = '/assets/components/msearch2/action.php';
                        if (!xhr_is_sent) {
                            //отправляем запрос только если завершился предыдущий
                            xhr_is_sent = true;
                            $.post(url, {
                              action: 'filter',
                              pageId: '1',
                              'tv|area': '50,310393',
                              'tv|price': '1500,49300',
                              page: '8',
                              key: window.mse2Config.key // в это переменной содержится ключ , я так и не понял зачем он нужен но для каждого генерируется свой собственный 
                              },function(data){
                                $('#mse2_results').append($.parseJSON(data).data.results);
                                xhr_is_sent = false;
                            });
                        }
                    }
                });
        </script>
всем удачи, и всем спасибо кто помог в решении вопроса
Виктор Долгий
10 декабря 2014, 18:35
1
+1
Вот, собственно:
<?php
$pdo = $modx->getService('pdoFetch');
$id = $modx->getOption('id', $scriptProperties, $modx->resource->id);
$rank = $modx->getOption('rank', $scriptProperties, 0);
$size = $modx->getOption('size', $scriptProperties, '360x270');

$res = $pdo->getObject('msResourceFile',
	array('resource_id' => $id, 'rank' => $rank, 'path:LIKE' => '%/'.$size.'/'),
	array('loadModels' => 'ms2gallery','select' => 'url')
);
return $res ? $res['url'] : '';
Параметр &size=`360x270` (например).
Василий Наумкин
08 декабря 2014, 11:32
1
+1
Не знаю. Специально проверил и вот такие на выходе плейсхолдеры:

Источник файлов вот такой:
[{"w":120,"q":90,"zc":"0","bg":"000000"},{"h":270,"q":90,"zc":"0","bg":"000000"}]
Василий Наумкин
24 ноября 2014, 15:48
2
+1
А какое именно из всех изображений ресурса, первое? Вот тебе простейший сниппет:
<?php
$pdo = $modx->getService('pdoFetch');
$id = $modx->getOption('id', $scriptProperties, $modx->resource->id);
$rank = $modx->getOption('rank', $scriptProperties, 0);

$res = $pdo->getObject('msResourceFile',
	array('resource_id' => $id, 'rank' => $rank),
	array('loadModels' => 'ms2gallery','select' => 'url')
);
return $res ? $res['url'] : '';

Вызывать как-то так:
[[ms2GalleryImage?id=`[[*id]]`]]
Василий Наумкин
08 ноября 2014, 05:25
2
+1
Именно поэтому всегда нужно делать так:
$doc = '';
if ($parent = $modx->getObject('modResource', $input)) {
	$doc = $parent->get($options);
}
return $doc;