Алексей Шумаев

Алексей Шумаев

С нами с 30 ноября -0001; Место в рейтинге пользователей: #24
Алексей Шумаев
07 мая 2019, 10:41
0
Народ ищет документацию в гугле, находит и получает, например: prntscr.com/nlexph
Для человека, кто не в теме, это означает, что фактически — modx мёртв, документация отсутствует.
Ну как-то не серьезно это выглядит, за modx обидно. Не долго же включить docs.modx.com и редирект на docs.modx.org поставить…
Алексей Шумаев
25 апреля 2019, 14:17
+1
Это тоже может пригодиться: modx.cc/documentation/additions/cronmanager/
Алексей Шумаев
25 апреля 2019, 14:13
0
Ещё есть вариант: форма отправляет запрос на сервер, сниппет регистрирует задачу и затем выполняет её в фоне, пользователю отправляется результат (хоть на почту).
Алексей Шумаев
25 апреля 2019, 14:11
0
Выход один — не пытаться получать данные от скрипта, который не успевает их отдать в течении 1-10 секунд. О таймауте вообще речи не идёт — никто не будет ждать 30 секунд (бывают исключения, но это именно исключения).
Там, где требуются большие затраты времени на получение данных, скрипты нужно запускать в фоне (например cron по расписанию) и кэшировать у себя в базе данных или иным способом. Вот их потом и отдавать по ajax пользователям.
Я 2 варианта использую:
— сбор данных по cron и кэширование у себя
— если нужно отправить несколько запросов к сторонним серверам, то нужно это делать не одним ajax-запросом, а отдельными с таймаутом. По истечении таймаута каждого ajax-запроса что-то сообщать пользователю. Так или часть данных будет получена или хотя бы пользователь видеть какой-то результат запроса.
Алексей Шумаев
25 апреля 2019, 10:39
0
Надо бы наверное общий 301 на домен проставить, а то из гугла теперь не попадёшь на документацию )
Алексей Шумаев
24 марта 2019, 16:21
0
Вот так, например:
{set $list = 'msProducts' | snippet :[
    'parents' => 0,
    'limit' => 1,
    'loadModels' => 'mvtdocs',
    'innerJoin' => '{
        "ds": {
          "class": "mvtDocsResources",
          "on": "ds.resource_id = msProduct.id"
        }
      }',
    'select' => '{
        "msProduct": "msProduct.id",
        "ds": "ds.file_id"
      }',
    'setTotal'=>1,
 ]}
 
{$list}

Всего с документами: {'total' | placeholder}
Алексей Шумаев
02 марта 2019, 11:58
0
Разделите html и js, как писал Максим. Но js поместите в отдельный файл *.js (или в свой общий). И спокойно отлаживайте свой js.

Если нужно куски кода на страницах использовать, то можно так: https://modx.pro/help/16436#comment-102084
И всё всегда будет работать.
Иначе вы рискуете тратить много времени на разбор конфликтов js-кода с fenom'ом…
Алексей Шумаев
19 февраля 2019, 20:12
0
Николай, глобально ты прав, но не совсем. Помимо описанной ТС проблемы, есть и другие случаи.
Например, пользователь может менять группу. А от группы зависит разное, например цена на сайте. Бывают таки ситуации, когда желательно бы принудительно завершить сессию.
Банально отвечать на однообразные вопросы «Я вот сейчас на сайте! Почему вы мне дали скидку, а я её не вижу?» — тяжко (то, что необходимость переавторизации везде прописана — «всем как всегда»). И вот тут-то как раз удобно при смене группы выбрасывать с морды заставляя перелогиниваться с новыми правами.
Алексей Шумаев
19 февраля 2019, 19:44
0
Ну какие обиды, Сергей? ) Буду благодарен, если пояснишь свою мысль и предложишь своё решение.
Кстати, вопрос на самом деле достаточно часто возникает и актуален для любого более-менее серьёзного сайта.
Алексей Шумаев
19 февраля 2019, 16:56
+1
$ssid = $user->get('sessionid');
    if(!empty($ssid)) {
        if($session = $this->modx->getObject('modSession',array('id' => $ssid))) {
            $session->remove();
        }
}
Алексей Шумаев
19 февраля 2019, 09:29
0
Попробуйте заменить getCollection на getIterator
Алексей Шумаев
10 февраля 2019, 23:34
+1
В своём js примерно что-то такое сделайте:
$(selector).keyup(function(event) {
     if (event.keyCode == ...) {
            $(selector).trigger('change or blur');
     }
});
Это просто навскидку, скорее всего поможет.
Алексей Шумаев
10 февраля 2019, 19:27
0
У меня на minishop2.com/cart всё меняется. Посмотрите в консоли js — нет ли каких ошибок.
Вообще проблем никогда не было с корзиной ни в одном браузере.
Не кастомизирован ли файл default.js у вас случайно?

Хотя, похоже вы ожидаете смены значений до потери фокуса у поля количество. Так, да, не будет работать — нужно в js поменять событие на нажатие цифровых клавиш.
Алексей Шумаев
10 февраля 2019, 02:08
0
Изменение суммы для товара, как-то так:
1. добавляем в корзине элемент с суммой и назначаем ему класс, например: total-price
1. расширяем класс корзины, добавляем в метод change сумму, например назовём элемент: total
public function change($key, $count) {
		$packing_desc = '';
		if (array_key_exists($key, $this->cart)) {
			$data = $this->cart[$key];
		}
		$res = parent::change($key, $count);
		
		$add = array(
			'total' => $this->cart[$key]['price'] * $this->cart[$key]['count']
		);

		return $this->response($res, '', $add);
	}
документация: docs.modx.pro/komponentyi/minishop2/razrabotka/sluzhbyi/podklyuchenie
2. на фронде в js добавляем:
if (typeof miniShop2 != 'undefined') {
miniShop2.Callbacks.Cart.change.response.success = function(response) {
            if (response.success) {
		        var total = $('#' + response.data['key']).find('.total-price');
		        total.text(miniShop2.Utils.formatPrice(response.data.total));              
            }
        };
}
Алексей Шумаев
10 февраля 2019, 01:45
0
Это дефолтный функционал, итоговая сумма пересчитывается: смотрите на minishop2.com.
Вероятно, у вас ошибка в разметке (например нет класса для элемента): prntscr.com/miy9s3
Алексей Шумаев
10 февраля 2019, 01:40
0
Компонент обновлён до версии 1.1.7.
Если возникнут какие-то проблемы, пишите через поддержку в магазине.