Вопросы

Как автоматом указать характеристики только те что есть в товарах для категории?

Как в категории указать все характеристики что используются в товарах этой категории? в minishop2

[РЕШЕНО]

Суть в том чтобы в админке появились только те характеристики у товара которые есть, это значит поставить все уникальные характеристики для категории, нужно было именно такое решение, сделал сам. А если не нужно их указывать в админке для редактирования, то да проще будет вывести их список через pdoResources указав класс msCategoryOption

Буду рад кто исправит это код(КОД РАБОЧИЙ), чтобы был чище, так как делался на быструю руку решить задачу, а так же не было знаний для реализации этой задачи.

<?php

function prepareSqlQuery($sqlQuery){
	global $modx;
	return $modx->query($sqlQuery);
}


function extractResultsFromQueryObject($sqlQueryResult, $itemsToRetreive, $multiDimensionRetreive=false){
	global $modx;
	$results = array();

	if (is_object($sqlQueryResult)) {
		while ($row = $sqlQueryResult->fetch(PDO::FETCH_ASSOC)) {
			if($multiDimensionRetreive){
				foreach($itemsToRetreive as $key => $value){
					array_push($results, $row[$key], $row[$value]);
				}	    		
			} else {
				foreach($itemsToRetreive as $itemToRetreive){
					array_push($results, $row[$itemToRetreive]);
				}
			}
		}
	}
	return $results;
}


$prepareSqlQueryOfRetreiveCategories = prepareSqlQuery('SELECT modx_site_content.id FROM `modx_site_content` WHERE modx_site_content.class_key = "msCategory"');
$categoriesIds = extractResultsFromQueryObject($prepareSqlQueryOfRetreiveCategories, array('id'));

if(count($categoriesIds) <= 0){
	return 'Have no categories';
}


foreach($categoriesIds as $categoryId){

	$productsQueryObject = prepareSqlQuery('SELECT modx_site_content.id FROM `modx_site_content` WHERE modx_site_content.class_key = "msProduct" AND modx_site_content.parent = "'.$categoryId.'"');
	$productsIds = extractResultsFromQueryObject($productsQueryObject, array('id'));

	if(count($productsIds) <= 0) continue;

	$productsIds = implode(",", $productsIds);

	$distinctProductOptionsSqlQuery = prepareSqlQuery('SELECT DISTINCT modx_ms2_product_options.key FROM `modx_ms2_product_options` WHERE modx_ms2_product_options.product_id IN ('.$productsIds.")");
	$distinctProductOptions = extractResultsFromQueryObject($distinctProductOptionsSqlQuery, array('key'));

	if(count($distinctProductOptions) <= 0) continue;

	$uniqueOptions = "";
	$uniqueOptionsLength = count($distinctProductOptions);
	foreach ($distinctProductOptions as $idx => $value) {
		if($idx >= $uniqueOptionsLength - 1){
			$uniqueOptions .= "'$value'";
		} else{
			$uniqueOptions .= "'$value',";
		}
	}


	$uniqueOptionsIdsSqlQuery = prepareSqlQuery('SELECT modx_ms2_options.id,modx_ms2_options.key FROM `modx_ms2_options` WHERE modx_ms2_options.key IN ('.$uniqueOptions.')');
	$uniqueOptionsIds = extractResultsFromQueryObject($uniqueOptionsIdsSqlQuery, array('id'));

	if(count($uniqueOptionsIds) <= 0) continue;

	/* #################################### ##################################### */
	foreach($uniqueOptionsIds as $idx => $uniqueOptionId){
		if (!$cop = $modx->getObject('msCategoryOption', array('option_id' => $uniqueOptionId, 'category_id' => $categoryId))) {
			$table = $modx->getTableName('msCategoryOption');
			$sql = "INSERT INTO {$table} (`option_id`,`category_id`,`active`) VALUES ({$uniqueOptionId}, {$categoryId}, 1);";
			$stmt = $modx->prepare($sql);
			$stmt->execute();
		} else {
			$q = $modx->newQuery('msCategoryOption');
			$q->command('UPDATE');
			$q->where(array('option_id' => $uniqueOptionId, 'category_id' => $categoryId));
			$q->set(array('active' => 1));
			$q->prepare();
			$q->stmt->execute();
		}            
		
	}
	/* #################################### ##################################### */

	echo 'Done';
}
Vladimir
06 апреля 2023, 09:35
modx.pro
1
806
0

Success-страница после оформления заказа

Сделал по данному мануалу:
1. добавил параметр в системные minishop2


2. создал файл customorder.class.php в /core/components/minishop2/custom/order/ и зарегистрировал по документации через console

