TITAN-UZ

TITAN-UZ

С нами с 27 февраля 2014; Место в рейтинге пользователей: #56
De Ribaskin
03 декабря 2014, 09:30
1
0
Запрос:
[[pdoResources?
	&parents=`15`
	&tpl=`Новости_tpl`
	&tplWrapper=`Новости_wrapper_3x`

	&limit=`15`
	&panel=`15`
	&modulus=`3`
]]

Новости_tpl
<div class="item">
	<a href="[[~[[+id]]]]" title="[[+menutitle]]">[[+pagetitle]]</a>
</div>
[[+idx:ne=`[[+panel]]`:and:mod=`[[+modulus]]`:is=`0`:then=`</div><div class="panel">`]]

Новости_wrapper_3x
<div class="panel">
	[[+output]]
</div>

Но лучше чтоб верстальщик избегал подобных оберток там где они не нужны.
Виталий Киреев
03 декабря 2014, 05:34
1
0
Можно в чанк rowTpl добавить примерно следующее
[[[+idx:mod=`3`:is=`1`:then=`<div class="row">`]]
...
[[+idx:mod=`3`:is=`0`:then=`</div>`:else=`[[+idx:is=`[[+total]]`:then=`</div>`]]`]]
Evgeny Epifanov
22 сентября 2014, 17:28
2
+2
Если кому-то интересно, решил все кардинально:
if ($modx->event->name == 'OnLoadWebDocument') {
	$uri = $_SERVER['REQUEST_URI'];
	if ($modx->resource->isfolder && substr($uri, -1) != '/' && !strpos($uri, '?')) {
		$modx->sendRedirect($modx->makeUrl($modx->resource->id),array('responseCode' => 'HTTP/1.1 301 Moved Permanently'));
	}
}
Сергей Шлоков
05 сентября 2014, 13:29
5
0
Если так просто, хотелось бы узнать как. Лично у меня не получилось ни на 2.2 ни на 2.3. — не хочет работать этот friendly_urls_strict.
Поэтому решаю эту задачу одним из способов:
1. Выставляю канонический урл
<link rel="canonical" href="[[~[[*id]]]]? &scheme=`full`]]" />
2. Или добавляю в .htaccess код
# Rewrite domain.com -> domain.com/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\..{1,10}$
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://site.ru/$1/ [L,R=301]
Работает гарантировано.
Василий Наумкин
18 сентября 2013, 17:23
9
0
<?php
$tvid = 1; // id нужного ТВ параметра
$res = array(); // Сюда забиваем результаты

$q = $modx->newQuery('modTemplateVarResource', array('tmplvarid' => $tvid));
$q->select('contentid,value');
if ($q->prepare() && $q->stmt->execute()) {
	while ($row = $q->stmt->fetch(PDO::FETCH_ASSOC)) {
		$res[$row['contentid']] = $row['value'];
	}
}
print_r($res);

Получишь массив с id ресурсов и значенями ТВ c id = 1.
Василий Наумкин
01 июля 2013, 11:49
1
0
Теперь понял. Из-за разделителя "/" решил, что сниппет должен показывать уровень вложения товара в категориях.

Тогда предлагаю вот такой код:
<?php
$currentID = $modx->resource->id;
$parentID = $modx->resource->parent;
$delimeter = ' , ';
$scheme = $modx->getOption('link_tag_scheme');

$q = $modx->newQuery('msCategory');
$q->leftJoin('msCategoryMember', 'msCategoryMember', array(
	'`msCategory`.`id` = `msCategoryMember`.`category_id`'
));
$q->sortby('pagetitle','ASC');
$q->select(array('id','pagetitle'));
$q->where('`msCategoryMember`.`product_id` = '.$currentID.' OR `id` = '.$parentID);

$result = array();
if ($q->prepare() && $q->stmt->execute()) {
	while ($row = $q->stmt->fetch(PDO::FETCH_ASSOC)) {
		$url = $modx->makeUrl($row['id'], '', '', $scheme);
		$result[] = '<a href="'.$url.'">'.$row['pagetitle'].'</a>';
	}
}

return implode($delimeter, $result);

Выбирает все категории за один запрос и самостоятельно генерирует ссылки согласно настроек сайта. Работать будет немного быстрее.
Алексей
12 мая 2013, 09:12
1
0
О, я такое делал, все просто.

В чанке создания/редактирования тикета заменяем select на другой:
<select name="parent" >[[!getSectionsList]]</select>
И создаем сниппет getSectionsList с примерно такм кодом (только на 16 строке необходимо поменять условие, там задан родитель «0» и в моем случае template):
<?php
$tpl = '<option value="[[+id]]" [[+selected]]>[[+title]]</option>';
$current = 0;
if(isset($_REQUEST['parent'])){
    $current = intval($_REQUEST['parent']);
}
else if(isset($_REQUEST['tid'])){
    $post = $modx->getObject('modResource', intval($_REQUEST['tid']));
    if($post != null){
        $current = $post->get('parent');
    }
}

$q = $modx->newQuery('modResource');
$q->where(array('parent' => 0, 'template' => 16, 'published' => 1, 'deleted' => 0));
$q->sortby('menuindex', 'ASC');
$parents = $modx->getCollection('modResource', $q);
$parentsIds = array();
foreach($parents as $parent){
    $parentsIds[] = $parent->get('id');
}

$q = $modx->newQuery('modResource');
$q->where(array('parent:IN' => $parentsIds, 'template' => 14, 'published' => 1, 'deleted' => 0));
$q->sortby('menuindex', 'ASC');
$blogs = $modx->getCollection('modResource', $q);

$output = array();
foreach($parents as $parent){
    $output[] = '<optgroup label="'.$parent->get('pagetitle').'">';
    $pid = $parent->get('id');
    foreach($blogs as $blog){
        if($blog->get('parent') == $pid){
            $selected = $current == $blog->get('id') ? 'selected="selected"' : '';
            $option = str_replace('[[+title]]', $blog->get('pagetitle'), $tpl);
            $option = str_replace('[[+id]]', $blog->get('id'), $option);
            $option = str_replace('[[+selected]]', $selected, $option);
            $output[] = $option;
        }
    }
    $output[] = '</optgroup>';
}
return implode("\n", $output);
Алексей Добряков
11 февраля 2013, 11:51
1
0
Сниплет:
if ($thread = $modx->getObject('TicketThread', array('resource' => $id))) {
	echo $thread->get('comments');
};
Вызов:
[[!qtyComments? &id=`[[+id]]`]] //как раз вызов в getResources
Василий Наумкин
18 января 2013, 07:00
1
0
Вот тебе сниппет getTodayIds, который присоединяет таблицу с ТВ и выбирает по ней подходящие id.
Нужно указать id ТВ с датой
<?php
$tvid = 1; // id ТВ с датой
$date = date('Y-m-d'); // Сегодня

$q = $modx->newQuery('modResource');
$q->leftJoin('modTemplateVarResource', 'TV', 'modResource.id = TV.contentid AND TV.tmplvarid = '.$tvid);
$q->select('modResource.id');
$q->where('DATE(TV.value) = "'.$date.'"');

if ($q->prepare() && $q->stmt->execute()) {
	$ids = $q->stmt->fetchAll(PDO::FETCH_COLUMN);
	return implode(',', $ids);
}

Вызываем в getPage:
[[!getPage?
	&element=`getResources`
	&resources=`[[!getTodayIds]]`
]]
Василий Наумкин
05 ноября 2012, 21:52
1
0
Очень просто:
  1. Создать ТВ параметр hits
  2. Назначить его статьям
  3. При загрузке статьи плагином увеличивать ТВ параметр на 1

Пример плагина:
if ($modx->event->name == 'OnLoadWebDocument') {
	$resource = $modx->event->params['resource'];
	$hits = $resource->getTVValue('hits');
	$resource->setTVValue('hits', $hits + 1);
}