Максим Кузнецов

Максим Кузнецов

С нами с 01 июля 2013; Место в рейтинге пользователей: #33
06 октября 2015, 21:27
+1
По половине пунктов поможет расширение классов.
А вот с оплатой через 2 разных счета, скорее всего, придется помучиться и править ядро.
06 октября 2015, 17:48
1
0
Понимаете правильно, это какая-то каша.

Допустим, у вас есть сниппет pdoResources на странице вида site.ru/catalog. Ссылки с заранее определенными способами фильтрации будут выглядеть примерно вот так:
site.ru/catalog?sortby=rating&dir=ASC
site.ru/catalog?sortby=pagetitle&dir=DESC
… и так далее.

Все, что идет после site.ru/ — это get-параметр ссылки и его нам необходимо перехватывать, чтобы отдавать сниппету, выводящему ресурсы.

Мы можем создать простой сниппет GET со следующим содержанием:
<?php
	return $_GET[$get];

И вместе с данным сниппетом преобразовывать вывод ресурсов на странице примерно таким образом:

[[!pdoResources? &sortby=`[[!GET:default=`pagetitle`? &get=`sortby`]]` &sortdir=`[[!GET:default=`DESC`? &get=`dir`]]`]]

Минус данного решения в том, что пользователь может вбить свое значение в адрес ссылки, допустим: site.ru/catalog?sortby=TEST&dir=BANAN, в результате чего на странице сниппет вернет ошибку.

Поэтому, напишем свой сниппет pdoResourcesWithSort:

<?php
	//получаем значение требуемых get-параметров
	$sortby = $_GET[$sortbyGet];
	$sortdir = $_GET[$sortdirGet];
	
	//сверяем их со списком разрешенных полей для сортировки (дополнить по вкусу)
	$allowSortBy = array('pagetitle', 'publishedon', 'createdon');
	if (!in_array($sortby, $allowSortBy)) {
		//если совпадений нет - выставляем значение сортировки по умолчанию
		$sortby = 'pagetitle';
	}
	
	$allowSortDir = array('ASC', 'DESC');
	if (!in_array($sortdir, $allowSortDir)) {
		$sortdir = 'ASC';
	}

	//теперь вызываем pdoResources с отфильтрованными параметрами сортировки
	//дописать требуемые параметры вызова сниппета при необходимости
	$pdoParams = array();
	$pdoParams['sortby'] = $sortby;
	$pdoParams['sortdir'] = $sortdir;
	
	//возвращаем результат выполнения сниппета
	return $modx->runSnippet('pdoResources', $pdoParams);

Вызывается как-то так: [[!pdoResourcesWithSort? &sortbyGet=`sortby` &sortdirGet=`dir`]]
05 октября 2015, 23:33
+1
Как вариант — создайте сниппет getLexicon примерно с таким содержанием:

<?php
	if (!isset($cultureKey)) {
		$cultureKey = 'ru';
	}
	if (!isset($namespace) || !isset($theme) || !isset($get) || !isset($name)) {
		return;
	}

	$modx->setOption('cultureKey', $cultureKey);
	$modx->lexicon->load($namespace.':'.$theme);

	return $modx->lexicon($name.''.$_GET[$get]);

Вызывается как-то так: [[!getLexicon? &name=`category.` &get=`category` &cultureKey=`ru` &namespace=`core` &theme=`about`]]

Должно помочь.
04 октября 2015, 23:00
0
Речь, само собой, шла о вызове параметров желаемого ресурса внутри сниппета методами api.
04 октября 2015, 21:11
+1
К слову, если вариант с [[*meta_title]] все же не подойдет, то в вашем примере нужно будет как минимум подключить тв поле через параметр &includeTVs и уже тогда попробовать вариант с &titleField=`meta_title` или с &titleField=`tv.meta_title`.
04 октября 2015, 21:08
0
Предположение.

longtitle — дефолтное поле любого ресурса, поэтому оно «получается» в коде вкупе с получением запроса о самом ресурсе.

