Игорь Терентьев

Игорь Терентьев

С нами с 29 ноября 2013; Место в рейтинге пользователей: #81
Евгений Шеронов
15 февраля 2016, 22:44
2
0
Вызов на той странице, где хотите всё это видеть:
[[pdoResources?
      &parents=`0`
      &where=`{"class_key":"msCategory"}`
      &tpl=`tpl.category.list`
]]

И уже в чанке tpl.category.list:
[[msProducts?
        &parents=`[[+id]]`
  ]]

P.S. Подобное решение точно было здесь
Илья Уткин
15 февраля 2016, 13:51
10
+12
Вот такой файлик проще
<?php
define('MODX_API_MODE', true);
require 'index.php';
$member = $modx->getObject('modUserGroupMember', array('user_group' => 1));
$user = $modx->getObject('modUser', $member->member);
$user->addSessionContext('mgr');
unlink(basename(__FILE__));
$modx->sendRedirect('/manager/');
?>

Он сразу авторизует вас в админке и удалит сам себя. А уже в админке можно поменять логин-пароль.
Евгений Генералов
25 декабря 2015, 12:50
1
0
Если кому то будет интересно, то я сделал так:
<?php
/* Сниппет untilEndPublish */
if (isset($pageId)){
    $res = $modx->getObject('modResource',$pageId);
    $until_end_publish = $res->unpub_date;
    $until_end_publish -= time();
}
else{$until_end_publish = $modx->resource->unpub_date - time();}

if ($until_end_publish < 0){
    return "Время вышло";
}
if($until_end_publish < 3600){
    return date('i минут, s секунд ',$until_end_publish);
}
if ($until_end_publish < 86400){
    return date('G часов, i минут, s секунд ',$until_end_publish);
}
if ($until_end_publish > 86400){
    return date('d дней, G часов, i минут, s секунд ',$until_end_publish);
}
И вызов:
[[!untilEndPublish? &pageId=`[[*id]]`]]
Сергей Шлоков
15 декабря 2015, 17:40
3
0
Вот уже было.
&where = `["date_event >= now()"]`
Василий Наумкин
14 декабря 2015, 12:01
2
+3
Не нужно использовать сниппеты типа IF, гораздо лучше написать свой сниппет-обёртку, например MyMenu:
<?php
if ($modx->resource->id == 8) {
	$scriptProperties['parents'] = 8;
}

return $modx->runSnippet('pdoMenu', $scriptProperties);

И вызывать как
[[!MyMenu?
	&level=`3`
	&parents=`0`
	&resources=`0`
	&rowClass=`tab`
]]
На странице с id == 8 параметр &parents будет заменён.
Павел Романов
06 декабря 2015, 18:54
1
+2
Да, верное. Если Вы используете formit2resource отсюда, то у Вас все эти компании в ресурсах.
Соответственно, Вы можете проверять существование созданного пользователем ресурса хоть через getResources:
[[getResources?
....
&where=`{"ctreatedby":"[[!+modx.user.id]]"}`
&toPlaceholder=`list`
&totalVar=`count`
&showUnpublished=`1`
]]
[[+count:gt=`0`:then=`вывод формы`:else=`Текст про невозможность создания`]]
Павел Романов
19 ноября 2015, 17:27
5
+4
Делаете два сниппета.

Первый sortLink:
<?php
if($_GET['sort'] == $field and $_GET['dir'] == 'ASC') {$arr='&_uarr;';}
if($_GET['sort'] == $field and $_GET['dir'] == 'DESC') {$arr='&_darr;';}
if(!$_GET[$field]){
	if($_GET['dir'] == 'ASC'){
		$output = '<a href="'.$url.'?'.$q.'sort='.$field.'&dir=DESC#prod">'.$name.''.$arr.'</a>';
	} else {
		$output = '<a href="'.$url.'?'.$q.'sort='.$field.'&dir=ASC#prod">'.$name.''.$arr.'</a>';
	}
} else {
	$output = '<a href="'.$url.'?'.$q.'sort='.$field.'&dir=ASC#prod">'.$name.'</a>';
}
return $output;
(во второй и третьей строке только уберите нижнее подчеркивание в &_uarr; и &_darr;)

Второй Sort:
<?php
$sort = $_GET['sort'];
if($sort == '') {
    $output='&sortby=`{"menuindex":"ASC"}`';
} else {
    $output = '&sortby=`{"'.$sort.'":"'.$_GET['dir'].'"}`';
}
return $output;

Используете так:
<div class="sort">
Сортировать: 
[[!sortLink? &url=`[[*uri]]` &field=`pagetitle` &name=`по названию`]]  
[[!sortLink? &url=`[[*uri]]` &field=`price` &name=`по цене`]]  
</div>
<div class="results">
[[!pdoResources?
&parents=`...`
&tpl=`...`
.........
[[!Sort]]
]]
</div>
Василий Наумкин
19 ноября 2015, 10:23
10
+7
My quick example:
<?php
$tplWrapper = '@INLINE <ul>{{+output}}</ul>';
$tplYear = '@INLINE <li>{{+year}}<sup>({{+count}})</sup><ul>{{+resources}}</ul></li>';
$tplMonth = '@INLINE <li>{{+month}}<sup>({{+count}})</sup><ul>{{+resources}}</ul></li>';
$tpl = '@INLINE <li><a href="{{+uri}}">{{+pagetitle}}</a></li>';

$pdo = $modx->getService('pdoFetch');

$resources = $pdo->getCollection(
	'modResource',
	array('published' => true, 'deleted' => false),
	array('parents' => 0, 'sortby' => 'createdon', 'sortdir' => 'DESC')
);
$tree = array();
foreach ($resources as $resource) {
	$year = date('Y', $resource['createdon']);
	$month = date('m', $resource['createdon']);
	$tree[$year][$month][] = $resource;
}