steve.kon
05 апреля 2023, 17:11
modx.pro
1 129
0

Как узнать все доступные для использования в шаблоне, чанке переменные?

Приветствую.
К примеру, есть какой-нибудь компонент, без разницы какой. В шаблоне или чанке при использовании этого компонента можно использовать различные переменные. Плейсхолдеры, к примеру. Если в документации не описаны такие возможности, то как можно узнать то, что доступно для использования/вывода с помощью того или иного компонента?
weranda
05 апреля 2023, 17:11
modx.pro
780
0

mSearch2 приводит к заполнению журнала ошибок (mSearch2 fills error log)

Каждый раз, когда я сохраняю какой-либо ресурс, мой журнал заполняется этой ошибкой (да, 2 раза):
Whenever I save any resource my log gets filled with this error (yes, 2x):
core/components/msearch2/phpmorphy/src/common.php : 670) PHP warning: Undefined array key "common_source"
core/components/msearch2/phpmorphy/src/common.php : 670) PHP warning: Undefined array key "common_source"

А также этот, когда я запускаю процессор ресурсов/обновления во фрагменте (да, 4 раза):
Also this one when I run the resource/update processor in a snippet (yes, 4x):
Vibe Design
04 апреля 2023, 16:48
modx.pro
897
0

Как раскрыть сайдбар на нужной странице в моем случае

При открытии товара, который находится в подкатегории одной из категорий, сайдбар выглядит так:

а должен быть так:

то есть категория и подкатегория раскрыты где виден активный пункт меню. Вот код:
var $offCanvasNav = $('.offcanvas-navigation'),
    $offCanvasNavSubMenu = $offCanvasNav.find('.sub-menu-mobile');

/*Add Toggle Button With Off Canvas Sub Menu*/
$offCanvasNavSubMenu.parent().prepend('<span class="menu-expand"><i></i></span>');

/*Close Off Canvas Sub Menu*/
$offCanvasNavSubMenu.slideUp(0);
Владислав
03 апреля 2023, 16:36
modx.pro
633
0

Не устанавливается мiniShоp2

Здравствуйте, начинающий я. Делаю первые шаги. С репозитория скачивается только мiniShоp2 версии 3.0.7-pl он я так понял не работает на modX 3. Версия мiniShоp2 [4.1.4-pl] — 2022-03-31 вижу есть. Как ее установить или где скачать? file.modx.pro/files/d/6/1/d61717f16cca13b03682ee9c52906da1.png
Сергей
03 апреля 2023, 00:53
modx.pro
521
0

Не создаётся база данных при чистой установки modx 3, как исправить?

При переходе на шаг с подключением к бд, подключается проверяет, но не создаёт, как исправить?
prnt.sc/Lczge2CqSJFD
Почему не создаёт не выдаёт ошибку
Vladimir
31 марта 2023, 18:21
modx.pro
1 140
0

msOrder для услуги

Всем привет! Прошу совета

На странице услуги хочу сделать следующее:
3 input'а, стоимость и кнопка заказать. Заполнение формы и нажатие на кнопку сразу перебрасывает на платежный терминал (robokassa).

Думаю для данной связки использовать minishop2 потому что:
1) автоматическая отправка писем о получении заказа и ссылка на платеж, если тот не удался / был сброшен. Соответственно, отслеживание и изменение статусов в админке, догонка и пр.
2) интеграция с robokassa

Вопрос лишь в том, как вывести msOrder с передачей в него нужного товара. Т.е. чтобы на странице услуг сразу был msOrder с параметрами данной услуги. Может как-то можно в msCart при выводе сразу добавить конкретный товар? В документации прямого указания на это не нашел…
steve.kon
31 марта 2023, 13:28
modx.pro
1
950
0

Сломался Minoshop

Здравствуйте.
Попытался обновить minishop до последней версии — сайт упал. Вернул старый, но видимо произошли какие-то изменения в базе данных, заказы не оформляются и не отображаются в админке. В консоли ошибка:
INSERT INTO `modx_ms2_orders` (`user_id`, `createdon`, `num`, `cost`, `cart_cost`, `delivery_cost`, `weight`, `status`, `delivery`, `payment`, `address`, `context`, `comment`, `properties`, `type`) VALUES (1596, '2023-03-31 11:13:46', '2303/1', '265', '265', '0', '0', 0, 6, 1, 20109, 'web', 'Жульен 1 шт. 265 руб. \n', '{\"cf.from_city\":2}', 0)
Array
(
    [0] => 42S22
    [1] => 1054
    [2] => Unknown column 'address' in 'field list'
)
Что делать? Доступа к базе данных нет пока. (
Игорь
31 марта 2023, 11:45
modx.pro
667
0