Андрей

Андрей

С нами с 09 апреля 2015; Место в рейтинге пользователей: #68
Andrey Grachov
19 апреля 2014, 12:06
1
+2
Это была дружеская помощь, если будет что-то серьезное — обращайтесь :)
Пример оставим для истории, для тех кто придет, а ссылка уже не работает:
// Вызов mFilter2
[[!mFilter2? &parents=`[[*id]]` &filters=`resource|publishedon:date` &tplFilter.row.resource|publishedon=`tpl.mFilter2.filter.date`]]

// Чанк tpl.mFilter2.filter.date
[[+idx:is=`0`:then=`
    <input type="hidden" name="[[+table]][[+delimeter]][[+filter]]" id="mse2_[[+table]]_[[+filter]]_[[+idx]]" value=""/>
    <div id="mse2_[[+table]]_[[+filter]]_[[+idx]]_datepicker"></div>
    <script type="text/javascript">
        $(function () {
            $('#mse2_[[+table]]_[[+filter]]_[[+idx]]_datepicker').datepicker({
                altField: '#mse2_[[+table]]_[[+filter]]_[[+idx]]',
                dateFormat: 'yy-mm-dd'
            });
        });
    </script>
`:else=``]]
grasp graspoff
24 марта 2014, 19:56
3
+1
class myDelivery extends msDeliveryHandler {
    public function getCost(msOrderInterface $order, msDelivery $delivery, $cost=0) {
    $totalCostDL=0;
    $products=$this->ms2->cart->get();
    foreach($products as $product){
        $costDL=$this->getPrDlCost($product);
        $totalCostDL += $costDL;
    }
    $cost += $totalCostDL;
    return $cost;
	}
Ну и функция с логикой
private function getPrDlCost($product) {
        $PrDlCost=1000000;
        $pids = $this->modx->getParentIds($product['id'],1);
        $PrCategory = $pids[0];
        $PrCount = $product[count];
        switch ($PrCategory) {
	case '67': 
				if ($PrCount <= 6) $PrDlCost = 1200;
				if ($PrCount > 6 && $PrCount <= 15) $PrDlCost = 1700;
				if ($PrCount > 15 && $PrCount < 25) $PrDlCost = 3900;
				if ($PrCount >= 25) $PrDlCost = 0;
                break;
		....
	}

Антон ХайЭксель
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.