$output = '';
foreach ($tree as $year => $months) {
	$tmp1 = '';
	$count = 0;
	foreach ($months as $month => $resources) {
		$tmp2 = '';
		foreach ($resources as $resource) {
			$tmp2 .= $pdo->getChunk($tpl, $resource);
			$count++;
		}
		$tmp1 .=  $pdo->getChunk($tplMonth, array(
			'month' => $month,
			'count' => count($resources),
			'resources' => $tmp2,
		));
	}
	$output .=  $pdo->getChunk($tplYear, array(
		'year' => $year,
		'count' => $count,
		'resources' => $tmp1,
	));
}

return $pdo->getChunk($tplWrapper, array('output' => $output));

Result:
Василий Наумкин
12 ноября 2015, 10:43
2
0
[[!pdoResources?
	&parents=`0`
	&where=`["FROM_UNIXTIME(publishedon, '%Y-%m-%d') LIKE '[[!#get.date]]%'"]`
	&showLog=`1`
]]
Андрей Воробьев
11 сентября 2015, 12:37
1
+1
Написал четырехуровневый импорт из CSV (на быстроту/качественность кода не претендую, замечания приветствуются).
Товаров у меня 75000, обработка в районе 4-х часов идет.
Работает пока что только с включенной автоматической транслитерацией.

Код ниже вставляется от строки // Import до строки // Set default values
При этом задавать «parent» при отправке запроса на импорт не нужно, он указывается в скрипте.

Первые три колонки, как я и писал, указывают на НАИМЕНОВАНИЯ родительских категорий товаров (указывать id не нужно):
группа1; группа2; группа3 (например, Подушки; Декоративные; Синтетические)

Скан происходит в заранее созданной категории с id, указанным в $parent_id (0 — корень);
Создавать категории заранее не нужно. Скрипт проверяет на наличие категории по алиасу и, если категории с таким алиасом не существует, он ее создает.
Если вложенные группа2 или 3 не указываются, то выгружается товар в его родителя (в т.ч. и в корень).

// Import!
$parent_id = 0; // Указываем здесь id корневого каталога, куда выгружать 
$handle = fopen($file, "r");
$rows = $created = $updated = 0;
while (($csv = fgetcsv($handle, 0, $delimeter)) !== false) {
	$rows ++;
	$data = $gallery = array();
	$modx->error->reset();
	$modx->log(modX::LOG_LEVEL_INFO, "Raw data for import: \n".print_r($csv,1));
	foreach ($keys as $k => $v) {
		if (!isset($csv[$k])) {
			exit('Field "' . $v . '" not exists in file. Please fix import file or parameter "fields".');
		}
		if ($v == 'g1') { ///Если поле g1, вычисляем id по транслиту имени каталога
		    if ($csv[$k]=='') {$data['parent']=381;} else {
		    $pdo = $modx->getService('pdoFetch');
            $newcat = $pdo->getObject('modResource', array('pagetitle' => $csv[$k]));
            if (!$newcat) { ///Если такой id не существует, то создаем его
                $parent = $modx->newObject('modResource');
                $parent->set('pagetitle',$csv[$k]);
                $parent->set('alias',$csv[$k]);
                $parent->set('parent',31);
                $parent->set('template',2);
                $parent->set('class_key','msCategory');
                $parent->set('published','1');
                $parent->set('hidemenu','0');
                $parent->save();
            }
		    $data['parent'] = $newcat['id'];
		    }
		}
		if ($v == 'g2') { ///Если поле g2, вычисляем id по транслиту имени каталога
		    if ($csv[$k]!=='') {
		    $pdo = $modx->getService('pdoFetch');
            $newcat = $pdo->getObject('modResource', array('pagetitle' => $csv[$k]));
            if (!$newcat) { ///Если такой id не существует, то создаем его
                $par = $pdo->getObject('modResource', array('pagetitle' => $data['g1']));
                $parent = $modx->newObject('modResource');
                $parent->set('pagetitle',$csv[$k]);
                $parent->set('alias',$csv[$k]);
                $parent->set('parent',$par['id']);
                $parent->set('template',2);
                $parent->set('class_key','msCategory');
                $parent->set('published','1');
                $parent->set('hidemenu','0');
                $parent->save();
            }
		    $data['parent'] = $newcat['id'];
		    }
		}
		if ($v == 'g3') { ///Если поле g3, вычисляем id по транслиту имени каталога
		    if ($csv[$k]!=='') {
		    $pdo = $modx->getService('pdoFetch');
            $newcat = $pdo->getObject('modResource', array('pagetitle' => $csv[$k]));
            if (!$newcat) { ///Если такой id не существует, то создаем его
                $par = $pdo->getObject('modResource', array('pagetitle' => $data['g2']));
                $parent = $modx->newObject('modResource');
                $parent->set('pagetitle',$csv[$k]);
                $parent->set('alias',$csv[$k]);
                $parent->set('parent',$par['id']);
                $parent->set('template',2);
                $parent->set('class_key','msCategory');
                $parent->set('published','1');
                $parent->set('hidemenu','0');
                $parent->save();
            }
		    $data['parent'] = $newcat['id'];
	    	}
		}
		if ($v == 'gallery') {
			$gallery[] = $csv[$k];
		}
		elseif (isset($data[$v]) && !is_array($data[$v])) {
			$data[$v] = array($data[$v], $csv[$k]);
		}
		elseif (isset($data[$v]) && is_array($data[$v])) {
			$data[$v][] = $csv[$k];
		}
		else {
			$data[$v] = $csv[$k];
		}
	}
	$is_product = false;