Андрей

Андрей

С нами с 09 апреля 2015; Место в рейтинге пользователей: #70
Антон ХайЭксель
10 марта 2014, 12:49
1
0
Огромное спасибо.
Реализовал:
$(".ajax").colorbox({
onComplete:function(){ miniShop2.Cart.initialize(); },
});
+ отправил спасибо )
Антон ХайЭксель
10 марта 2014, 08:15
1
0
хм. заменил на подгрузку через colorbox, который не кеширует ajax запрос и получилось то что хотел.

Для тех кто столкнется решение просто:

js
$(document).ready(function () {
$(".ajax").colorbox();
});
чанк msMiniCart
<div id="msMiniCart" [[+total_count:isnot=`0`:then=`class="full"`:else=``]]>
	<div class="empty">
		<h4> Корзина: [[%ms2_minicart_is_empty]]</h4>
	</div>
	<div class="not_empty">
		<a class='ajax' href="[[~23]]"><h4>Корзина: <strong class="ms2_total_count">[[+total_count]]</strong> шт. - <strong class="ms2_total_cost">[[+total_cost]]</strong> р.</h4></a>
	</div>
</div>

ну и ресурс (у меня 23) — пустой шаблон с содержимым
[[!msCart?]][[!msOrder?]]
Василий Наумкин
06 февраля 2014, 22:39
2
+1
Объект msdUserGroup, его id совпадает с id группы пользователей, а скидка в поле discount.

Вывод юзеров с присоединением основной группы:
[[!pdoUsers?
	&tpl=`@INLINE <p>[[+id]] [[+fullname]] [[+discount]]</p>`
	&innerJoin=`{"msdUserGroup":{"class":"msdUserGroup","on":"msdUserGroup.id = modUser.primary_group"}}`
	&select=`{"modUser":"*","msdUserGroup":"*"}`
]]
Следует иметь в виду, что юзер может входить в несколько групп, и тогда показывать его скидку так просто уже не выйдет.
Peter Zenin
06 февраля 2014, 18:18
1
0
И в догонку еще вопрос — как в профиле пользователя (Office) вывести скидку этого пользователя (как показать ему его скидку в личном кабинете)?
Василий Наумкин
20 декабря 2013, 20:51
2
0
$id = $modx->resource->id;
$tpl = '@INLINE <a href="[[~[[+id]]]]">[[+pagetitle]]</a>';
$pdo = $modx->getService('pdoFetch');

$options = array(
	'innerJoin' => array(
		'msCategory' => array('on' => 'msCategoryMember.category_id = msCategory.id')
	),
	'select' => array('msCategory' => 'all'),
	'sortby' => 'msCategory.id'
);
$conditions = array('product_id' => $id);
$rows = $pdo->getCollection('msCategoryMember', $conditions, $options);

$output = '';
foreach ($rows as $row) {
	$output .= $pdo->getChunk($tpl, $row);
}

return $output;
Василий Наумкин
02 ноября 2013, 13:38
2
0
Самый простой вариант — сниппет в чанке оформления категории:
$price = 0;
$q = $modx->newQuery('msProduct', array('parent' => $id));
$q->innerJoin('msProductData', 'Data', 'msProduct.id = Data.id');
$q->sortby('Data.price', 'asc');
$q->select('Data.price');
$q->limit(1);
if ($q->prepare() && $q->stmt->execute()) {
	$price = $q->stmt->fetch(PDO::FETCH_COLUMN);
}
return $price;

При вызове нужно указать id категории:
[[!getMinPrice?id=`[[+id]]`]]
Сергей Савельев
03 февраля 2013, 02:27
1
0
Наконец освоил Ваш урок. Низкий поклон.

Хотелось бы привести пример:

Воспользовавшись сниппетом getResourceField вывести данные поля нужного ресурса

Код сниппета ajax:
// Откликаться будет ТОЛЬКО на ajax запросы
if ($_SERVER['HTTP_X_REQUESTED_WITH'] != 'XMLHttpRequest') {return;}

// сниппет будет обрабатывать не один вид запросов, поэтому работать будем по запрашиваемому действию
$action = $_POST['action'];

// Если в массиве POST нет действия - выход
if (empty($action)) {return;}

//А если есть - работаем
$res = '';
switch ($action) {
  case 'field': 
      $params = array();
      $params['id'] = $_POST['id'];
      $params['field'] = $_POST['field'];
      $res = $modx->runSnippet('getResourceField', $params); break;
  // А вот сюда потом добавлять новые методы
}

// Если у нас есть, что отдать на запрос - отдаем и прерываем работу парсера MODX
if (!empty($res)) {
  die($res);
}

Я создал отдельно ресурс в корне контекста, под названием ajax и соответствующим псевдонимом, он доступен по адресу mysite.ru/ajax.html, содержащий:
[[!ajax]]

Вероятно чтобы «не путался под ногами» вызов сниппета и централизовать адрес ajax запросов. На всякий случай задал пустой шаблон и, само собой, скрыл для меню.

Код в теге HEAD используемого для примера шаблона:
<script type="text/javascript" language="JavaScript" src="assets/js/jquery/main.js"></script>
<script type="text/javascript" language="JavaScript">
jQuery(function($){
	$('#results').load('ajax.html', {action: 'field', id: '56', field: 'content'}, function(){
    		alert('Запрос успешно выполнен! Данные получены.');
	});
});
</script>

Код в теге BODY, в любом удобном месте, используемого для примера шаблона:
<div id="results"></div>

При загрузке страницы с заданным шаблоном, используемым для примера, в тег div, под идентификатором results, произведётся асинхронная загрузка содержимого поля content ресурса с ID 56.