Всего 125 352 комментария

Николай Савин
30 ноября 2025, 19:10
+1
У msCustomer есть поле user_id, которое связывает покупателя с modUser:

// В модели msCustomer
  'aggregates' => [
      'User' => [
          'class' => 'MODX\\Revolution\\modUser',
          'local' => 'user_id',
          'foreign' => 'id',
          'cardinality' => 'one',
      ],
  ],
Режимы работы

1. Автономный режим (по умолчанию)
  • msCustomer работает независимо от modUser
  • Покупатели авторизуются через свой email/пароль
  • Подходит для магазинов без дополнительного функционала

2. Синхронизация с modUser
  • Включается настройкой ms3_customer_sync_enabled
  • При создании/обновлении modUser автоматически создаётся/обновляется msCustomer
  • Синхронизируются: email, fullname → first_name, phone, активность
  • При удалении modUser — покупатель НЕ удаляется (сохраняется история заказов), только отвязывается (user_id = 0)

3. Создание modUser при заказе
  • Настройка ms3_order_register_user_on_submit
  • При оформлении заказа создаётся системный пользователь
  • Ему можно назначить права и группу пользователей
Илья Уткин
30 ноября 2025, 17:27
0
А вообще покупатели могут быть связаны с пользователями MODX? Ведь порой надо будет добавить магазин на сайт, где уже есть личный кабинет и пользователи. Или наоборот на сайте с магазином может быть и другой функционал, завязанный на юзеров
Артур Шевченко
30 ноября 2025, 15:25
+1
С визуальным конструктором полей прям огонь. Горжусь тобой!)))
Николай Савин
30 ноября 2025, 14:25
+1
Для желающих протестировать — создал релиз в GitHub. Там можно скачать готовый транспортный пакет.
Алексей Смирнов
30 ноября 2025, 12:45
0
Все чуток сложнее. Как только получится уладить юридические и иные вопросы этот пакет и остальные — вернуться.
Сергей Карпович
28 ноября 2025, 17:12
0
Ребята, это нормально что при в режиме Импорт товаров — недоступен импорт остатков (msProductRemains)?
А в режиме импорта остатков не доступны TV и галерея.

Приходится запускать отдельно один импорт для товаров, другой для остатков
Сергей Карпович
27 ноября 2025, 13:08
0
Алексей привет, из модстор пропал компонент ImgsPaste, как понимаю его убрали из-за отсутствия поддрежки
Tinymcerte-3.
Подскажи есть надежда, что компонент вернут с поддержкой нового редактора?
Я его ставлю на 100% сайтов, менеджеры пользуются и не портят сайт =)
Сергей Карпович
26 ноября 2025, 20:11
0
Артур, порадуй новостями.
Есть потребность купить компонент пока для одного сайта
Николай Савин
26 ноября 2025, 11:39
0
Дмитрий. первые две строки в вашем логе — это не ошибки. Это предупреждения о плохом коде. Они сами по себе ничего не ломают.
Настоящая проблема у вас только одна, та, что про article
Дмитрий
26 ноября 2025, 11:37
0
есть поле prnt.sc/gTm16QUgah9S
вот часть кода
public function getProductGroups($id) {
		if (isset($this->cache['products'][$id])) {
			return $this->cache['products'][$id];
		}
		$groups = array();

		if ($product = $this->modx->getObject('msProduct', $id)) {
			$ids = $this->modx->getParentIds($id, 10, array('context' => $product->get('context_key')));
			$ids[] = $id;
		}
		else {
			$ids = array($id);
		}
		$q = $this->modx->newQuery('msCategoryMember', array('product_id' => $id));
		$q->select('category_id');
		$tstart = microtime(true);
		if ($q->prepare() && $q->stmt->execute()) {
			$this->modx->queryTime += microtime(true) - $tstart;
			$this->modx->executedQueries++;
			if ($tmp = $q->stmt->fetchAll(PDO::FETCH_COLUMN)) {
				$ids = array_merge($ids, $tmp);
			}
		}
		$ids = array_unique($ids);
		$where = count($ids) > 1
			? array('document:IN' => $ids)
			: array('document' => $ids[0]);

		$q = $this->modx->newQuery('modResourceGroupResource', $where);
		$q->leftJoin('msdProductGroup', 'msdProductGroup', 'msdProductGroup.id = modResourceGroupResource.document_group');
		$q->select('document_group, discount');
		$q->sortby('discount');
		$q->groupby('modResourceGroupResource.id');
		$tstart = microtime(true);
		if ($q->prepare() && $q->stmt->execute()) {
			$this->modx->queryTime += microtime(true) - $tstart;
			$this->modx->executedQueries++;
			while ($row = $q->stmt->fetch(PDO::FETCH_ASSOC)) {
				$groups[$row['document_group']] = $row['discount'];
			}
		}
		$this->cache['products'][$id] = $groups;

		return $groups;
	}
строка 412
if (isset($this->cache['products'][$id])) {
			return $this->cache['products'][$id];
		}
строка 452
$this->cache['products'][$id] = $groups;
Николай Савин
26 ноября 2025, 10:55
0
Проверь наличие поля article в таблице ms2_products.
Это стандартное поле, оно всегда было в минишопе. Никаких манипуляций с ним никогда не производилось.
Дмитрий
26 ноября 2025, 08:46
0
Доброе утро.
[2025-11-25 23:10:22] (ERROR @ /home/public_html/core/components/msdiscount/model/msdiscount/msdiscount.class.php : 452) PHP warning: Illegal offset type
[2025-11-25 23:10:22] (ERROR @ /home/public_html/core/components/msdiscount/model/msdiscount/msdiscount.class.php : 412) PHP warning: Illegal offset type in isset or empty
[2025-11-25 23:10:22] (ERROR @ /home/public_html/core/xpdo/om/xpdoobject.class.php : 240) Error 42S22 executing statement: 
Array
(
    [0] => 42S22
    [1] => 1054
    [2] => Unknown column 'msProduct.article' in 'where clause'
)
Появились такие ошибки( Версия minishop2 4.4.2.