Максим Кузнецов

Максим Кузнецов

С нами с 01 июля 2013; Место в рейтинге пользователей: #33
Максим Кузнецов
12 июня 2015, 13:28
0
Не за что.)

Если с минимальными потерями (корзины похожи, но отличаются незначительно) — то легче всего при помощи ксс..))
<div class="ms2_total_product mini">[[!msCart]]</div>
<div class="ms2_total_product main">[[!msCart]]</div>
В противном случае — редактировать основной javascript-файл, передавая в него параметр, какую страницу подгружать при обновлении и перехватывать его в классе корзины, добавляя зависимые от него условия вывода чанков.

Ну и (за это уже не ручаюсь) — посмотреть, переварит ли сниппет msCart параметры &tplRow и &tplOuter и, если нет, то добавить ему такую возможность (но это плохое решение [костыль], говорю сразу).
Максим Кузнецов
12 июня 2015, 13:16
+1
Если не ошибаюсь, с определенной версии minishop'a требуемые чанки выглядят вот так:
$tplOuter = 'tpl.msCart.outer';
$tplRow = 'tpl.msCart.row';
Проверьте, так ли называются ваши чанки и попробуйте заменить эти строчки.
Максим Кузнецов
12 июня 2015, 13:09
+1
Раз появляется массив — значит js нормально отправляет ajax-запрос и получает результат.

=> проблема в классе корзины, которая возвращает данные, не распихав массив по чанку и его плейсхолдерам. Кидайте код класса корзины (+ вы ведь указали ваш новый класс в системных настройках minishop'a?)
Максим Кузнецов
12 июня 2015, 12:57
+1
Другое оформление — редактировать содержимое в выставленных чанках.

По поводу массива — кидайте логи ошибок модкса, если в них что-то попадает. Ну и + чанки необходимо указывать те, которые есть в родном классе msCartProductHandler
Максим Кузнецов
12 июня 2015, 12:24
+1
$tplOuter = 'msCartOuter';
$tplRow = 'msCartRow';
— необходимо указать существующие чанки.
Максим Кузнецов
12 июня 2015, 01:34
+1
https://modx.pro/solutions/3942-dynamic-update-of-the-basic-basket/ + вот так исправлять ошибки в логе для реализации по первой ссылке.
Максим Кузнецов
12 июня 2015, 00:20
+1
Ну, как вариант — выставлять условия на плейсхолдер итоговой цены.

Для чанка корзины (tpl.msCart.outer):
[[+total_count:lt=`5000`:then=`
Для оформления заказа сумма должна превышать 5000 рублей.
`:else=`
(дефолтное содержание чанка корзины с кнопкой для оформления заказа)
`]]
Для чанка оформления заказа (tpl.msOrder.outer) использовать ту же логику, только плейсхолдером выступит [[+order_cost]]

+ перехватывать итоговую стоимость плагином на события msOnBeforeChangeOrderStatus и аналогичным, сравнивая стоимость с требуемой и, в зависимости от этого, редиректить или выводить необходимые алерты.

Единственное, если у вас, допустим, расширен класс корзины для ajax-обновления, то также придется повесить условия на javascript.
Максим Кузнецов
10 июня 2015, 14:45
0
Необходимо создать плагин и включить его на событие OnDocFormSave.

Код примерно такой:

<?php
	if ($modx->event->name == 'OnDocFormSave') {
		if ($resource->get('template') == 'номер_шаблона' AND strlen($resource->get('introtext')) > 0) {
			$resource->setTVValue('название_тв', $resource->get('introtext'));

			$resource->save();
		}

	}
Максим Кузнецов
10 июня 2015, 08:12
0
Все работает, только в лог сыпятся ошибки:

[2015-06-10 08:11:24] (ERROR @ /home/s2040/www/system_heart/components/minishop2/custom/cart/mscustomcarthandler.class.php : 30) PHP warning: Missing argument 1 for myCustomCart::getProducts(), called in /home/s2040/www/system_heart/components/minishop2/custom/cart/mscustomcarthandler.class.php on line 13 and defined
[2015-06-10 08:11:24] (ERROR @ /home/s2040/www/system_heart/components/pdotools/model/pdotools/pdofetch.class.php : 18) Recoverable error: Argument 1 passed to pdoFetch::setConfig() must be of the type array, null given, called in /home/s2040/www/system_heart/components/pdotools/model/pdotools/pdotools.class.php on line 41 and defined
[2015-06-10 08:11:24] (ERROR @ /home/s2040/www/system_heart/components/pdotools/model/pdotools/pdofetch.class.php : 45) PHP warning: array_merge(): Argument #2 is not an array
[2015-06-10 08:11:24] (ERROR @ /home/s2040/www/system_heart/components/pdotools/model/pdotools/pdotools.class.php : 51) Recoverable error: Argument 1 passed to pdoTools::setConfig() must be of the type array, null given, called in /home/s2040/www/system_heart/components/pdotools/model/pdotools/pdofetch.class.php on line 46 and defined
[2015-06-10 08:11:24] (ERROR @ /home/s2040/www/system_heart/components/pdotools/model/pdotools/pdotools.class.php : 66) PHP warning: array_merge(): Argument #2 is not an array
Максим Кузнецов
09 июня 2015, 19:50
0
метод clearCache()
Подскажите, пожалуйста — старый метод обновления кэша через cacheManager больше не используется?

$modx->cacheManager->refresh(array('system_settings' => array()));
Максим Кузнецов
09 июня 2015, 19:48
-1
Перегуглил все, что только можно — подскажите, пожалуйста, как не меняя основной плагин/ядро минишопа реализовать общую корзину для определенных контекстов?
Максим Кузнецов
08 июня 2015, 12:52
0
Дело ваше..)

