Всего 123 800 комментариев

Максим Логинов
11 апреля 2023, 01:13
0
Не работает только с полями user_id и id, что-то с джойнами, наверное
Максим Логинов
10 апреля 2023, 23:33
0
К сожалению с обновленным minishop2 не работает.
Вернее работает, но выбирает только по полям ms2_order_addresses и не работает с ms2_orders.
Иван
10 апреля 2023, 17:59
0
Добавил класс .rows, но альбомы выводятся также (с ajax и без — одинаково). Зато это помогло в другом месте — там перестали дублироваться результаты (но это наблюдалось только с включенным ajax). Я думал, что достаточно указать любой класс в &ajaxElemRows, но видимо нужно использовать конкретно класс .rows.
Тодор
10 апреля 2023, 14:45
+1
пробуй для обертки результатов добавить класс .rows
<div id="pdopage">
    <div class="posts-list posts-list--default one-right-sidebar rows">
        [[!pdoPage?
            ...    
        ]]
    </div>
    [[!+page.nav]]
</div>
Алексей Шумаев
09 апреля 2023, 19:58
0
Там может быть 2 момента:
1) изменение пути к классу обработчика доставки ms2 (в этом случае ошибка 500 появляется, фикс есть в новой версии, которая готовится)
2) более сложный момент, связанный с работой pdoTools.
Напишите в поддержку, решим.
Баха Волков
09 апреля 2023, 19:28
1
+10
За внедрение линтеров получу много проклятий, наверное, но так действительно лучше
Zulya
09 апреля 2023, 16:17
1
0
Надеюсь, кому-нибудь пригодится. Оказывается если в ТВ стоит значение по умолчанию, то при нем tvFilters не будет работать, даже после сохранения и смены на другое значение, не пишется в бд. Я убрала значение по умолчанию, и вручную указала значения ТВ в ресурсах. После все сработало.
Zulya
09 апреля 2023, 10:34
1
0
Здравствуйте!
Когда я добавляю &tvFilters=`companytype==mfo` к запросу pdoResources, то ничего не выводит, убираю tvFilters, снова выводит список ресурсов. Подскажите пожалуйста, где моя ошибка, почему tvFilters не работает? Спасибо!

[[pdoResources:default=`Ничего не найдено`?
			&parents=`47`
			&includeTVs=`address,tel,logo,companytype`
			&tvFilters=`companytype==mfo`
			&processTVs=`1`
			&limit=`10`
			&loadModels=`easycomm`
			&where=`{"class_key":"modDocument"}`
			&leftJoin=`{
			"ecThread": {
			"class": "ecThread",
			"on": "modResource.id = ecThread.resource"
						}
					   }`
			&select=`{
			"modResource": "*",
			"ecThread": "ecThread.rating_simple AS rating, ecThread.count AS reviews"
				}`
			&tpl=`topcompanies`
			&sortby=`{"rating":"DESC", "reviews":"DESC"}`
			]]
Vladimir
08 апреля 2023, 18:56
1
0
Из того что написано в описании могу дать такой пример.
Будет конкретный пример, распишу по лучше, ниже создаст только 1 ресурс.
<?php

$newResourceParentId = 2;
$newResourceUrl = 'super-product-1337';
$newResourcePageTitle = 'Лучший продукт в своём роде';
$newResourceTemplate = 8;

$createNewResource = $modx->runProcessor('resource/create', array(
    'parent' => $newResourceParentId,
    'pagetitle' => $newResourcePageTitle,
    'alias' => $newResourceUrl,
    'template' => $newResourceTemplate,
    'published' => 1
));

if ($createNewResource->isError()) {
    echo "Не могу создать страницу с таким заголовком='$newResourcePageTitle'
";
    return;
}
Артур Шевченко
08 апреля 2023, 18:42
0
Для чего вам массовое создание страниц?
Андрей
08 апреля 2023, 16:38
0
сделал по аналогии
файл
if ($_SERVER['HTTP_X_REQUESTED_WITH'] != 'XMLHttpRequest' || empty($_POST['action'])) {
		return;
	}

	define('MODX_API_MODE', true);

	require dirname(dirname(dirname(__FILE__))) . '/index.php';
	
	$modx->getService('error','error.modError');
	$modx->setLogLevel(modX::LOG_LEVEL_ERROR);
	$modx->setLogTarget('FILE');
	
	
	if ($_POST['action'] == "getList" && isset($_POST['parent'])) {
		//Получаем значение для второго селектора
		$snippetParams = array();
		$snippetParams['parents'] = intval($_POST['parent']);
		$snippetParams['tpl'] = 'option.item';
		$snippetParams['showUnpublished'] = '1';
		$snippetParams['depth'] = '0';

		//Дописать параметры для сниппета получающего результаты по вкусу			

		$snippetResult = $modx->runSnippet('pdoResources', $snippetParams);

		$result = array($snippetResult, 'success');
	}
	else {
		$result = array('Некорректный запрос', 'error');
	}
	
	if (!empty($result)) {
		die(json_encode($result));
	}
