Василий Наумкин

Василий Наумкин

С нами с 08 декабря 2012; Место в рейтинге пользователей: #1
19 ноября 2015, 18:05
0
Yes, you right. Updated my code, now it works fine.
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:
19 ноября 2015, 09:55
+2
pdoTools can`t do this out of the box. You need to write your own snippet for it.

1. Get all resources
2. Loop through them
3. Get their createdon, split to year and month, than and into such array
$resources = array(
	'2015' => array(
		'11' => array(
			0 => array(
				'id' => 15,
				'pagetitle' => 'Some title',
				...
			),
			1 => array(...)
		)
	)
)
4. Loop through this array and template it
5. Show on site
6. (optional) Cache results

Of course, you can use pdoTools methods for this snippet.
18 ноября 2015, 06:25
0
Если не использовать сырые альфа-версии дополнений, то ничего больше ломаться не должно.
18 ноября 2015, 06:14
+1
Дублирование результатов запроса после leftJoin
Чтобы такого не было, нужно сгруппировать запрос:
$q->groupby('msOrder.id');

Если же нужно выбрать заказ + все его товары, то лучше не использовать leftJoin и добирать эти товары отдельным запросом во время оформления вывода заказа.

Ну а если нужно будет еще и сортировать по товарам, то тогда всё же оставляешь leftJoin и убираешь дубликаты уже во время оформления.
17 ноября 2015, 20:15
0
Не относится.

Ну, значит это косяк в miniShop2.2.
17 ноября 2015, 19:44
0
Может быть, проблема как раз в этом.
17 ноября 2015, 19:30
0
Не замечал такого ни разу.

Выглядит так, как будто товары были забиты каким-то скриптом импорта, и он надобавлял таких пустых значений.
17 ноября 2015, 15:48
0
Попробуй, для начала, вынести такой объёмный код в отдельный чанк.
17 ноября 2015, 15:36
0
Евгений, начните работу с pdoTools с чтения документации.
17 ноября 2015, 13:59
0
Я ни на что не намекаю.

Если проблема связана с mSklad — нужно обращаться в поддержку. Если не связана, то непонятно, зачем его вообще было упоминать в вопросе.
17 ноября 2015, 13:41
0
Я, почему-то, решил, что проблема здесь
Подскажите пожалуйста способ вывода доп.полей созданных mSklad при синхронизации с 1С
А поля не создаются как опции в miniShop2.
Ну если нет, то нет.
17 ноября 2015, 11:17
0
mSklad — платное дополнение, для него есть поддержка от автора, в магазине.
17 ноября 2015, 10:39
0
Я понятия не имею, что там у тебя и как.

Да и не очень-то интересно. Удачи.
17 ноября 2015, 09:09
0
Может, кэширование?

Документацию по ajax через pdoPage читал? Там всё работает без проблем.
17 ноября 2015, 07:45
+1
PHP не умеет динамически расширять классы.

Нужно расширить еще и pdoFetch вот так:
<?php
if (!class_exists('pdoToolsCustom')) {
	require 'pdotoolscustom.class.php';
}
class pdoFetchCustom extends pdoToolsCustom {
}
И указать его там же, в настройке pdoFetch.class — pdotools.pdofetchcustom.

В общем, советую переписать заметку и код по нашему обсуждению.
17 ноября 2015, 05:49
+1
Просто не вызывай нигде сниппеты msCart и msOrder.

Ну и ссылку на добавление в корзину и чанков убери. Это всё.
16 ноября 2015, 20:59
+1
Всё, оплатил. Вот реферальная ссылка на airbnb. Говорят, что дадут 1 333 рублей тому, кто по ней зарегистрируется и что-то забронирует.

Подробности.
16 ноября 2015, 20:18
+2
Ну, в общем, я купил билеты на самолёт и отправил запрос на бронирование квартиры.

С 17го по 21е декабря я железно буду в Минске. У кого есть желание встретиться лично — приезжайте!