Василий Столейков

Василий Столейков

С нами с 19 декабря 2012; Место в рейтинге пользователей: #25
Отправить деньги
Василий Наумкин
12 ноября 2016, 10:27
4
+9
Покопался в исходниках и написал пока такой фикс xPDO::getCriteria():
public function getCriteria($className, $type = null, $cacheFlag = true)
{
    $c = $this->newQuery($className);
    $c->cacheFlag = $cacheFlag;
    if (!empty($type)) {
        if ($type instanceof xPDOCriteria) {
            $c->wrap($type);
        } elseif (is_array($type)) {
            $tmp = array();
            array_walk_recursive($type, function ($v, $k) use (&$tmp) {
                if (!is_numeric($k)) {
                    $tmp[$k] = $v;
                }
            });
            if (count($tmp)) {
                $c->where($tmp);
            }
        } elseif (is_scalar($type)) {
            if ($pk = $this->getPK($className)) {
                $c->where(array($pk => $type));
            }
        } else {
            $c->where($type);
        }
    }

    return $c;
}
Это запрещает все запросы на получения объекта xPDO произвольным SQL запросом. Можно использовать либо первичные ключи, либо массивы с прописанными ключами, которые будут проверены при запросе.

По моим тестам работает хорошо, желающие могут проверить на себе — это файл core/xpdo/xpdo.class.php. Предложил код автору xPDO, буду ждать ответа.
Владимир
02 ноября 2016, 12:53
1
+2
PS уже к сказанному. Кто продает свой труд и услугу имеет доход и ремесло, а кто продает (организует) чужие труд и услуги — имеет доход и бизнес.
Сергей Шлоков
01 октября 2016, 09:00
1
0
Вот по extJs modx'а мало что-то доков или я плохо ищу, посоветуешь что нибудь?
Копать исходники. Вот тут есть немного.
Василий Столейков
26 сентября 2016, 07:24
2
0
Есть поле unpub_date, а при продлении просто нужно увеличивать дату unpub_date (можно и publishedon для поднятия объявления) на нужное количество дней.
А MODX уже сам отпубликует по unpub_date — никаких дополнительных действий не нужно.
Василий Наумкин
13 сентября 2016, 18:51
2
+2
Более оптимальный код для добавления опции товара в поисковый индекс:
<?php
switch ($modx->event->name) {
    case 'mse2OnBeforeSearchIndex':
        $key = 'tags'; // имя опции товара
        
        $mSearch2->fields[$key] = 1;
        $q = $modx->newQuery('msProductOption', array(
            'product_id' => $resource->id,
            'key' => $key,
        ));
        $q->select('value');
        if ($q->prepare() && $q->stmt->execute()) {
            $value = $q->stmt->fetchAll(PDO::FETCH_COLUMN);
            if (!empty($value[0])) {
                $resource->set($key, $value);
            }
        }
    break;
}
Максим
26 августа 2016, 11:47
1
0
Спасибо! действительно заработало и очень элементарно :)
Илья Уткин
23 августа 2016, 11:53
2
+2
Попробуйте у ресурса, на котором происходит такая фигня, убрать галочку «Кешируемый»
Владимир
03 августа 2016, 06:34
1
+1
Вот -вот) Почему то мне так сразу это и представлялось.
Еще можно было шаблоны упаковать вот этим ThemePackagerComponent, но раз искал «заразу», то руками, конечно, вернее.
Виктор
Виктор
27 июля 2016, 06:49
1
0
жизнь в сообществе просто кипит. с ума сойти. спасибо всем (0) откликнувшимся, уже решил вопрос другим путем
Василий Столейков
20 июля 2016, 21:24
1
-1
Лучше сразу на тикетах начать, т.к. он заточен под статьи. И необязательно использовать все его возможности, тем более что в будущем возможно они и понадобятся.
В тикетах все статьи (тикеты) собраны в контейнеры (секции) и не отображаются в дереве ресурсов в админке. За год будет 50 статей, а что будет через 3 года с админкой? Однозначно нужны тикеты — не пожалеете!