man

man

С нами с 04 января 2016; Место в рейтинге пользователей: #235
Павел Левин
23 марта 2015, 14:35
2
0
Есть идея по созданию нормального дефолтного шаблона для магазина?

Вот отличный пример реализации категории с быстрым просмотром и т.п. включая добавление в корзину.

Пример + код разметки | Virgil Pana
Василий Наумкин
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'));
Максим Кузнецов
17 января 2015, 21:43
1
0
Все вызовы jgrowl'a вызываются дефолтными яваскриптами в папке assets у соответствующего дополнения.

Пример (default.js):
$.jGrowl(message, {theme: 'm-Success'})
— меняешь такие строчки на вызов нужного алерта, предварительно подключив соответствующий файл скрипта.
Fi1osof
17 декабря 2014, 13:01
1
0
Ваня, привет!
Если тебе нужен именно файловый кеш-манагер (мне такое часто надо, не смотря на то, что используется мем-кешер, просто для того, чтобы что-то в файлы записывать и не заморачиваться с наличием директорий:)), то ты можешь несколько вариантов использовать.
Самый простой — это просто через $modx->getService() или new $className() (это ты и сам знаешь), но есть более правильный путь — юзать $modx->cacheManager->getProvider(). Просто MODX умеет одновременно работать с несколькими провайдерами. При этом есть вот такой вариант:
$manager = $modx->cacheManager;
$provider = $manager->getCacheProvider('file_cacher_key', [
    "file_cacher_key_cache_handler" => "xPDOFileCache",
]); 

$param = 'some value';
$key = "param_key";
$provider->set($key, $param);
Здесь ты работаешь с объектом конкретного кеш-провайдера. Обрати внимание в передаваемых параметрах: ключ провайдера является префиксом для параметра в массиве. file_cacher_key file_cacher_key_cache_handler. Ключ можно любой указывать, но правило соблюдать надо (только обязательно указывать и не default, иначе будет возвращен текущий кеш-провайдер, так как default — это его ключ в массиве провайдеров кеш-манагера).

Но в данном случае не совсем удобно то, что если будет желание еще в каком-то месте с ним поработать, то надо будет опять юзать getCacheProvider(). Вот другой вариант:
$manager = $modx->cacheManager;
$manager->getCacheProvider('file_cacher_key', [
    "file_cacher_key_cache_handler" => "xPDOFileCache",
]); 

$param = 'some value';
$key = "param_key";
$manager->set($key, $param, null, array(
    xPDO::OPT_CACHE_KEY => "file_cacher_key",
));
Здесь мы уже указываем ключ в методе set() самого кеш-манагера (само собой и в get() можем и т.п.). То есть метод $manager->getCacheProvider() получается своего рода регистратор кеш-провайдера, который можно один раз вызвать где-нибудь в плагине на OnHandlerRequest или типа того, а потом юзать стандарные set() И get(), просто указывая ключ файлового кеш-провайдера (или какой нужен).
Василий Наумкин
01 октября 2014, 08:46
3
+1
[[!pdoResources?
	&class=`msProductFile`
	&where=`{"product_id":10, "parent":0}`
	&sortby=`id`
	&sortdir=`asc`
]]
parent = 0 — это выборка именно большой картинки, потому что у превьюшек parent всегда не 0, а id существующей картинки. Ну а product_id понятно что — id нужного товара.

Друзья, осваивайте уже pdoTools.
Василий Наумкин
09 июня 2014, 13:22
2
+1
$name = 'Sony';
if (!$vendor = $modx->getObject('msVendor', array('name' => $name))) {
	$vendor = $modx->newObject('msVendor', array('name' => $name));
	$vendor->save();
}

return $vendor->get('id');
Василий Наумкин
23 января 2014, 04:46
1
0
Или &hideSubMenus=`1`, если нужна только активная ветка меню от.
Василий Наумкин
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.
Алексей Карташов
04 августа 2013, 14:00
1
0
Усё, вопрос решён.
Переделал запрос на такой:
SELECT  `msDiscountCard`.`id`,
		`msDiscountCard`.`uid`,
		`msDiscountCard`.`public`,
		`msDiscountCard`.`discount_id`,
		`msDiscountCard`.`amount`,
		`msDiscountCard`.`amount_used`,
		`msDiscountCardMember`.`user_id`,
		`msDiscountCardMember`.`owner_type`,
		`msDiscountCardMember`.`discount_card_id`
	FROM `modx_bunny_lovems2_discount_card` AS `msDiscountCard`
	LEFT JOIN `modx_bunny_lovems2_discount_card_members` AS `msDiscountCardMember`
	ON `msDiscountCardMember`.`discount_card_id` = (
		SELECT  `msDiscountCardMember`.`discount_card_id`
			FROM `modx_bunny_lovems2_discount_card_members` AS `msDiscountCardMember`
			WHERE `msDiscountCardMember`.`owner_type` = 'owner'
				AND `msDiscountCard`.`id` = `msDiscountCardMember`.`discount_card_id`
			LIMIT 1
	)

И собрал его на xPDO вот так:
$subquery = $modx->newQuery('msDiscountCardMember');
$subquery->select('`msDiscountCardMember`.`discount_card_id`');
$subquery->where(array(
	'`msDiscountCardMember`.`owner_type`' => 'owner',
	'`msDiscountCard`.`id` = `msDiscountCardMember`.`discount_card_id`'
));
$subquery->limit(1);
$query = $modx->newQuery('msDiscountCard');
$query->select('`msDiscountCard`.*, `msDiscountCardMember`.`user_id`');
if ($subquery->prepare()) {
	$query->leftJoin('msDiscountCardMember', 'msDiscountCardMember', array(
		'`msDiscountCardMember`.`discount_card_id` = ('. $subquery->toSQL() .')'
	));
}
Иван Брежнев
01 марта 2013, 00:45
1
0
Я вот писал небольшой плугин для смены шаблона ресурса на лету, там есть описание как сделать чтобы при аякс запросе ресурсу назначался пустой шаблон modx.im/blog/triks/391.html