Всего 123 785 комментариев

Василий Наумкин
05 мая 2024, 08:28
+1
А это уже моя ошибка в последней версии mmxDatabase, уже исправил.
composer update
composer exec mmx-forms install
и всё должно работать.
Василий Наумкин
05 мая 2024, 08:08
0
Я так понял версии компонентов не совместимы и ничего не устанавливается)
Неправильно ты понял, тебе там пишут другое.

Use the option --with-all-dependencies (-W) to allow upgrades, downgrades and removals for packages currently locked to specific versions.
То есть, у тебя уже установлен какой-то пакет с неподходящей версией. И его можно обновить, если указать ключ -W. Только и всего.

Composer не делает это сам, а предупреждает тебя, чтобы ты принял решение.

Вот как такое разгуливать в будущем не ясно.
Как и всегда — внимательно читать сообщения об ошибках.
Олег
04 мая 2024, 20:16
0
UPD
Добавил подключение js.cookie.min.js и ваш код заработал. Спасибо!
Ivan K.
04 мая 2024, 19:45
+1
Установил)), кода удалил composer remove nesbot/carbon

UDP
Ни фига не установилось)) Видимо моих знаний не достаточно, чтобы пользоваться этим дополнением.
После команды:
composer exec mmx-forms install
В конце ошибка:
Script mmx-forms handling the __exec_command event returned with error code 255
Ivan K.
04 мая 2024, 19:33
+1
У меня не получилось установить данное дополнение, к сожалению.
Мои действия:
Установил modx3 (3.0.5) (как тут написано modx.pro/howto/22847):
composer create-project modx/revolution.

установил (Чтобы проверить, как вообще работает компоненты устанавливаемые через composer):
composer require nesbot/carbon

Пробую установить:
composer require mmx/forms

И вот такая ошибка в консоли:
./composer.json has been updated
Running composer update mmx/forms
Loading composer repositories with package information
Updating dependencies
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - illuminate/support[v10.0.0, ..., v10.16.1] require nesbot/carbon ^2.62.1 -> found nesbot/carbon[2.62.1, ..., 2.x-dev] but it conflicts with your root composer.json require (^3.3).
    - illuminate/support[v10.17.0, ..., 10.x-dev] require nesbot/carbon ^2.67 -> found nesbot/carbon[2.67.0, ..., 2.x-dev] but it conflicts with your root composer.json require (^3.3).
    - vesp/core 4.0.0 requires illuminate/events ^v10.15.0 -> satisfiable by illuminate/events[v10.15.0, ..., 10.x-dev].
    - mmx/forms[dev-main, 1.0.0, ..., 1.3.0] require vesp/core ^4.0 -> satisfiable by vesp/core[4.0.0].
    - illuminate/events[v10.47.0, ..., 10.x-dev] require illuminate/support ^10.0 -> satisfiable by illuminate/support[v10.0.0, ..., 10.x-dev].
    - Root composer.json requires mmx/forms * -> satisfiable by mmx/forms[dev-main, 1.0.0, ..., 1.3.0, 9999999-dev].

Use the option --with-all-dependencies (-W) to allow upgrades, downgrades and removals for packages currently locked to specific versions.
You can also try re-running composer require with an explicit version constraint, e.g. "composer require mmx/forms:*" to figure out if any version is installable, or "composer require mmx/forms:^2.1" if you know which you need.

Installation failed, reverting ./composer.json and ./composer.lock to their original content.
Я так понял версии компонентов не совместимы и ничего не устанавливается) Вот как такое разгуливать в будущем не ясно.
Артур Шевченко
04 мая 2024, 17:44
+1
Решение от ИИ
$(document).on('mse2_load', function (e, data) {
  // Получаем все GET-параметры из текущего URL
  var params = new URLSearchParams(window.location.search);

  // Преобразуем параметры в объект JSON
  var jsonParams = {};
  for (var param of params) {
    jsonParams[param[0]] = param[1];
  }

  // Если параметры есть, записываем их в куки
  if (Object.keys(jsonParams).length > 0) {
    Cookies.set('optionFilters', JSON.stringify(jsonParams), { expires: 7, path: '/' });
  }
  // Иначе удаляем куки
  else {
    Cookies.remove('optionFilters', { path: '/' });
  }
});
Oleg
04 мая 2024, 13:29
0
Здравствуйте. Статус заказа меняется на «Оплачено» после того как покупатель оплатил товар и произошёл редирект обратно сайт. Появились случаи когда покупатель оплатил и не дожидаясь оплаты просто закрывает сайт. И статус не меняется. Можно как-то сделать чтобы статус менялся каким-то запросом, не только редиректом?
Павел Романов
04 мая 2024, 13:27
2
+3
Так вроде, пошустрее будет ):
$sql = "
    SELECT tvr.value, tv.caption
    FROM {$modx->getTableName('modTemplateVarResource')} tvr
    LEFT JOIN {$modx->getTableName('modTemplateVar')} tv
    ON tv.id = tvr.tmplvarid 
    WHERE tvr.contentid = {$id} AND tv.category = {$category}
