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

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

С нами с 19 декабря 2012; Место в рейтинге пользователей: #23
Илья Уткин
25 октября 2015, 15:25
1
+2
Все потому что шаблон страницы получает значение из базы и переводит его в дату сразу. То же делает и getResources. А pdoResources с этим не заморачивается — ради быстродействия. Поэтому он выводит сырое значение.

Так что стандартный процесс выглядит так:
1445775731→ 2015-10-25 15:23:20 → 1445775731 → 25.10.2015

А работа с pdoResources так:
1445775731 → 25.10.2015
Максим
07 октября 2015, 13:52
8
+2
Может быть кому-то пригодится простенький сниппет для вызова mFilter2, который дописывает в параметр filters имена назначенных для категории опций — эти опции выводятся в фильтре чекбоксами:
<?php
$catid = $modx->resource->id;
$q = $modx->newQuery('msCategoryOption');
$q->select(array(
    'msCategoryOption.category_id',
    'msCategoryOption.option_id',
    'mso.key'
    ));
$q->where(array(
    'msCategoryOption.category_id' => $catid
    )
    );
$q->leftJoin('msOption','mso','msCategoryOption.option_id = mso.id');
$q->prepare();
$q->stmt->execute();
$options = $q->stmt->fetchAll(PDO::FETCH_ASSOC);
$_options = array();
foreach ($options as $option) {
    $_options[] = 'msoption|'.$option['key'];
}
$_options = implode(',',$_options);
$scriptProperties['filters'] = implode(',',array($scriptProperties['filters'],$_options));
return $modx->runSnippet('mFilter2',$scriptProperties);
Василий Наумкин
29 сентября 2015, 03:22
1
+1
Вообще, для таких дел оформление комментариев ветками в Tickets не очень подходит, но плоский режим я так пока и не доделал.

Можно попробовать сделать такой сниппет-обёртку getAuthorComments:
<?php
if ($modx->user->id != $modx->resource->createdby && !$modx->user->isMember('Administrator')) {
	$scriptProperties['where'] = $modx->toJSON(array(
		'createdby:IN' => array($modx->user->id, $modx->resource->createdby),
	));
}

return $modx->runSnippet('TicketComments', $scriptProperties);

И вызывать его вместо TicketComments, где нужно:
[[!getAuthorComments?
	&showLog=`1`
]]
Василий Наумкин
15 сентября 2015, 12:25
4
+2
$modx->log(1, print_r(array_keys($scriptProperties), 1));
И смотри имена переменных в логе системы.
Василий Наумкин
03 сентября 2015, 22:37
1
+1
У Summary от Евгения Борисова вроде есть нужный параметр cut.
Василий Наумкин
27 августа 2015, 16:59
3
+2
В общем, этот конкретный недостаток — суть продолжение достоинств Fenom.

Все ajax запросы eventsCalendar2 отправляются на текущую страницу, где сниппет должен их словить, обработать, выдать ответ и прервать работу парсера. В общем, как написано в этой статье.

И всё отлично работает, за исключение того, что при компиляции шаблона Fenom он прописывает вывод всех данных не в переменную, которую покажет в конце, а выводит их сразу через echo.

Соотвественно, в ответ ajax запроса попадают все сниппеты, обработанные до eventsCalendar2 — и ты видишь их на странице. Это косяк старой архитектуры eventsCalendar2, ведь по уму нужно бы отправлять все запросы на отдельный коннектор или плагин, как в mFilter2 и miniShop2.

Но можно выйти из ситуации и сейчас:
1. Нужно вызывать eventsCalendar2 в шаблоне, перед всеми другими сниппетами, и сохранять его вывод в переменную.
2. А переменную уже выводить на странице. Но не в контенте, а тоже в шаблоне или в чанке, потому что ресурс обрабатывается перед шаблоном и переменная там еще будет пуста.

Тогда при обычной загрузке страницы сниппет отработает, данные сохранятся в переменную и выведутся в нужном месте страницы. А при ajax запросе сниппет отреагирует первым и выдаст чистый ответ, без других сниппетов.

Примерно так:
{set $calendar = $_modx->runSnippet('!eventsCalendar2', [
	...
])}

{$calendar}

Кстати говоря, можно так сохранять и вывод других сниппетов, чтобы вызывать их в одном месте, а показывать в другом.
Максим Кузнецов
02 августа 2015, 18:42
7
+7
Необходимо создать кастомный класс доставки:

1) Идем в core/components/minishop2/custom/delivery/ и создаем здесь свой пхп файл (допустим, mscustomdeliveryhandler.class.php) со следующим содержимым:

<?php

//Важно: при изменении названия файла, вот в этом месте также нужно изменить класс
class mscustomdeliveryhandler extends msDeliveryHandler{

	public function getCost(msOrderInterface $order, msDelivery $delivery, $cost = 0) {
        $cart = $this->ms2->cart->status();
        
	//условие начисление доставки
        if ($cart['total_cost'] < 5000) {
            $add_price = $delivery->get('price');
            if (preg_match('/%$/', $add_price)) {
                $add_price = str_replace('%', '', $add_price);
                $add_price = $cost / 100 * $add_price;
            }
            $cost += $add_price;
        }
        
        return $cost;
    }

}

2) Идем в настройки магазина -> Варианты доставки.
Создаем новый вариант «Доставка» (или редактируем исходный), после чего заполняем в «дополнительную стоимость» требуемое значение (300 рублей), в Класс-обработчик пишем название созданного файла — mscustomdeliveryhandler, заполняем доступные способы оплаты и ставим галочку напротив «включен».
Володя
17 июля 2015, 11:13
1
+1
можно очистить так
$modx->runProcessor('system/errorlog/clear');
Пётр Молчанов
14 июля 2015, 10:40
1
+1
Надо юзать $modx->cacheManager->refresh();
Подробнее про опции смотри тут rtfm.modx.com/revolution/2.x/developing-in-modx/advanced-development/caching