TITAN-UZ

TITAN-UZ

С нами с 27 февраля 2014; Место в рейтинге пользователей: #56
Дмитрий Кондаков
20 марта 2015, 18:07
1
+1
title и date это что?
нужно еще добавить class_key который равен Ticket везде
but1head
17 марта 2015, 12:36
3
0
if($resource->class_key == 'msProduct' && $modx->event->name == 'OnDocFormSave' && $mode == 'new'){
	$article = $resource->get('article');
	$alias = ($article == '' ? $id : $article);
	$resource->set('alias', $alias);
	$resource->save();
}
для товаров, подставляет артикул вместо алиаса
Максим Кузнецов
20 февраля 2015, 10:15
1
+1
Смотри, все довольно просто. Создаешь свой сниппет, допустим, yoba1 с кодом:

<?php
	if ($modx->resource->hasChildren() != 0) { //смотрим кол-во потомков ресурса
		$params = array(); //перечисляем в массиве параметры сниппета
		$params['level'] = 2;
		$params['outerClass'] = 'side-menu';
		$params['tplParentRow'] = '@INLINE <li[[+classes]]><h3 [[+attributes]]>[[+menutitle]]</h3>[[+wrapper]]</li>';
		
		$result = $modx->runSnippet('pdoMenu', $params); //вызываем сниппет pdoMenu с нужными параметрами
	}
	else {
		$params = array();
		$params['parents'] = 52;
		$params['depth'] = 0;
		$params['tpl'] = 'tpl.SideNews';

		$result = $modx->runSnippet('pdoResources', $params);
	}
	return $result; //возвращаем результат

И вызываешь в нужном месте [[!yoba1]]. Итог: в 2 раза меньше запросов к бд.
Павел Левин
16 февраля 2015, 00:18
1
0
Я сделал по другому.

Создал простой сниппет:
// Определяем переменную с результатом
$result='';

// Ищем нужную cookie
if(isset($_COOKIE['last-sort'])) {
    $sort=preg_replace('/[^0-9\s]/','',$_COOKIE['last-sort']);
} else {
    $sort=0;
}

// Возвращаем результат
if ($sort == 1) {
    $result = '&sortby=`pagetitle` &sortdir=`ASC`';//по алфавиту
} elseif ($sort == 2) {
    $result = '&sortby=`publishedon` &sortdir=`DESC`';//по дате добавления
} elseif ($sort == 3) {
    $result = '&sortby=`editedon` &sortdir=`DESC`';//по дате обновления
} elseif ($sort == 4) {
    $result = '&sortby=`pagetitle` &sortdir=`DESC`';//по алфавиту
} elseif ($sort == 5) {
    $result = '&sortby=`publishedon` &sortdir=`ASC`';//по дате добавления
} elseif ($sort == 6) {
    $result = '&sortby=`editedon` &sortdir=`ASC`';//по дате обновления
}

return $result;

Далее я манипулирую с js. Подставляю значения cookies и классы для псевдо ссылок (спаны).
Соответственно сниппет я вызываю в вызове pdoPage.

Классы по умолчанию подставляются через js т.к. я заранее знаю, что у меня по умолчанию «сортировка по дате добавления» и я ссылаюсь на объект по индексу. Все манипуляции также происходят с индексами, за идеал я взял 1-3 и 4-6, манипулирую с 3-й, отталкиваясь от класса desc.

Расписал, мало ли кому будет интересно. В целом работает.
Василий Наумкин
13 февраля 2015, 21:52
1
0
В последних версиях MODX есть настройка cache_alias_map — попробуй отключить. Настройка cache_handler должна быть xPDOFileCache.

Также проверь все остальные настройки кэширования, чтобы были стандартными — прям сравни со свежеустановленным сайтом. Версию MODX тоже лучше обновить до последней стабильной — 2.3.3-pl.

Как я и предполагал, проблема у тебя общая, с тикетами никак не связанная.
Пашок
Пашок
13 февраля 2015, 09:37
1
0
Всем большое спасибо за помощь!!!

Как оказалось, достаточно плагином ставить у ресурса 2 поля:

<?php
switch($modx->event->name) {
	
	case 'OnDocFormSave':
		if($mode == 'new' && $resource->class_key == "Ticket") {
			
			$resource->set('published', true);
			$resource->set('publishedon', $resource->get('createdon') );
			$resource->save();
			
		}
		break;
	
}
Василий Наумкин
26 января 2015, 22:03
6
0
$pdo = $modx->getService('pdoFetch');
$result = $pdo->getArray(
	// Класс
	'msProduct',
	// Условие where
	array(
		'deleted' => false,
		'published' => true,
	),
	// Параметры выборки
	array(
		'parents' => 5, // Категория с товарами
		'innerJoin' => array(
			'Data' => array('class' => 'msProductData')
		),
		'select' => array('Data' => 'price'),
		'sortby' => 'Data.price',
		'sortdir' => 'asc',
	)
);
if (!empty($result)) {
	echo $result['price'];
}
// При желании можно лог посмотреть
echo '<pre>';
print_r($modx->getPlaceholder('pdoTools.log'));
Василий Наумкин
24 января 2015, 13:17
1
0
1. У нас есть тег code для оформления кода.

2. pdoFetch нужен, чтобы выбрать всё сразу, за один запрос. Там нет объектов, getTVValue и прочего. Ты получаешь готовый массив с данными:
$pdo = $modx->getService('pdoFetch');
$resources = $pdo->getCollection('modResource',
	// Условия выборки, т.е. параметр where
	array(
		'parent' => 58
	),
	// Параметры выборки
	array(
		'includeTVs' => 'code'
	)
);
echo '<pre>';
print_r($resources);
print_r($modx->getPlaceholder('pdoTools.log'));
echo '</pre>';
Вывод массива и лога выборки.
Саша Пекшев
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 еще описание видео забираю в оригинале этого тоже нету
Володя
26 декабря 2014, 13:41
1
+2
так напиши в плагин и все…
У меня вот такой давным давно вариант где то валялся…
switch($modx->event->name){
    case 'OnWebPagePrerender': 
        if (!empty($modx->resource) 
            && $modx->resource->get('cacheable') 
            && $modx->resource->get('published')
            && $modx->resource->get('searchable')
            && $modx->resource->get('richtext')
            && $modx->resource->_output != ''
        )
        {  
            $html = &$modx->resource->_output;
            $html = preg_replace('|\s+|', ' ', $html);
        }
        break;   
}