Всего 125 678 комментариев

Юрий
02 августа 2021, 09:37
0
Спасибо, и вправду было легко
Вот как выглядеть мой чанк msGetOrder
<div class="row" id="msCart">
    <div class="col-lg-6 col-sm-12 col-md-12">
        <h3><i class="fas fa-check-circle"></i> Спасибо за заказ</h3>
        <p>Ваш заказ принят оператором. Мы свяжемся с Вами в ближайшее время.</p>
        <hr>
    </div>
    <div class="col-lg-6 col-sm-12 col-md-12">
        <div class="alert alert-dark" role="alert">
            <p><strong><i class="fas fa-info"></i> Иформация о заказе</strong></p>
            <hr>
            <p>Номер заказа: <strong>{$order.num}</strong>
            Способ доставки: <strong>{$delivery.name} </strong>
            Способ оплати: <strong>{$payment.name} </strong></p>
            <hr>
            <p><strong>Сумма заказа: {$total.cart_cost} грн.</strong></p>
        </div>
    </div>    
</div>

<script src="https://apis.google.com/js/platform.js?onload=renderOptIn" async defer></script>

<script>
  window.renderOptIn = function() {
    window.gapi.load('surveyoptin', function() {
      window.gapi.surveyoptin.render(
        {
          // REQUIRED FIELDS
          "merchant_id": 0000000000,
          "order_id": "{$order.id}",
          "email": "{$user.email}",
          "delivery_country": "UA",
          "estimated_delivery_date": "{'' | date : "Y-m-d"}",
        });
    });
  }
</script>
Наумов Алексей
02 августа 2021, 07:46
0
Так вот компонент и решает задачу:
1. отдельно управлять временем жизни сессий для авторизованных пользователей (например, поставить им месяц);
2. отдельно управлять временем жизни сессий ботов (к примеру, поставить им 3 часа);
3. У всех остальных — ну пусть будет стандартная неделя.

И на моих сайтах, за счет п.2. размер таблицы и объем данных уменьшился в десятки раз, т.к. именно сессии различных ботов составляли 90% записей в таблице.
Артур Шевченко
01 августа 2021, 21:48
0
Берешь вот это событие и пишешь плагин, который будет проверять какие поля заполнены и, если нужные пустые, то переадресовываешь на форму редактирования данных. Ну а для проверки полей в ЛК можно написать сниппет или использовать встроенный функционал типа [[+modx.user.id:userinfo=`fullname`]]
Артур Шевченко
01 августа 2021, 21:36
0
В ресурсе класса msProduct на вкладке Свойства товара или Опции.
Артур Шевченко
01 августа 2021, 21:34
0
Судя по всему на сайте используется готовый компонент. Думаю стоит посмотреть документацию и убедиться, что всё сделано так, как там написано. По умолчанию данный компонент не перезагружает страницу и не очищает корзину.
Александр Мельник
01 августа 2021, 21:22
0
Нет, я не подскажу. Я не знаю что такое — ajax фильтрация.
Ivanov Alexandr
01 августа 2021, 21:20
0
Города и области в дополнительных полях.
Может подскажете как сделать отправку форму по кнопке даже если включена аякс фильтрация?
Александр Мельник
01 августа 2021, 21:16
0
Александр, кто кроме вас знает, как у вас организована архитектура? Что на вашем сайте есть Область, что есть Города?
Я не использую никогда mFilter и мне кажется и для этой задачи он тоже не нужен.
Предположим что у вас есть ресурс Киевская область и в нем дочерние ресурсы — города.
Чтобы вывести селект со списком областей вам хватит pdoresources
А далее пишете свой javascript который отслеживает изменения на этих селектах и отправляет ajax запрос, передающий id области.
в самом простом случает пусть вам возвращает сервер готовый html c options городов этой области. Это опять таки может сделать pdoresources у которого родителем будет указан переданный вами айдишник.
Ivanov Alexandr
01 августа 2021, 19:32
0
&filterOptions=`{«autoLoad»:1}` если установлен этот параметр то кнопка Отправить не работает. Если же выключить то кнопка работает только вот параметры автоматически не подтягиваются. Если к примеру выбрал область то не подтягиваются города.
Дима Сайт old см. профиль
01 августа 2021, 16:12
0
Ну да, переписать дополнение или использовать другое не нужно. А нужно к этому дополнению городить кучу костылей))
@Иван хоть вы на первый взгляд и детально объяснили что там как должно быть на нормальных по вашему мнению сайтах, все же не понятно какую проблему вы видите в дополнении? Какие необходимые к нему костыли вы имеете в виду?

Во времена повсеместного бума интернет-приватности и частичного отказа от cookies я вот хочу перенести в сессии некоторые настройки персонализации для незарегистрированных посетителей сайта (например открыто или закрыто боковое меню) и вообще сводить к минимуму использование cookies там где возможно.

Короче, ИМХО тренд сейчас в сторону увеличения времени жизни сессий, а не уменьшению.

Поэтому, если не «плакаться» что «anonymous_sessions» работает не так как хочется, а так, как решил мейнтейнер (хотя может и открыть ещё один issue для обсуждения?), то проблему с растущей базой надо как-то решать всё равно, а идея проверять user-agent и через него фильтровать сессии ботов это же прям похоже на решение!
Algirdas
01 августа 2021, 15:47
0
Спасибо! Всё сработало. Чуть дописал сниппет для возможности фильтрации и снова затык