";
$q = $modx->prepare($sql);
$q->execute();
$resources = $q->fetchAll(PDO::FETCH_ASSOC);
foreach($resources as $resource){
    $out .= $modx->getChunk($tpl, $resource);
}
return $out;

В чанке [[+caption]] и [[+value]]:
<div class="item-parent">
    <div class="row">
        <div class="col-9 pr-0">
            <span class="caption">[[+caption]]:</span>
            <div class="item-bg" data-rating="[[+value]]"></div>
        </div>
        <div class="col-3">
            <span class="rating">[[+value]]/10</span>
        </div>
    </div>
</div>

Кстати, верный ID категории можно узнать в Элементы » Категории.
Олег
04 мая 2024, 11:49
0
Я с JS весьма поверхностно дружу. У кого есть возможность помочь за вознаграждение?
Артур Шевченко
03 мая 2024, 21:15
0
параметры из url и записывал бы в куки
Понятное дело, магии не существует. Надо JS написать который возьмёт параметры из url закодирует в JSON и запишет в куки с ключом optionFilters
Олег
03 мая 2024, 21:01
0
не прокатит. ведь запрос ?memory=1&vitamin=1 в строке появляется (mFilter2) без перезагрузки страницы и не попадает в GET массив.
Артур Шевченко
03 мая 2024, 14:39
+1
Я бы тогда забирал параметры из url и записывал бы в куки. А на страницы товара выводил похожие так
{'!msProducts' | snippet: [
    'parents' => 0,
    'optionFilters' => $.cookie.optionFilters
    'tpl' => 'myTpl',
    'limit' => 12
]}
Наумов Алексей
03 мая 2024, 13:57
+2
Кстати, если кому интересно, mmxDatabase вроде как можно запустить и на MODX 2.x.

Сначала в консоли делаем так:
composer require mmx/database
выполнять команду install не стоит, всё равно ж не получится.

а затем уже в php вот так:

require_once dirname(__FILE__) . '/vendor/autoload.php';
class_alias(\modX::class, 'MODX\\Revolution\\modX');
$mmxDatabase = new MMX\Database\App($modx);
и можно работать:
$resource = \MMX\Database\Models\Resource::find(1);
print_r($resource->toArray());
Олег
03 мая 2024, 13:50
0
Пока думал и читал понял, что нужна другая логика.
На странице каталога в фильтре выбираю например «Антиоксиданты» и «Аминокислоты». Появляется список подходящих товаров.
Дальше, переходя в товар надо передать из GET запроса выбранные опции.
Внизу товара отобразить 10-12 товаров, в которых эти опции тоже отмечены.
Наумов Алексей
03 мая 2024, 12:23
0
Слишком общий вопрос, нет волшебных решений.

Что значит у нас много опций, 20 штук? Как вы по ним хотите похожие товары искать?

Вот я к примеру делал так: мне в разделе «Стабилизатор напряжения» в карточке товара нужно вывести 12 похожих товаров, критерии такие:
1. Соответствуют количеству фаз
2. Близкая мощность, плюс минус 20%
3. Близкая цена, плюс минус 30%

Когда я определился с критериями — я написал соответствующий запрос и получил выборку. Для другой категории будет другая выборка, правда же? Ведь спортивные кроссовки по этим критериям уже не подобрать? Там Похожесть это, например, цвет, наличие или отсутствие шнурков.
Олег
03 мая 2024, 11:51
0
у вас в примере Data это к примеру article, а Size это название опции. правильно? Но как перечислить все опции? Просто их около 20, а отмечены у каждого товара по 1-4 опции.
И как получить значения для WHERE, в котором тоже могут быть несколько опций?
Дмитрий
03 мая 2024, 11:45
0
Всем привет! Подскажите пожалуйста а можно ли сделать фильтр в 2 уровня и как это сделать? Т.е. например мне нужно сделать: домен/бренд-из-сео-фильтра/мощность-из-сео-фильтра
Артур Шевченко
03 мая 2024, 11:04
0
Как-то так
SELECT * FROM `modx_ms2_products` Data
LEFT JOIN `modx_site_content` Resource ON Data.id = Resource.id
LEFT JOIN `modx_ms2_product_options` Size ON Data.id = Size.product_id AND Size.key = 'size'
WHERE Size.value = '5010х2800'