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

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

С нами с 01 июля 2013; Место в рейтинге пользователей: #33
12 октября 2015, 12:48
0
[[!getPage?
                           &elementClass=`modSnippet`
                           &element=`getResources`
                           &tpl=`salonlist`
                           &includeTVs=`1`
                           &processTVs=`1`
                           &hideContainers=`1`
                           &depth=`1`
                           &limit=`10`
                           &parents=`16`
$sortby= $_GET['sortbyTV'] 
$sortdir= $_GET['sortdirTV']
                           &sortbyTVType=`integer`
                           &pageVarKey=`page`
                           &tvFilters=`metro==%[[!Metro?]]%`
                           &pageFirstTpl=`<li class="control"><a [[+classes]] href="[[+href]]">Первая</a></li>`
                           &pageLastTpl=`<li class="control"><a [[+classes]] href="[[+href]]">Последняя</a></li>`
                         ]]

— в этом вызове замените строчки
$sortby= $_GET['sortbyTV'] 
$sortdir= $_GET['sortdirTV']

на:
&sortby=`{"pagetitle":"ASC"}`

Важно: сейчас у вас реализован функционал, при котором перехватываются значения сортировки из адресной строки. При вышеописанных изменениях он пропадет. Если его необходимо сохранить — нужно будет дописать небольшой сниппет для переключения между желаемой сортировкой и вбитой в адресной строке.
12 октября 2015, 12:17
0
Если вам нужно сортировать отображение раздела по умолчанию, то в выводящем сниппете допишите параметры:
&sortby=`pagetitle` &sortdir=`ASC`
— пример актуален для сниппетов семейства pdoTools.
(параметры могут отличаться, если выводящий сниппет другой — укажите, чем вы вызываете раздел.)

Если вам нужно сортировать его по клику, то необходимо или дописать перехват сниппетом get-значений для сортировки или воспользоваться готовым решением, как mFilter2.
11 октября 2015, 23:39
0
$dis = $modx->resource->getTVValue('discount');
Проблема как минимум в этой строчке, т.к. вам нужно получить не тв-поле текущего ресурса, а тв-поле товара.

У вас есть как минимум 2 способа реализовать данную задачу — через систему плагинов или через расширение класса корзины.

В обоих случаях принцип работы примерно такой:
— при требуемых событиях (добавление товара, изменение количества, удаление товара и тд) для каждого конкретного товара или циклом во всей корзине получаем параметры товаров
— из полученных данных выбираем id и запрашиваем для каждого товара кастомное тв-поле со списком скидок
— если тв-поле присутствует, то в отсортированным по необходимому для скидки количеству массиве, через цикл сверяем значение с количеством товара в корзине. Так получаем соответствующую скидку по количеству для каждого товара.
— умножаем скидку на исходную цену товара
— возвращаем значение
09 октября 2015, 07:56
0
modx.pro/components/4518-tickets-1-5-0-beta-with-the-generation-of-multiple-preview/

[[+thumbs.название_превью_введеное_в_источнике_файлов]]
07 октября 2015, 16:51
+1
Странно, только что проверил приложенный мной вызов на своем сайте — ресурсы возвращаются корректно:
[[!pdoPage?
	&parents=`0`
	&tpl=`@INLINE [[+pagetitle]]`
	&limit=`10`
	&ajaxMode=`1`
	&where=`{"createdby": [[!+modx.user.id]]}`
]]
Всего: [[+total]]
Вы ведь убрали все лишние строчки &element=`GetUserAction` и тому подобные?
07 октября 2015, 16:45
+1
А вы вообще авторизованы в системе? — плейсхолдер [[!+modx.user.id]] возвращает что-нибудь? И есть ли у авторизованного пользователя созданные ресурсы?

К слову, если вам нужно вернуть список ресурсов конкретного пользователя (не авторизованного), то вам нужно обращаться на страницу с гет-параметром (пример: site.ru/articles?author=1), перехватывать этот параметр и по аналогии заносить в where.
07 октября 2015, 16:37
+1
Если честно, не совсем понимаю, зачем так заморачиваться, если у сниппетов pdoTools есть параметр where?
[[!pdoPage?
	&parents=`0`
	&tpl=`user_tickets`
	&limit=`10`
	&ajaxMode=`1`
	&where=`{"createdby": [[!+modx.user.id]]}`
]]
Всего: [[+total]]