<?php
$values = array();
$ids = $modx->runSnippet('pdoResources', array(
	 'parents' => $parents,
	 'limit' => 0,
	 'returnIds' => 1,
	 'includeTVs' => 'certificateBuildingType',
	 'tvFilters' => 'certificateBuildingType=='. $type

));
$resources = explode(',', $ids);
foreach($resources as $id){
	 $resource = $modx->getObject('modResource', $id);
	 $tv = $resource->getTVValue($tvname);
	 if(is_numeric($tv)) $values[] = $tv;
}
$out = array_sum($values); 
return $out;
Вот эта строка не работает
'tvFilters' => 'certificateBuildingType=='. $type
Вызываю так:
[[!countArea?&parents=`5`&tvname=`certificateArea`&type=`1`]]
Если напрямую написать
'tvFilters' => 'certificateBuildingType=='.'1'
То работает. Если в самом начале написать
$type = '1';
то тоже работает

Я так понимаю дело в синтаксисе, но я его победить так и не смог, что только не перепробовал. Знаний не хватает, примеры похожие не нашел ((
Александр Мельник
01 августа 2021, 14:14
0
Ещё правильнее хранить сессии в Redis.
Ну тут Евгений, наверное стоит заметить, что сайты разрабатываемые на modx как правило размещаются на очень недорогих хостингаx, где нет возможности установить redis. Как это по русски — каждый сверчок знай свой шесток.
При правильных настройках — у активных пользователей сессия не будет слетать (так как часто запрашивается).
А менее популярные сессии анонимов при большом размере кеша будут выталкиваться.
У вас нет ссылок на примеры реализации? Просто я буквально неделю назад углубленно вникал в работу redis и скажем так — не нашел redis очень удобным для хранения сессий. Применил redis для хранения временных токенов, для доступа у определенным ресурсам — вот тут прям идеально применение redis поскольку программа имеет возможность установки времени жизни записи и сама следит за ее удалением.
Так и при установке MODX на два сервера и более
неужели кто-то так делает? MODX это возможность за 6 дней сделать неплохо работающий сайт, лендинг, небольшой магазин без амбиций. Но распылять MODX на несколько серверов… Мне кажется это из области фантастики. Здесь на форуме собраны лучшие разработчики на MODX в России и бывших странах СССР — кто так делал?
Columb
01 августа 2021, 13:29
0
Свойство «ms2gallery» остаётся на месте, вероятно, из-за того, что в системных настройках Тикетс ms2gallery указан в качестве источника медиа для тикетов (tickets.source_default).

К сожалению, мои знания не позволяют «доработать Тикетс в том месте, где он затирает неугодные ему properties». НО я нашел способ, как можно обойти данную проблему —
  1. Созданный помощью xParser Тикет редактируем и сохраняем ТОЛЬКО в неопубликованном состоянии.
  2. Публикуем (снимаем с публикации) Тикет ТОЛЬКО в разделе с тикетами (кнопкой).
  3. Если необходимо отредактировать уже опубликованный Тикет — в разделе с тикетами (кнопкой) снимаем Тикет с публикации + редактируем и сохраняем неопубликованный Тикет + переходим в раздел с тикетами и кнопкой его публикуем.

Вот такие «танцы с бубном» для тех, кто не умеет писать код)
Евгений Шеронов
01 августа 2021, 13:00
0
Ещё правильнее хранить сессии в Redis.
При правильных настройках — у активных пользователей сессия не будет слетать (так как часто запрашивается).
А менее популярные сессии анонимов при большом размере кеша будут выталкиваться.

Так и при установке MODX на два сервера и более репликация Redis позволит не слетать авторизациям между запросами на разные сервера (именно тут у сессий в БД и было преимущество над файлами, где тоже можно было настроить репликацию БД между серверами).

Но я не знаю и не делал сайтов на MODX, работающих одновременно на двух серверах)
Андрей
31 июля 2021, 22:11
+1
В верхнем меню Пакеты -> Minishop2 -> Настройки -> Варианты доставки

Настройки miniShop2
Бывает же такое, как раз ищу инфу по уменьшению размер таблицы с сессиями (на одном проекте 3.2гб уже), нахожу массу вариантов из поиска, включая статью про сессии на bezumkin.ru (кстати она от 2014 г и спустя 7 лет, в ubuntu значение session.gc_probability и сейчас по-умолчанию = 0 ).

Ну подправил настройки PHP и довольный по привычке перехожу на главную modx.pro глянуть как дела и вижу тут большой новый пост про сессии (0_о)… уже заподозрил что рекламные-таргет-технологии добрались до портала и подкладывают рекомендации на основе истории поиска :)

Оказалось, совпадение…

P.S. Автору большое спасибо! Конечно, готовые решения намного лучше когда в пакетах!
Андрей
31 июля 2021, 14:32
0
сталкивались. Заказывали интеграцию у беларуских програмистов. Сделали но только отправляли информацию в айко но не получали от нее — заказы в айку приходили но если поставить в айко в стоп то сайт это не видел
Ivanov Alexandr
30 июля 2021, 23:53
0
К сожалению так тоже не хочет работать.
Andrey
30 июля 2021, 17:20
+1
Я не пользовался ни тем, ни другим, но мне кажется вы пытаетесь подсунуть mFilter2 параметры, которые он не принимает. Может создать отдельный набор параметров для googlestorelocator и вызывать так: &element=`GoogleStoreLocator@myParams`, например? Справка по mfilter2.