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

Ivan K.
05 мая 2024, 12:06
0
То есть, у тебя уже установлен какой-то пакет с неподходящей версией. И его можно обновить, если указать ключ -W. Только и всего.
Понизить версию composer просил, вот такие сообщения меня напрягают))
Ну раз это только предупреждение от composer, буду знать теперь.
Василий Наумкин
05 мая 2024, 09:18
+2
Примерно тоже самое, только при помощи mmxDatabase:

$id = $modx->getOption('id', $scriptProperties);
$category = $modx->getOption('category', $scriptProperties, '1', true);

$resource = \MMX\Database\Models\Resource::query()
    ->select('id', 'pagetitle')
    ->with('TvValues', static function($c) use ($category) {
        $c->select('value', 'contentid', 'tmplvarid');
        $c->whereHas('Tv', static function($c) use ($category) {
            $c->where('category', $category);
        });
        $c->with('Tv:id,name,caption,default_text');
    })
    ->find($id);

return $resource ? print_r($resource->toArray(), true) : 'Not found';

Получается 3 простых выборки, без join.

Сначала выбирается ресурс, потом значения его ТВ из нужной категории, а затем добираются основные свойства этих ТВ.

Eloquent собирает все данные вложенными массивами в итоговый результат:


Дальше можно перебирать результат на Fenom со всеми проверками на пустоту и прочее.
Максим
05 мая 2024, 08:48
0
Собственно пока писал пост, пришла идея костыльного решения, отдельным выводом записать в плейсхолдер id отобранных товаров и их передать в фильтр и так всё работает, но пост решил опубликовать, вдруг кому пригодится, или кто-то может предложит решение лучше)

Вот так у меня получилось решить задачу:

[[-Получаем ID товаров для выборки (where) и формируемх их в плейсхолдер для передачи в фильтр]]
    [[!msProducts?
    &parents=`2`
	&limit=`0`
	&tpl=`@INLINE [[+id]],`
	&where=`{"Data.price:>":0,"OR:Data.year_production:>":0,"OR:Data.made_in:!=":"","Data.manufacturer_company:!=":""}`
    &toPlaceholder=`products-to-filter`
]]

[[!mFilter2?
    &class=`msProduct`
    &element=`msProducts`
    &resources=`[[+products-to-filter]]`
Василий Наумкин
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%

Когда я определился с критериями — я написал соответствующий запрос и получил выборку. Для другой категории будет другая выборка, правда же? Ведь спортивные кроссовки по этим критериям уже не подобрать? Там Похожесть это, например, цвет, наличие или отсутствие шнурков.