Кровельный

Кровельный

С нами с 30 мая 2023; Место в рейтинге пользователей: #7204
Кровельный
15 ноября 2023, 10:22
1
0
Возможно условие, как-то обвернуть?
&where=`[{"Data.id:NOT IN":["32"]}, {"Data.favorite":"1","OR:Data.new:=":"1"}]`
[[!msProducts?
	&parents=`2`
	&depth=`5`
	&limit=`10`
	&sortby=`{"publishedon":"DESC"}`
	&where=`{"Data.id:NOT IN":["32"],"Data.favorite":"1","OR:Data.new:=":"1"}`
	&tpl=`idx_new`
	&showLog=`1`
]]
R2m0x94 (Vasily)
17 апреля 2022, 10:26
1
0
В сниппете mFilter2 раскомментируйте или добавьте строку на ~408, чтобы посмотреть в журнале ошибок — на какой странице проблема.
<?php
if (in_array($v['type'], array('number', 'decimal')) && isset($suggestions[$filter_key])) {
    $tmp = $suggestions[$filter_key];
    array_walk($tmp, function($v, $k) use (&$tmp) {
        if (empty($v)) {
            unset($tmp[$k]);
        }
    });
    $tmp = array_keys($tmp);
    if ($v['type'] == 'number') {
        $current_value = ($idx == 0)
            ? floor(min($tmp))
            : ceil(max($tmp));
            //$modx->log(modX::LOG_LEVEL_ERROR, 'PHP warning: min & max: [mSearch2] array("number", "decimal"): on "'.urldecode($_SERVER['REQUEST_URI']).'"');
    } else {
        $current_value = ($idx == 0)
            ? min($tmp)
            : max($tmp);
    }
}
Далее, проверьте в самом вызове сниппета параметр &suggestions — какой фильтр используется, потом перейдите в чанк с input type=[number] и добавьте к input атрибуты min=«0» и max=«1000», max можно не указывать. Надеюсь помог.
Андрей
27 января 2021, 22:49
1
0
а там где вываливается весь каталог, group содержит и цифры и буквы: Z2416
Да, действительно, у меня опция была числовая, потому не проверял с буквами. Сделай такой вывод, работает правильно:
{'!msProducts' | snippet : [
	'resources' => -$_modx->resource.id,
	'parents' => 35,
	'limit' => 10,
	'tpl' => 'tpl-shop-item-small',
	'innerJoin' => '{ "Options":{ "class":"msProductOption"}}',
	'groupby' => 'msProduct.id',
	'where' => ['Options.key' => 'group', 'AND:Options.value:=' => $_modx->resource.group.0]
]}
Михаил
18 июля 2018, 11:03
1
0
Все решилось гораздо проще. Пропустил решение, которое не раз обсуждалось, с помощью sendForward.

1. Плагин на OnPageNotFound:
<?php
if ($modx->event->name != 'OnPageNotFound') {return false;}
$alias = $modx->context->getOption('request_param_alias', 'q');
if (!isset($_REQUEST[$alias])) {return false;}
$request = $_REQUEST[$alias];
if (!$id_res = $modx->findResource($request, 'web')) return false;
$modx->sendForward($id_res);
exit();
2. Включить настройку allow_forward_across_contexts.
Василий Наумкин
26 января 2015, 22:03
6
0
$pdo = $modx->getService('pdoFetch');
$result = $pdo->getArray(
	// Класс
	'msProduct',
	// Условие where
	array(
		'deleted' => false,
		'published' => true,
	),
	// Параметры выборки
	array(
		'parents' => 5, // Категория с товарами
		'innerJoin' => array(
			'Data' => array('class' => 'msProductData')
		),
		'select' => array('Data' => 'price'),
		'sortby' => 'Data.price',
		'sortdir' => 'asc',
	)
);
if (!empty($result)) {
	echo $result['price'];
}
// При желании можно лог посмотреть
echo '<pre>';
print_r($modx->getPlaceholder('pdoTools.log'));
Василий Наумкин
29 сентября 2014, 17:59
2
+1
Получится, там же строка с JSON.

Но правильнее, конечно, так:
[[!msProducts?
	&parents=`0`
	&innerJoin=`{"Options":{"class":"msProductOption"}}`
	&groupby=`msProduct.id`
	&where=`{"Options.key":"color","Options.value:IN":["Белый","Белая"]}`
]]
Василий Наумкин
18 сентября 2013, 17:23
9
0
<?php
$tvid = 1; // id нужного ТВ параметра
$res = array(); // Сюда забиваем результаты

$q = $modx->newQuery('modTemplateVarResource', array('tmplvarid' => $tvid));
$q->select('contentid,value');
if ($q->prepare() && $q->stmt->execute()) {
	while ($row = $q->stmt->fetch(PDO::FETCH_ASSOC)) {
		$res[$row['contentid']] = $row['value'];
	}
}
print_r($res);

Получишь массив с id ресурсов и значенями ТВ c id = 1.