Евгений

Евгений

С нами с 10 октября 2018; Место в рейтинге пользователей: #2171

вывод всех опций из категории

Добрый день!

Написал снипет, который должен выбирать все опции из категории. Он запрос делает правильный, но почему то результирующий массив пуст. Хотя если этот же запрос выполнить в phpmyadmin то все нормально выводится

<?php
$q = $modx->newQuery('msOption');
$q->leftJoin('msCategoryOption', 'msCategoryOption', 'msCategoryOption.option_id=msOption.id');
$q->select(array(
    $this->modx->getSelectColumns('msOption', 'msOption'),
    $this->modx->getSelectColumns('msCategoryOption', 'msCategoryOption', '', array('id', 'option_id'),
        true),
));

$q->where(array(
            'msCategoryOption.category_id' => 9,
        ));
        
$q->prepare();
$q->stmt->execute();
$res = $q->stmt->fetchAll(PDO::FETCH_ASSOC);
echo $q->toSQL();


Запрос в итоге —
SELECT `msOption`.`id`, `msOption`.`key`, `msOption`.`caption`, `msOption`.`description`, `msOption`.`measure_unit`, `msOption`.`category`, `msOption`.`type`, `msOption`.`properties`, `msCategoryOption`.`category_id`, `msCategoryOption`.`rank`, `msCategoryOption`.`active`, `msCategoryOption`.`required`, `msCategoryOption`.`value` FROM `modx_ms2_options` AS `msOption` LEFT JOIN `modx_ms2_category_options` `msCategoryOption` ON msCategoryOption.option_id=msOption.id WHERE `msCategoryOption`.`category_id` = '9'
если в phpmyadmin —

Но если сделать print_r($res) — ПУСТО!

Подскажите пожалуйста — в чем ошибся?

Еще выяснилось, что любой запрос к msOption выводит пустой результат, даже такой —
$q = $modx->newQuery('msOption', array('id:>' => 0));
$q->prepare();
$q->stmt->execute();
echo $q->toSQL();
$res = $q->stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($res as $v) {
	echo $v['key'];
}
результат —

Но прямой запрос — работает!!!
$sql = "SELECT op.*, catop.* FROM `modx_ms2_options` as op LEFT JOIN `modx_ms2_category_options` as catop on op.id = catop.option_id where catop.category_id = 9";
$q = $modx->prepare($sql);
$q->execute();
$res = $q->fetchAll(PDO::FETCH_ASSOC);

foreach ($res as $v) {
	echo $v['key'] . ' | ';
}
Евгений
11 декабря 2018, 19:48
modx.pro
747
0

Убрать вложенность url у товаров

Добрый день!

Подскажите пожалуйста, есть ли возможность убрать вложенность url только у товаров minishop2, у все остальных ресурсов — сохранить вложенность?

версия modx 2.6.5pl

Можно, конечно, плагином при сохранении товара замораживать uri.
Но при использовании компонента импорта, uri будет прописываться как в настройках сайта, т.е вложенный.

Пока вижу решение в таком плагине —

<?php
$eventName = $modx->event->name;


switch($eventName) {
    case 'OnDocFormSave':
      if ($resource->get('class_key') == 'msProduct') { 
        $alias = $resource->get('alias');
        $resource->set('uri',$alias);
         $resource->set('uri_override', 1);
        $resource->save();
      }
    break;
}

p.s. Вобщем это похоже единственное решение, и в процессоре minishop2 create вызывается
fireBeforeSaveEvent(), а там invokeEvent('OnBeforeDocFormSave').
Так что при импорте должно быть все в порядке.
Евгений
10 декабря 2018, 16:37
modx.pro
745
0