скрипт
<script type="text/javascript">
    	$(document).on('change', 'select[name="vid_vzn"]', function(e) {
    		if ($(this).val() != '') {
        			$.ajax({
        				type: "POST",
        				url: "assets/lk/getlist.php",
        				data: {
        				    action: 'getList', 
        				    parent: $("select[name='vid_vzn']").val()
           		         },

        			success: function(response) {
        				var data = eval(response);
        
        				switch (data[1]) {
        					case 'success':
    						//Если все ок - вставляем результат во второй селектор
    						$("select[name='god']").val("").html("<option value='' selected disabled>Выберите значение из списка</option>" + data[0])
    
        						break;
       							
        						
        					}
        				}
        			});
    		}
    	});
    </script>
html
<div class="form-group">
		<label for="vid_vzn" class="col-sm-4 control-label">Вид взноса</label>
		<div class="col-sm-8">
			 <select class="form-control" name="vid_vzn" id="vid_vzn">
			 [[!pdoResources?
			    &parents=`1469`
			    &depth=`0`
			    &limit=`0`
			    &showUnpublished=`1`
			    &tpl=`@INLINE <option value="[[+id]]">[[+pagetitle]]</option>`
			    &sortby=`pagetitle`
			    &sortdir=`ASC`
			]]
			 </select>
		</div>
	</div>
	<div class="form-group">
		<label for="god" class="col-sm-4 control-label">Выберите год</label>
		<div class="col-sm-8">
			<select name="god">
			    <option value="" selected disabled>Год</option>
			</select>
		</div>
	</div>
удалил вот это кусок, он у меня ошибку вызвал, по идее если все норм он не должен влиять на работу.
case 'error':
							//Если не ок - выводим ошибку (используется jGrowl)
    							$.jGrowl(data[0], {theme: 'error', position: 'center'});
    							
    							break;
при переключении первого списка появляется только вот это «Выберите значение из списка», а сам список пустой.
элементы неопубликованные и контейнеры, но я вроде бы добавил параметры чтобы они попадали в выборку, да и пробовал публиковать — все равно ничего не дает.
Vladimir
08 апреля 2023, 13:53
2
0
[РЕШЕНО] Суть в том чтобы в админке появились только те характеристики у товара которые есть, это значит поставить все уникальные характеристики для категории, нужно было именно такое решение, сделал сам. А если не нужно их указывать в админке для редактирования, то да проще будет вывести их список через 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){

	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){
			$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'));

			$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'));


			/* #################################### ##################################### */
			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';
		}
	}
}
Павел Гвоздь
07 апреля 2023, 19:03
+3
рассмотрите возможность в будущем интеграции с Планировщиком (пакет scheduler) — он уже из коробки поддерживается в новых версиях MiniShop
Хорошая идея! Сделаю скоро.
Павел Гвоздь
07 апреля 2023, 19:02
0
Любой платный компонент можно установить на тестовом тарифе Modhost и проверить самостоятельно, подходит ли он вам.
Никита
07 апреля 2023, 18:57
0
Добрый день, подскажите как решить проблему или куда смотреть. Сайт на MODX Revolution 2.8.3pl, мультиязычный(Polylang 1.3.0), на всех языках все корректно отображается, кроме одного. Думали что проблема в словарях, но после очистки всех данных этого языка, проблема осталась.

/core/components/polylang/handlers/tools/polylangtools.class.php

PHP warning: array_merge(): Expected parameter 1 to be an array, string given
Евгений
07 апреля 2023, 18:55
+1
Даже лучше чем fastuploadtv
Евгений
07 апреля 2023, 18:52
0
Тех. поддержки походу нет, кто ни будь сталкивался с тем что не работает импорт из csv? логи не указывают что есть проблема с импортом.
Дима Касаткин
07 апреля 2023, 18:30
+4
Вот благодаря таким компонентам магазины с MODX + MiniShop = TOP!
@Павел Гвоздь рекспект!

По пункту из поста про CRON-задание: рассмотрите возможность в будущем интеграции с Планировщиком (пакет scheduler) — он уже из коробки поддерживается в новых версиях MiniShop, а значит есть шанс, что CRON для него уже будет настроен в рабочем магазине, который владелец захочет улучшить за счет нового компонента! Давайте объединять и упрощать экосистему там, где возможно без побочных эффектов!
Андрей Шевяков
07 апреля 2023, 18:12
+2
Спасибо за компонент!
Только ради такой возможности уже компонент очень нужный:
– Выслать промокод на следующий заказ через 2 недели после отправки заказа клиенту.
Купили дополнение, для новой версии сайта ювелирной тематики. Старая версия очень хорошо на промо-кодах отрабатывает. Надеемся с этим дополнением еще прибавит клиентов.