А вообще, если сниппет ничего не возвращает, то всегда можно воспользоваться параметром &showLog=`1` чтобы наглядно увидеть, на каком этапе появляется ошибка.
07 октября 2015, 14:12
0
Мм… у вас, случайно, не прописан параметр stripTags для Info?

Приложите, пожалуйста, код вызова AjaxForm.
07 октября 2015, 13:46
+1
Замените эту строчку на:

<textarea id="info" name="info" style="display: none;">
[[!getInfo]]
</textarea>

— в инпутах отсутствует возможность переноса строки.
07 октября 2015, 13:26
+1
Куда возвращает сниппет свой результат? В textarea?
07 октября 2015, 13:15
+1
Если вы отправляете письмо своей функцией, укажите Content-type: text/plain.

По поводу переносов строк (php.net): «В отличие от синтаксиса двойных кавычек и heredoc, переменные и управляющие последовательности для специальных символов, заключенных в одинарные кавычки, не обрабатываются.»
07 октября 2015, 13:10
+1
return str_replace('\r\n',"\r\n",$result);
07 октября 2015, 12:33
+1
Написать плагин для собственной маршрутизации на событие OnPageNotFound.
07 октября 2015, 02:37
1
+1
Если честно, не уверен..)

Вы можете написать простенький сниппет проверки, который заодно и решит проблему с постоянной обработкой AjaxForm вне зависимости от значения price:

[[! название_сниппета? &check=`[[*price]]` &acceptValue=`0` &tpl=`название_чанка_который_нужно_отобразить`]]

Код:
<?php
	if ($check == $acceptValue) {
		return $modx->getChunk($tpl);
	}
	else {
		return;
	}
07 октября 2015, 02:28
0
Хм, возможно, дело в результате вывода [[!AjaxForm]].

Вы можете для проверки поместить все содержимое then в отдельный чанк и вызвать модификатор в виде :then=`[[$название_чанка]]`?
07 октября 2015, 02:22
0
Что вы подразумеваете под содержимым модификатора?

Сейчас у вас выполняется следующая логика:
— обрабатывается содержимое внутри then=``
— проверяется значение [[*price]] (если у вас minishop2, то такое значение в принципе не находит, т.к. там требуется иной плейсхолдер)
— значение [[*price]] не равно 0 (так как его в принципе нет).
— вам ничего не возвращает, так как нет условия :else=``

Вот пример того, когда вам всегда вернется какой-либо результат:

[[!+price:is=`0`:then=`Код формы`:else=`Цена на товар [[!+price]] рублей`]]
07 октября 2015, 02:17
0
Minishop2 до версии 2.2 полностью разрабатывался Василием Наумкиным, после (версия 2.2 и 2.3) — студией SimpleDream.

В версиях 2.2 и 2.3 введен новый функционал характеристик товара (раньше реализовывалось ручным расширением таблиц) и торговые предложения.

По личному опыту, пожалуй, сейчас надежнее ставить версию 2.1.12-pl (находится в репозитории modx), так как она стабильна и поддерживает все выпущенные к ней дополнения.
07 октября 2015, 02:11
0
Если вы используете minishop2 для формирования карточки товара, то вам необходим плейсхолдер не [[*price]], а [[!+price]]. В остальном все верно.

Единственный минус подобного решения — из-за специфики работы преобразования плейсхолдеров модкса, в вашем примере вначале выполняется содержимое внутри then (в любом случае, вне зависимости от значения price), а уже после — проверка условия. Что негативно сказывается на производительности, в случае, если количество товаров больше 0 и форма не нужна в принципе.
06 октября 2015, 22:46
0
Что-нибудь в духе Uploadify для загрузки с фронта + javascript, срабатывающий на завершение загрузки, считающий количество фотографий и перехватывающий выбранный формат.

Дальше, исходя из полученных данных — простой калькулятор на js.

Чуть сложнее будет только если для каждой фотографии можно будет выбирать отдельный формат, но это опять же вполне реализуется в рамках яваскрипта.
06 октября 2015, 21:41
0
К слову, у каждого товара есть параметр контекста, откуда он был добавлен => первым шагом будет разделение 2 раздела каталога по двум контекстам — так товары по умолчанию будут попадать в отдельные контексты (вызывать и отображать их не будет большой проблемой, т.к. у большинства сниппетов есть параметр, указывающий из каких контекстов брать данные). Ну и чуть-чуть придется подправить javascript корзины для динамичного обновления данных.