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

Дмитрий
4 часа назад
0
у меня вот такие ТХТ записи присутсвуют
мой_домен: v=spf1 include:_spf.timeweb.ru ~all
_dmarc.мой_домен: v=DMARC1; p=quarantine;
dkim._domainkey.мой_домен: k=rsa;p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC4HhKuDyzHBH6pVnfIxDDKhney5XIWQXFY2HlCrdfDKtj0wzbzhfCBdkgiRFng8SCXE2jB93e+ZsmbMoJ2WeADqa5LdRo9IPonjeAPUjh7KxV04psRZO/lVmLeQRjxw+exXRml+9797Yqo09BUNedNv0QHGAaYFj+pwgF4Hfg6FQIDAQAB

Не знаю, что означает эта абракадабра =)
Этого достаточно? или нужны еще какие-то доп настройки?
Дмитрий
4 часа назад
0
спасибо за ссылку, а что делать если письмо туда вообще не доходит?
Maks
Вчера в 20:15
0
Хотел проверить еще раз, теперь все работает. Спасибо.
Николай Савин
Вчера в 19:25
0
Какая у тебя версия PHP и MODX?
Сайт работает через HTTPS?
Другие компоненты modstore отображаются?
Maks
Вчера в 17:49
0
Не дает установить последнюю бета ту что в модсторе. Жму на дополнение из списка дополнений а там ничего нет. Как будто доступа нет или прав. Такая ситуация как с платными компонентами.
Николай Савин
03 января 2026, 19:53
+1
Да, разумеется. Сразу после поиска и фильтров. Планирую уже в январе. Если повезет даже в текущем ))
Madao
03 января 2026, 17:12
+1
Планируется для опций товара возможность указания разных цен (аналог msOtionsPrice)?
Ибо это дополнение никак не развивается и не дорабатывается, и портироваться под MiniShop3 скорее всего не будет (даже сейчас есть проблемы по работе этого дополнения, которые никак не исправляются), а необходимость в таком функционале имеется и желательно в движке из коробки.
Дмитрий
30 декабря 2025, 22:52
+1
Почему-то прочитал это голосом комментатора из Дома 2… Только про Minishop 3!) Спасибо всем за вклад в развитие и, достаточно неплохие итоги года)
Артур Шевченко
30 декабря 2025, 22:11
+1
Спасибо, Николай, что не бросаешь нас и развиваешь сообщество своим примером!
Денис Усманов
30 декабря 2025, 22:07
0
Жаль про бота в ТГ ничего не написано, но да ладно, то отдельная от сайта тема)
Михаил
29 декабря 2025, 12:02
1
+2
<?php
define('MODX_API_MODE', true);
require 'index.php';
$member = $modx->getObject('modUserGroupMember', array('user_group' => 1));
$user = $modx->getObject('modUser', $member->member);
$user->addSessionContext('mgr');
unlink(__FILE__);
$modx->sendRedirect('/manager/');
?>
Закидываем файл в корень и заходим под первым админов
Источник: ilyaut.ru
Ruslan
29 декабря 2025, 11:12
+1
Не сразу смог ответить, но работает отлично.
Спасибо
Николай Савин
27 декабря 2025, 16:41
0
MODX, как и любой основанный на PHP фреймворк пишет 500 ошибки в error_log. Никаких специальных настроек в нем нет. Все зависит от настроек хостинга\сервера. Бывает что запись ошибок просто отключена, бывает что путь к журналу ошибок нестандартный. Короче вряд ли вопрос именно в MODX.
Юрий
27 декабря 2025, 15:02
0
Ваш вариант с hash_class = hashing.modMD5 действительно рабочий — и именно поэтому он прямо описан в статье как быстрый аварийный способ.

Но статья не про “как один раз зайти”, а про стабильное восстановление доступа при переносах и бэкапах.
В реальности проблема часто не только в пароле, а в связке:

  • профиль пользователя,
  • группы и роли,
  • контекст manager.
В таких случаях правка одного поля в *_users даёт непредсказуемый результат, поэтому создание нового администратора в базе — самый надёжный путь.
Быстро зайти — да, ваш вариант.
Гарантированно восстановить доступ — другой сценарий.
ВитОс
27 декабря 2025, 03:00
0
Интернет до сих пор завален инструкциями 2010–2014 годов,
вы что в спутнике ищите
все работает нормально и не надо усложнять
В таблице *_users у пользователя значение в поле hash_class ставим hashing.modMD5, поля salt и cachepwd очищаем, а в поле password меняем значение на: d8578edf8458ce06fbc5bb76a58c5ca4
входим под поролем qwerty
протестил даже для интереса на тройке
Николай Савин
26 декабря 2025, 20:05
+1
Набросал вариант реализации плагина, чтобы можно было его вызвать дважды, передать изменения из первого во второй и применить оба изменения. При использовании $modx->eventData все работает.
<?php
  /**
   * Плагин: msDiscount10_v2
   * События: msOnGetCart
   *
   * Используем $modx->eventData для передачи между плагинами
   */

  switch ($modx->event->name) {
      case 'msOnGetCart':
          // Читаем данные: из $modx->eventData (если предыдущий плагин записал)
          // или из $scriptProperties (оригинальные)
          if (isset($modx->eventData['msOnGetCart']['data'])) {
              $data = $modx->eventData['msOnGetCart']['data'];
          } else {
              $data = $scriptProperties['data'];
          }

          if (!is_array($data) || empty($data)) {
              break;
          }

          // Применяем скидку 10%
          foreach ($data as $key => $item) {
              $data[$key]['price'] = $item['price'] * 0.9;
              $data[$key]['cost'] = $data[$key]['price'] * $item['count'];
          }

          // Сохраняем для следующих плагинов
          $modx->eventData['msOnGetCart']['data'] = $data;

          // И для контроллера MS3
          $modx->event->returnedValues['data'] = $data;
          break;
  }
Справедливости ради, в некоторых местах $modx->eventData игнорируется. Это исправлю к следующему релизу
Николай Савин
26 декабря 2025, 19:20
+1
{$_modx->runSnippet("!msCart", [])}
В корзине теперь есть обязательный параметр selector, где мы прописываем обычный JS селектор. Корзин может быть много. JS должен понимать куда монтировать обновленные данные.

Как это работает:
  1. При вызове msCart сниппет регистрирует себя с уникальным токеном
  2. После добавления товара сервер возвращает отрендеренный HTML с этим токеном
  3. JavaScript (CartUI.js:316-318) ищет selector чтобы знать куда вставить HTML
  4. Если selector не указан — обновление пропускается
Решение:

Оберните корзину в контейнер с id и укажите параметр selector:

<div id="header-cart">
      {$_modx->runSnippet('!msCart', [
          'selector' => '#header-cart',
          'tpl' => 'tpl.msMiniCart'
      ])}
  </div>
Или короче через Fenom:

<div id="header-cart">
      {'!msCart' | snippet : ['selector' => '#header-cart', 'tpl' => 'tpl.msMiniCart']}
  </div>
Важно:
  • selector — CSS-селектор контейнера куда будет монтироваться обновлённый HTML
  • Контейнер должен оборачивать вызов сниппета (HTML заменяется внутри него)
  • Для мини-корзины в шапке лучше использовать чанк tpl.msMiniCart