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

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

С нами с 08 декабря 2012; Место в рейтинге пользователей: #1
Василий Наумкин
28 мая 2013, 06:57
0
Как ты себе это представляешь? Список связанных товаров, что ли, отключать\включать?

В любом случае, есть возможность выводить всё, что угодно, через произвольный сниппет.
Василий Наумкин
27 мая 2013, 21:30
0
Right placeholders is [[+address.comment]] but in yoour case, i think, it is empty.

Why it field is hidden? If you are hiding it from user and want to write a default parameter, you need to do change it:
<input type="hidden" id="comment" name="comment" value="No Sales Agent" />

By the way, you must see this comment in manager, when viewing the order. It will be at the bottom of address tab.
Василий Наумкин
27 мая 2013, 18:13
0
You are welcome!
Василий Наумкин
27 мая 2013, 16:09
0
I can`t explain it on english, it is too complicate.

But i have a idea. You can disable email notification to buyer on status «new» and notice about it will receive only site manager.

Then he check all what he need and switch status to «Verified» — and on save of order will be sent email to buyer.


On each status you can set separate chunks for admin and manager.
I think — this a decision.
Василий Наумкин
27 мая 2013, 15:57
0
Если обрывается по timeout — смотреть надо в логах сервера.

Предварительно можно еще в php.ini включить отображение всех ошибок.
error_reporting = -1
display_errors = 1
Василий Наумкин
27 мая 2013, 06:49
0
Почему нельзя? Я же написал — как.

Плагины это стандартная функция MODX, как и ТВ параметры, там нет ничего страшного. Осваивай.
Василий Наумкин
27 мая 2013, 06:45
0
Для регистрации скриптов на фронтенд из php есть специальные функции regClientScript и regClientStartupScript.

Твоя задача решается так:
$modx->regClientStartupScript('
	<script type="text/javascript">
		var sessionId = "'.$session.'";
	</script>
', true);

После загрузки страницы ты увидишь это в ее исходном коде, только вместо $session будет реальное значение.
Василий Наумкин
27 мая 2013, 06:37
2
0
Оттого, что vendor в таблице msProductData — это и есть число.

Если хочешь выводить имена производителей — есть 2 способа.
Первый, побыстрее: нужно создать дополнительное поле (или ТВ параметр) и сохранять туда плагином это имя. Ну а потом фильтровать по этому полю.

Второй, погибче: выбирать и выдавать данные собственным сниппетом. Его нужно указать параметру через двоеточие, вот так:
&includeMSList=`vendor:extra_filter_vendor`

Вот кож сниппет extra_filter_vendor, для вывода производителей товаров:
$ids = $scriptProperties['ids'];
$param = $scriptProperties['param'];
if (empty($ids) || empty($param)) {return false;}

$q = $modx->newQuery('msVendor');
$q->leftJoin('msProductData', 'Data', 'Data.vendor = msVendor.id');
$q->select('Data.id,msVendor.name');
$q->where(array('Data.id:IN' => $ids));

if ($q->prepare() && $q->stmt->execute()) {
	$res = $q->stmt->fetchAll(PDO::FETCH_ASSOC);
	$arr = array(
		'name' => 'Производитель'
		,'type' => 'text'
		,'values' => array()
	);
	foreach ($res as $v) {
		$arr['values'][$v['name']][] = $v['id'];
	}
	return json_encode($arr);
}

Таким образом можно выдать любую информацию в фильтр.
Василий Наумкин
27 мая 2013, 06:29
0
Василий не единственный программист в СНГ.

Может, и прикрутим когда-то что-то подобное, но только после более важных вещей, типа личного кабинета и системы скидок.
Василий Наумкин
27 мая 2013, 06:12
0
There is a lot of placeholders, so we need to use prefixes:
[[+user.*]] - modUserProfile fileds. For example [[+user.fullname]]
[[+address.*]] - msOrderAddress fields, filled when order. For example, [[+address.city]]
[[+delivery.*]] - msDelivery fields. For example, [[+delivery.name]]
[[+payment.*]] - msPayment fields. For example [[+payment.name]]

And of course, msOrder placeholders, without prefix: [[+id]], [[+num]], [[+weight]],
[[+cart_count]] and so on.

You can see all fields of objects in scheme of component. Here is visualizer.
Василий Наумкин
27 мая 2013, 05:59
0
Email will be sent to the buyer email.

If you want to change this — you need to overload function changeOrderStatus() in your order class. See annoucement of MS 2.0.1.
Василий Наумкин
26 мая 2013, 18:05
0
Плагином на событие msOnBeforeCreateOrder.

В переменной $order будет объект msOrder, меняй ему номер как хочешь.
Василий Наумкин
26 мая 2013, 17:08
0
У тя поди flash нет на восьмерке. Загрузка кнопочкой работает через него, drag-n-drop в таблицу — на html5.

Специально 2 вида загрузки, чтобы работал хотя бы один.
Василий Наумкин
26 мая 2013, 17:05
0
Все четко работает, показывает верное кол-во зеленых товаров.

Циферки — это сколько ты получишь вариантов, при нажатии на параметр. Если включить зеленый (8), то вместе с красным товаров станет 12. Без зеленого, одник красных — только 4.

Данная функция позволяет отключать невозможные варианты фильтров (когда 0 позиций).
Василий Наумкин
26 мая 2013, 16:27
0
Напиши, у тебя может понятнее будет, отдельной заметкой.

Я перенесу ее в «расширения».
Василий Наумкин
26 мая 2013, 14:48
0
Принято!

Удачной работы =)
Василий Наумкин
26 мая 2013, 09:49
0
На minishop2.com есть доступ в админку (логин\пароль demo), там открыты все ресурсы, чанки и сниппеты для просмотра.

Не знаю, как еще доступнее показать рабочий пример.
Василий Наумкин
26 мая 2013, 08:11
0
minishop2.com/msearch.html — обновил пример, теперь он работает и без поиска.

То есть, если есть поисковый запрос — будут выведены найденные товары, если нет — все то все товары из указанных категорий.
Василий Наумкин
26 мая 2013, 07:59
0
$tpls = explode(',', $modx->getOption('minishop.goods_tpl'));
Нет в MS2 такого параметра, тут другой сниппет нужен.

Сниппет getCatIds, возвращает id товаров, через запятую:
<?php
if (!empty($_REQUEST['query'])) {
	$modx->setPlaceholder('parents', @$_REQUEST['parents']);
	return;
}

if (!isset($parents) || empty($parents)) {
	$parents = $modx->resource->id;
}
	
if (empty($depth)) {$depth = 1;}
$pids = array_map('trim', explode(',', $parents));
$parents = $pids;
foreach ($pids as $v) {
	if (!is_numeric($v)) {continue;}
	$parents = array_merge($parents, $modx->getChildIds($v, $depth));
}

$ids = array();
$q = $modx->newQuery('msProduct', array('parent:IN' => $parents, 'class_key' => 'msProduct', 'published' => 1, 'deleted' => 0));
$q->select('id');
if ($q->prepare() && $q->stmt->execute()) {
	$ids = $q->stmt->fetchAll(PDO::FETCH_COLUMN);
}

$q = $modx->newQuery('msCategoryMember', array('category_id:IN' => $parents));
$q->select('product_id');
if ($q->prepare() && $q->stmt->execute()) {
	$members = $q->stmt->fetchAll(PDO::FETCH_COLUMN);
}

if (!empty($members)) {$ids = array_merge($ids, $members);}
return implode(',', $ids);
Нужно указать параметр parents, с родителями, еще есть depth — глубина вложенности запроса.

Сниппет нужно указать в вызове mFilter.
[[!mFilter?
	&resources=`[[!getCatIds?parents=`21`]]`
	&includeTVs=`0`
	&includeMS=`1`
	&includeMSList=`price,new,favorite,popular,size,color`
	&sortFilters=`ms_new,ms_favorite,ms_popular,ms_size,ms_color,ms_price`
	&tpl=`tpl.msProducts.row`
]]
Деньги отправляй через личный кабинет, я спишу за консультацию =)