Всего 122 891 комментарий

Василий Наумкин
06 мая 2024, 15:26
0
Очень рад, что тебе нравится!
Наумов Алексей
06 мая 2024, 09:00
+1
За поддержку php 7.4 все ж спасибо! Как я писал в комментарии к прошлой заметке, я запустил mmxDatabase в связке с сайтом на modx 2.8.5, что оказалось очень удобно для одной из текущих задач (а именно выгрузка всего контента сайта в формате json для переноса данных на другую платформу). с mmxDatabase это решается очень быстро!
Олег
06 мая 2024, 00:40
0
Если посетитель выбирает опции в фильтре и переходит в товар — все отрабатывает отлично. Но если затем он переходит между товарами через те же «похожие товары» или «недавно просмотренные товары», тогда в куки ничего нового не записывается и в «похожих товарах» выводятся постоянно одни и те же товары.
Как вариант — после перехода в товар из фильтра отображать похожие товары как уже предложили и сразу удалять куки. И далее в каждом товаре проверять наличие куки. При отсутствии куки записать в массив определенный список опций текущего товара, получить список id товаров с таким же набором опций и в «похожих товарах» вывести этот список.

Вот собственно проблема, которую гугл не помог решить:
Как получить в массив или лучше в JSON все опции из списка для текущего товара.
Сергей
05 мая 2024, 23:01
0
я делаю связи и задача не в товаре а просто в каталоге вывести точки с цветом (hex) и я не понимаю как применить то что написали выше. Если не сложно, можете дать пример вывода? или напишите мне в ЛС я готов оплатить поддержку
Алексей Смирнов
05 мая 2024, 20:22
+1
Обсуждение возможностей тут github.com/modx-pro/miniShop2/pull/761
А чтобы вытащить значения из БД в удобном формате — достаточно написать небольшой сниппет и результат его работы сохранить в переменную или Placeholder или setOption.
Простой сниппет Kvazicolor который вытащит сопоставление:
$name = 'colorushka'; // имя опции которая имеет цвета.
$tableon = $modx->getOption('table_prefix');
$asf = $modx->query("SELECT properties FROM `".$tableon."ms2_options` WHERE `key` = '".$name."'")->fetch(PDO::FETCH_ASSOC);
$out = json_decode($as['properties'],1);
$outx = [];
foreach ($out['values'] as $line){
    $outx[$line['name']] = $line['value'];
}
return $outx;
Далее в феноме до вызова mfiler засунуть это все в плейсхолдер, например:
{set $mypole = 'colorushka'}
{set $masscol[$lit['alias']] = 'Kvazicolor' | snippet : ['name' => $mypole]}
{$_modx->setPlaceholder('arrcolors',$masscol)}
Далее в чанке row
получаем:
{var $key = $table ~ $delimeter ~ $filter}
{set $ezhikcolors = 'arrcolors' | placeholder}
..... любой код ....
<span class="checking" style="background-color: {$ezhikcolors [$filter_key][$value]}">{$title}</span>
Вот как то так.
Роман Л.
05 мая 2024, 18:28
0
К сожалению нет, не получилось.
Сергей
05 мая 2024, 18:21
0
Получилось реализовать? я тоже столкнулся с этой же проблемой, инструкция нет, куда копать не понятно
Andrey
05 мая 2024, 17:14
0
Сразу же вводит в заблуждение выбор курьером/в пункт как в форме минишопа, так и на карте параллельно.
так не юзерфрендли ни разу
Ivan
05 мая 2024, 14:11
+1
Установил, наконец-то)) Все работает спасибо.
Ivan
05 мая 2024, 13:33
-1
Во как «разжевал» мне ответ знаменитый ИИ ))

Основная причина проблемы: Ключевая проблема здесь заключается в конфликте версий двух зависимостей:
Ваш проект явно требует версию ^3.3 пакета nesbot/carbon, как указано в вашем файле composer.json.
Однако пакет illuminate/support, который является зависимостью для пакета vesp/core (который, в свою очередь, зависит от mmx/forms), требует версию ^2.62.1 или ^2.67 пакета nesbot/carbon, в зависимости от конкретной версии illuminate/support. Эти версии nesbot/carbon несовместимы с версией ^3.3, требуемой вашим проектом.
Цепочка зависимостей:
mmx/forms зависит от vesp/core.
vesp/core зависит от illuminate/events.
illuminate/events зависит от illuminate/support.
illuminate/support требует версию nesbot/carbon, которая конфликтует с требованиями вашего проекта.
Предлагаемые решения:
Опция --with-all-dependencies (-W): Запуск команды обновления или требования с этой опцией может помочь разрешить эти проблемы с зависимостями, позволяя Composer рассмотреть возможные обновления, понижения версий или удаления для всех пакетов, а не только для того, с которым вы непосредственно имеете дело.
Указание версии: Вы можете решить проблему, указав другую версию для mmx/forms, которая либо не требует конфликтующей версии nesbot/carbon, либо совместима с другими версиями illuminate/support.
Измените ваш composer.json: Вы могли бы рассмотреть возможность корректировки собственного требования к nesbot/carbon на совместимую версию, если ваш проект все еще может удовлетворять свои потребности с более старой версией carbon.
Такой тип конфликта зависимостей распространен в проектах с множеством зависимостей и иногда может быть решен путем тщательной корректировки требуемых версий для обеспечения совместимости всех зависимостей друг с другом.
Ivan
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
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
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: '/' });
  }
});