23 февраля 2016, 18:08 Добавлю только одно: этот процессор только помечает ресурс как удаленный. После него для полного удаления необходимо «очищать корзину». Точное название этого процессора могу посмотреть позже. Вопросы / Удаление Тикетов с фронта 3 0
21 февраля 2016, 19:27 /* Меняю значение опции на полученное */ $o = $modx->newObject('msProductOption', array( 'product_id' => $r->id, 'key' => 'options_length', 'value' => trim($_POST['options_length']) )); $o->save();Не надо так делать. Достаточно проверить существование опции у товара, а выставлять значение опции самому товару. Как минимум, такой механизм я понял из чтения исходников MS 2.2 (с опциями мне еще не приходилось работать). <?php $optionKey = 'options_length'; $optionKeys = $r->getOptionKeys(); if (!in_array($optionKey, $optionKeys) and $option = $modx->getObject('msOption', array('key' => $optionKey))) { $productOption = $modx->newObject('msProductOption'); $productOption->addOne($option, 'Option'); $productOption->addOne($r, 'Product'); } $r->set($optionKey, trim($_POST[$optionKey])); $r->save(); Вопросы / Проблема с сохранением опций товара 21 +1 1
21 февраля 2016, 18:56 Связь просто надо было сохранить $linkProducts->save();Не обратил внимание, что у товара нет прямой связи (на уровне xPDO) со связью msLink. Потому все равно достаточно одного сохранения, но с другой стороны — сохранить $linkProducts, а все остальные объекты тоже сохранятся. То есть, $n->save()совершенно необязательное действие, если есть строка выше. Вопросы / Проблема с сохранением опций товара 21 +1
21 февраля 2016, 18:51 Я не совсем понимаю, именно создаем, а не получаемЯ не совсем понял Вашу идею, потому в коде создал связь. Конечно, можно использовать созданную ранее. $link = $modx->newObject('msLink', 1);Бесполезная запись, тк newObject() вторым параметром принимает массив. Если передано что угодно другое, параметр игнорируется. Более того, даже если передать массив array('id' => 1);, то все равно новому объекту не будет установлено значение поля id == 1. Причина: метод fromArray(), который используется для установки переданных значений созданному объекту, по умолчанию не выставляет значение первичного ключа, коим является поле id. После создания объекта требуется либо явно задать первичный ключ через set(): $link->set('id', 1);, либо указать третий параметр для fromArray(): $link->fromArray(array('id' => 1), '', true);Если же требуется получить созданную ранее связь по ее id, используйте такой вариант: $link = $modx->getObject('msLink', $id); Вопросы / Проблема с сохранением опций товара 21 +1
21 февраля 2016, 15:06 Код написал без проверки. В теории должен работать. <?php /* Получаем товар, который надо копировать */ if ($r = $modx->getObject('msProduct', (int)$_GET['rid'])) { /* Если товар создается с такими же свойствами, корректнее их брать полностью */ $productData = $r->toArray(); /* Сбрасываем некоторые свойства оригинального товара */ unset($productData['publishedon'], $productData['publishedby']); /* Устанавливаем правильные свойства */ $productData['createdon'] = time(); $productData['createdby'] = $modx->user->id; /* Создаем и сохраняем */ $n = $modx->newObject('msProduct', $productData); /* Создаем новую связь */ $link = $modx->newObject('msLink', array( 'type' => 'one_to_many', 'name' => 'Название связи', )); /* Создаем новую связку */ $linkProducts = $modx->newObject('msProductLink'); /* Добавляем товары в связку */ $linkProducts->addOne($r, 'Master'); $linkProducts->addOne($n, 'Slave'); /* Добавляем основную связь в связку */ $linkProducts->addOne($link, 'Link'); /* Создаем новую опцию */ $option = $modx->newObject('msProductOption', array('key' => $r->get('options_phone'))); /* Добавляем опцию к новому товару */ $n->addOne($option, 'Options'); /* Сохраняем товар. Благодаря связыванию объектов через addOne(), все необходимые ID подставляются автоматически */ $n->save(); } Вопросы / Проблема с сохранением опций товара 21 +1
21 февраля 2016, 00:46 Ради интереса только что проверил: <?php $a = null; $b = false; if ((!$a) === (!$b)) echo 'equal'; else echo 'not equal'; // equalВывод прост: !$modx->getObject() даст тот же результат, что и is_null($modx->getObject()), но первый вариант воспринимается проще и быстрее при чтении кода. Вопросы / Проблема с сохранением опций товара 21 +1
20 февраля 2016, 14:46 Отправь «спасибо», считая, что приобрел курс со скидкой :) Новости и события / Курс по работе на чистом PHP 11 0
18 февраля 2016, 01:42 Иван, уж если в репо есть компонент If, то это точно имеет право на жизнь, дабы парой кликов поставить на сайт без лишних телодвижений. Да и компонент собрать не так уж сложно. На мой взгляд, конечно :) Готовые решения / Облако тегов для miniShop2 24 +2
18 февраля 2016, 01:06 В сниппете можно навести красоту, но и в таком виде хорошо читается. Евгений, собери пакет из этого? ;) Готовые решения / Облако тегов для miniShop2 24 0
18 февраля 2016, 00:15 modstore.pro/packages/other/smf Двухсторонняя интеграция MODX с Simple Machines Forum. Вопросы / Подскажите форум для Revo 8 +3
17 февраля 2016, 15:44 Видел в основном репо пакет для сокращения URL с использованием сервиса гугла. Готовые решения / mSocial - первый релиз. 97 0
17 февраля 2016, 11:42 Когда использовал (2-3 месяца назад) на одном из проектов, товары успешно обновлялись. Вопросы / [mSklad] синхронизация с МойСклад 61 +1
15 февраля 2016, 01:51 Илья, твой комментарий — наглядное подтверждение озвученной в нем мысли :) Новости и события / Обновление рейтингов modx.pro 57 +1
14 февраля 2016, 19:37 1) $data = array('param1' => 'value1', 'param2' => 'value2'); return $AjaxForm->success('Форма обработана', $data);2) $(document).on('af_complete', function(event, response) { var form = response.form; if (response.data !== undefined) $('#html_element').val(response.data.param1); }); Вопросы / Ajaxform получение переменных 13 +1
14 февраля 2016, 19:35 Поставь Tickets, как рекомендует Василий, или сделай сохранение времени активности в modActiveUser по аналогии с Tickets: github.com/bezumkin/Tickets/blob/master/core/components/tickets/elements/plugins/plugin.tickets.php#L80 Вопросы / Проверить пользователя на онлайн 4 0
14 февраля 2016, 10:15 1. В сниппете в функции AjaxForm->success() вторым параметром передавай массив 2. Вешай JS обработчик на событие afComplete, в нем получишь переданный в п. 1 массив, можешь вставлять значения куда угодно. Вопросы / Ajaxform получение переменных 13 0
14 февраля 2016, 09:56 Почему modActiveUser не подходит? Есть поля username и internalKey. Второе — искомый Id пользователя. Вопросы / Проверить пользователя на онлайн 4 0
Возможно ли реализовать возможность предоплаты за доставку на сайте? У меня Робокасса, у них вроде есть docs.robokassa.ru/ru/iframe
Редизайн сообщества На больших экранах основной текст статьи я бы сделал 18 px. Да и текст комментариев можно таким сделать. Для меня лично 16 — мелковато на больших экранах (в комментариях вообще 15 ...
MiniShop3 1.11.0 при клике на radio идет пересчет итоговой суммы в orderUI, в зависимости от способов(оплаты доставки) я так поняла. попробуй код запуска события поставить ниже чем orderUI, после
ImageOptimizer - WebP/AVIF и responsive <picture> для MODX 3 Дополнение доступно modstore.pro/packages/photos-and-files/imageoptimizer
Localizator3 для MODX 3: перевод полей и TV без отдельного context на язык, Vue 3 + PrimeV... Добавил localizator3_default_language
msInShopNotify Начиная с версии 3.0.0-beta добавлена поддержка MiniShop3 Минимальные требования: PHP 8.4 MODX 3.2 MiniShop3
MaxNotify Обновление 1.2.0-pl (03.07.2026) — добавлены уведомления о заявках FormIt через hook-сниппет `maxNotifyFormIt`; — добавлены уведомления о заявках SendIt через hook-...
[msBonus2] 1.3.0 Бонус-коды, уведомления о сгорании и совместимость с msMultiCurre... Да, планируется. Даже чуть больше, чем просто бонусная система)
Потому все равно достаточно одного сохранения, но с другой стороны — сохранить $linkProducts, а все остальные объекты тоже сохранятся. То есть,
совершенно необязательное действие, если есть строка выше.
Бесполезная запись, тк newObject() вторым параметром принимает массив. Если передано что угодно другое, параметр игнорируется.
Более того, даже если передать массив
, то все равно новому объекту не будет установлено значение поля id == 1. Причина: метод fromArray(), который используется для установки переданных значений созданному объекту, по умолчанию не выставляет значение первичного ключа, коим является поле id.
После создания объекта требуется либо явно задать первичный ключ через set():
, либо указать третий параметр для fromArray():
Если же требуется получить созданную ранее связь по ее id, используйте такой вариант:
Вывод прост: даст тот же результат, что и , но первый вариант воспринимается проще и быстрее при чтении кода.
Да и компонент собрать не так уж сложно. На мой взгляд, конечно :)
Евгений, собери пакет из этого? ;)
Двухсторонняя интеграция MODX с Simple Machines Forum.
2)
2. Вешай JS обработчик на событие afComplete, в нем получишь переданный в п. 1 массив, можешь вставлять значения куда угодно.