mSearch 2 + MiniShop2 [options - color selection] ошибка!

Всем доброго времени суток.
Кто сталкивался с проблемой mSearch2 + использовании опции ЦВЕТ релиз MiniShop2 [4.1.0-pl] — 2022-31-01 New type of options — color selection

Поведения сайта в таких конфигурациях:
(версия PHP 7,4) страница и фильтр работает… лог заполнен таким:
[2023-04-12 13:27:03] (ERROR @ /core/components/msearch2/model/msearch2/filters.class.php : 529)
 PHP warning: Illegal offset type in isset or empty
Денис Усачев
12 апреля 2023, 15:17
modx.pro
478
0

Как выяснить где ошибка?

Доброе время суток
Помогите советом
есть ошибка не знаю как найти где возникает
в логах такое сообщение
11.04.2023	20:35:33	ERROR	..../core/xpdo/om/xpdoobject.class.php	928
xPDOObject - Called set() with an invalid field name:
даже блин имя переменной нет…
Greza
11 апреля 2023, 20:43
modx.pro
539
0

Description символических ссылок

Всем привет, на своем сайте использую обычные ресурсы и символические ссылки к ним. На странице категорий вывожу ресурсы и симлинки так:

{'!pdoResources' | snippet : [
	'parents' => $_modx->resource.id,
	'depth' => '5',
	'includeContent' => '1',
	'tpl' => 'CategoryTemplate',
	'sortby' => 'menuindex',
	'sortdir' => 'ASC',
	'limit' => '0'
 ]}

В чанке CategoryTemplate:

<li class="list-group-item d-flex flex-wrap">
  <span>{$pagetitle}</span>
  <span>{$_pls['description']}</span>
</li>
Почему при таком выводе description симлинк-ресурса не отображается? Да, это поле не заполнено, но эти данные должны браться у той страницы, на которую ссылается символическая ссылка.

Использую MODX 3.0.3
Andrei
11 апреля 2023, 20:24
modx.pro
369
0

Повторяются результаты пагинации (GalleryAlbums + pdoPage)

Приветствую всех!

Необходимо вывести на странице по 3 альбома с помощью GalleryAlbums, пагинация реализована с помощью pdoPage.

<div id="pdopage">
	<div class="posts-list posts-list--default one-right-sidebar">
		[[!pdoPage?
			&elementClass=`modSnippet`
			&element=`GalleryAlbums`
			&rowTpl=`tpl.gallery.albums`
			&showAll=`0`
			&parent=`12`
			&sort=`year`
			&dir=`DESC`
			&limit=`3`

			&tplPageWrapper=`@INLINE <nav class="navigation pagination" role="navigation"><h2 class="screen-reader-text">Навигация</h2><div class="nav-links">[[+prev]][[+pages]][[+next]]</div></nav>`
			&tplPage=`@INLINE <a class='page-numbers' href='[[+href]]'>[[+pageNo]]</a>`
			&tplPageActive=`@INLINE <span aria-current='page' class='page-numbers current'>[[+pageNo]]</span>`
			&tplPagePrev=`@INLINE <a class="prev page-numbers" href="[[+href]]"><i class="material-icons">navigate_before</i></a>`
			&tplPageNext=`@INLINE <a class="next page-numbers" href="[[+href]]"><i class="material-icons">navigate_next</i></a>`
			&tplPageSkip=`@INLINE <span class="page-numbers dots">…</span>`
			&tplPageFirst=``
			&tplPageLast=``
			&tplPagePrevEmpty=``
			&tplPageNextEmpty=``
			&tplPageFirstEmpty=``
			&tplPageLastEmpty=``
		]]
	</div>
[[!+page.nav]]
</div>
Иван
10 апреля 2023, 10:38
modx.pro
901
0

miniShop 4.1.5 - новые фичи для разработчиков

Привет друзья! Давненько я ничего не писал про минишоп. Между тем вышло уже 5 версий с момента последней заметки. И я хочу рассказать о нескольких любопытных улучшениях. А на закуску поговорим о качестве кода.
Николай Савин
09 апреля 2023, 19:02
modx.pro
989
+25

Как массово создать страницы

Здравствуйте, нужно создать страницы у других страниц с определенными id Указав у страниц seo url, Title, id шаблона. Можно ли это сделать через Console в modx REVO?
Игорь
08 апреля 2023, 15:16
modx.pro
596
0

Настройки mSync для соединения с 1с (после обновления Apache/2.4.6 CVE-2023-25690)

Может кому пригодится, я эту проблему решал весь день.

После обновления Apache/2.4.6 CVE-2023-25690 появились проблемы соединения с 1с по средствам компонента mSync

Fri Apr 07 11:39:22.840337 2023] [rewrite:error] [pid 3559] [client 185.xx.xxx.xxx:58776] AH10411: Rewritten query string contains control characters or spaces

Если у вас Apache то не создавайте или удалите .htaccess в папке /assets/components/msync/ (про который написано в документации) — возможно его можно было бы просто изменить, но как я не пытался, рабочую версию я не смог найти.

Если CGI я не нашел решения… возможно для него нужен .htaccess но точно не тот, что в документации.

Еще одна странность, я создал два одинаковых сайта на разных серверах, обновил ПО на обоих, на одном работало без удаления .htaccess на другом ни как не работало, выдает 403.

Может кто-то тоже с толкнулся с подобной ошибкой, буду признателен обратной связи.
Сергей
07 апреля 2023, 16:33
modx.pro
748
+1

Как выбрать записи за интервал времени?

Пытаюсь через modRestController получить записи за интервал времени, но выходит какая-то фигня:
Прямой sql норм: SELECT * FROM `table` WHERE time BETWEEN «2023-04-04T01:15:58» AND «2023-04-04T23:13:00», а через квери билдер что-то не хочет
$this->whereCondition['time:BETWEEN'] = $startTime;
    $this->whereCondition['time:AND'] = $endTime;
// возвращает все что после 2023-04-04
Konstantin
06 апреля 2023, 20:31
modx.pro
512
0

Псевдонимы mSearch2 работают не так, как ожидалось

У меня есть два ресурса продуктов, которые содержат похожий продукт, но имеют разные названия:
  • ресурс A: Solarmodule
  • ресурс B: Solarpanel
Если кто-то ищет solar, он находит оба ресурса, и это работает нормально. Но если кто-то ищет solarmodule, он находит только ресурс A, а solarpanel — только ресурс B. Но они должны находить оба каждый раз.
Vibe Design
06 апреля 2023, 18:17
modx.pro
348
0

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

Как в категории указать все характеристики что используются в товарах этой категории? в 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
430
0