Но, к слову, наличие полноценных и подписанных доп.ячеек никогда не было гарантом того, что манагеры/контенщики будут заполнять их правильно..)
Максим Кузнецов
07 июня 2015, 21:57
0
Наверное, лучше вывести это в плагин на событие OnDocFormSave, чтобы не нагружать вызов.

Как-то в духе:

if ($modx->event->name == 'OnDocFormSave') {
	if($resource->get('class_key') == 'msProduct'){
		$tv_value = $resource->getTVValue('tv_name'); //заменить tv_name на название тв-поля/параметра товара

		//кол-во необходимых нулей
		if (strlen($tv_value) < 3) {
      			$newTvValue = = '0' . $tv_value;
			$resource->set('tv_name', $newTvValue);
		}

		$resource->save();
	}
}
Максим Кузнецов
06 июня 2015, 14:45
0
Диапазон сайтов, где необходим функционал бронирования чего-либо по календарным дням.
Максим Кузнецов
06 июня 2015, 14:32
0
Выглядит здорово.) Только достаточно узконаправленно — даже немного жаль, что такой серьезный модуль имеет достаточно узкую область применения.
Максим Кузнецов
03 июня 2015, 20:47
0
Один раз был вынужден делать нечто подобное, вешал событие на вывод мышки за пределы области тега html.
В итоге, пока причесывал, так добесило всплывающее окно, что плюнул на заказ…
Максим Кузнецов
03 июня 2015, 20:43
2
+2
Конечно. У меня, в свое время, тоже она возникла..) Сортировка — при помощи mfilter2:

<a data-sort="rating" data-dir="[[+mse2_sort:is=`rating:asc`:then=`asc`]]" data-default="desc" class="rating sort">рейтингу <span></span></a>
А у самого вызова я leftJoin'ю сниппет VoteForms:

[[!mFilter2? &suggestions=`1` &limit=`25` &loadModels=`voteforms` &paginator=`pdoPage@Pagination` &class=`msProduct` &element=`msProducts` &depth=`0` &toPlaceholders=`mse2_` &includeThumbs=`70x70` &showEmptyFilters=`0`
&sort=`price:asc, rating:desc`
&where=`{"class_key":"msProduct"}`
&leftJoin=`{
	"VoteFormThread": {
		"class": "VoteFormThread",
		"on": "msProduct.id = VoteFormThread.resource AND VoteFormThread.form = 1"
	}
}`
&select=`{"Data": "[[!getProductDataFields]]",  "VoteFormThread": "VoteFormThread.rating AS rating, VoteFormThread.users_count AS totalVoted"
}`
&tpls=`item.list.table`
]]
Максим Кузнецов
03 июня 2015, 16:29
0
Сейчас занимаюсь созданием интернет-магазина под modx — около 15 категорий первого уровня + выборочно второй и третий подуровень, на текущий момент чуть более 3000 товаров, присутствуют довольно сложные выборки с присоединением рейтингов, избранного, фильтрации на msearch по массе параметров.
Все это пока на минимальном (150р в месяц) тарифе — полет нормальный, никаких проблем пока не выявлено, скорость загрузки тоже отличная.

Урл: https://oil-rf.ru/catalog/avtomasla/motornyie

Единственный момент — под сложные вызовы и if-развилки пишу свои сниппеты, а не использую modx-фильтры.
Максим Кузнецов
30 мая 2015, 10:21
0
Если это можно вывести через pdoTools — то да, достаточно добавить параметр &where.