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

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

С нами с 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е декабря я железно буду в Минске. У кого есть желание встретиться лично — приезжайте!