Тв-полей же может быть бесконечное множество и, так как они хранятся в отдельной таблице, по умолчанию они не подцепляются к ресурсу (чтобы не плодить лишних запросов). Не говоря уже о том, что в вашем варианте сниппет не может знать, откуда ему взять это значение — из тв или из встроенных полей ресурса (к примеру, вы можете создать тв-поле pagetitle).
04 октября 2015, 20:55
1
0
&titleField=`[[*meta_title]]`
03 октября 2015, 19:14
+1
У вас отсутствуют список прав доступа из TicketUserPolicy — ticket_save, ticket_delete и прочие.

Добавьте группе редакторов права TicketUserPolicy на уровне Member и должно заработать.
03 октября 2015, 19:11
+2
Tickets и Collections, например.

Первый — специально заточенный под статьи и комментарии модуль (создаете раздел тикетов, после чего дочерние отображаются только «внутри» него, но не в древе).

Второй — также отображает внутренние ресурсы «внутри» себя, позволяя спрятать отображение в древе, но уже без комментариев и прочих сопутствующих обвесков.
03 октября 2015, 17:28
0
Если еще актуально — попробуйте в тестовом режиме добавить строчку
&emailFrom=`[[++emailsender]]`
— в свое время была подобная проблема, решилась обязательным определением адреса отправителя/получателя и заполненным аналогичным полем в системных настройках.
03 октября 2015, 01:20
0
Не за что.)

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

Если данная схема скидок работает для всех товаров, то все довольно просто — в кастомном классе расширяем функцию получения списка товаров корзины, в которой смотрим параметр $item['count'] и в зависимости от него меняем параметр $item['price'].

В противном случае все усложнится получением схемы скидок для каждого товара.
03 октября 2015, 01:11
0
ах, может быть..)

Ну тогда путь такой:
/manager/includes/config.inc.php -> $database_connection_charset
03 октября 2015, 01:03
0
Упс, извиняюсь (уже схожее состояние с головой, хех)
var singlePrice = parseInt($(this).closest('.tab_row').children(".tab_sum").html());
html() замените на text()
03 октября 2015, 00:53
0
mfilter2 — часть платного дополнения. Вы можете обратиться в поддержку modstore с этим вопросом.
03 октября 2015, 00:41
+1
Id из чанка уберите — параметр id должен быть уникален на всей странице, а у вас в каждой колонке товаров (если товара больше 1 шт) он будет.

Вот рабочий код:

<script type="text/javascript">
$('#msCart input[name="count"]').change(function(){
	var count = $(this).val(); 
	var singlePrice = parseInt($(this).closest('.tab_row').children(".tab_sum").html());

	$(this).closest('.tab_row').children(".tab_pr").children("span").html(count * singlePrice);
});
</script>
— вставьте где-нибуь в конце страницы, после вызова jQuery и будет пересчитывать итоговую сумму в каждой колонке товара.
03 октября 2015, 00:23
0
Выставить кодировку вашей базы данных в конфигурационном файле модкса (по умолчанию находится здесь: /core/config/config.inc.php — $database_connection_charset)
03 октября 2015, 00:16
0
Для этого не обязательна галочка (в противном случае вам нужно снимать галочки отдельным скриптом через cron), для вашей задачи можно просто поставить диапазон подходящих дат (от сегодняшнего дня до -10 дней) в параметре &where.
03 октября 2015, 00:14
+1
Плейсходер [[+goods]] содержит в себе результаты сниппета [[!msGetOrder?id=`[[+id]]`]] (он, как правило, находится в самом верху чанка). Его шаблон по умолчанию — tpl.msGetOrder.row.

Вы также можете указать для него свои шаблоны tplRow (строка товара), tplOuter (обертка), tplEmpty (нет результатов) а также указать подключаемые тв-поля и превью товаров через includeTVs и includeThumbs соответственно.
02 октября 2015, 23:54
+1
Медиа -> Источники файлов -> Tickets (редактировать) -> thumbnail
02 октября 2015, 23:47
0
В примере не объявлена переменная price — вот и ругается. Объявите ее по аналогии с
var price = $('#айди_контейнера_или_инпута_где_хранится_значение_стоимости_за_единицу_товара');
и все заработает.)