man
С нами с 04 января 2016; Место в рейтинге пользователей: #237Дополнительные поля профиля юзера (не extended)
Разрабатываю проект, в котором необходимо было реализовать более простое редактирование дополнительных полей профиля, чем есть из коробки. К слову, неудобное редактирование — это не единственный минус нативного способа расширения профиля полями. Ни для кого не секрет, что фильтрацию по JSON полям нормально не осуществить, только костылями. Фактически, мне надо было получить решение, которое бы расширяло стандартный код MODX, не трогая исходники, дабы сохранить
Пришёл к выводу, что буду расширять стандартную вкладку профиля «Общая информация». При желании можно чуть переписать код в событии OnUserFormPrerender и создать свою вкладку со своими полями.
ЧПУ фильтр mFilter2
Всем доброго времени суток!
Уже не в первый раз на своих проектах сталкивались с пожеланием сеошников, чтобы часть параметров фильтра была доступна ЧПУ-ссылками и чтобы это было достаточно универсально. Под катом пара решений, которые я старался пилить достаточно универсально, но всё же без небольших костылей не обошлось!)
Уже не в первый раз на своих проектах сталкивались с пожеланием сеошников, чтобы часть параметров фильтра была доступна ЧПУ-ссылками и чтобы это было достаточно универсально. Под катом пара решений, которые я старался пилить достаточно универсально, но всё же без небольших костылей не обошлось!)
Перенос фото товаров из TV в галерею miniShop2
Постановка задачи: был интернет магазин, где товары — обычные ресурсы, а изображения — TV поля (в моем примере 5 штук). Необходимо сделать товары типа msProduct, а изображения перенести в стандартную галерею miniShop2.
Небольшой скрипт, решающий вторую часть задачи, ниже. (первая часть задачи решается примерно так)
Что он делает? Скрипт берет все записи с типом msProduct, и копирует изображения из TV в галерею miniShop2.
Надеюсь кому-нибудь будет полезным (скрипт не 100% универсальный, подгоняйте под себя! и да, я запускаю его из Console, если у вас просто php файл, то необходимо сначала авторизоваться в админке через API).
Небольшой скрипт, решающий вторую часть задачи, ниже. (первая часть задачи решается примерно так)
Что он делает? Скрипт берет все записи с типом msProduct, и копирует изображения из TV в галерею miniShop2.
Надеюсь кому-нибудь будет полезным (скрипт не 100% универсальный, подгоняйте под себя! и да, я запускаю его из Console, если у вас просто php файл, то необходимо сначала авторизоваться в админке через API).
Как вывести список групп пользователя?
Пытаюсь вывести список групп, в которые входит пользователь. Сразу уточню, вывести не одну группу, а названия именно всех групп. Примерное решение нашел, но выглядит крайне ерундовым.
MiniShop2: Paypal и разные контексты на сайте
Здравствуйте!
Вводное:
У меня есть сайт-магазин. На сайте два языка, сделано через контексты: site.ru и site.ru/en/ и Babel. На сайте есть система приема платежей Paypal, она подключена и работает на первом контексте, но не работает на втором. У PayPal'а стоят в настройках админки нужные страницы: ms2_payment_paypal_success_id и ms2_payment_paypal_cancel_id.
Проблема:
Если клиент на английской части сайта что-то покупает, его пересылают на гейт пейпала, там всё тоже окей, но вот обратно он приходит на неправильный адрес:
site.ru/en/assets/components/minishop2/payment/paypal.php?action=succses&token=EC-000000&PayerID=0000000000 — что вызывает 404 ошибку и платеж НЕ проходит.
Вводное:
У меня есть сайт-магазин. На сайте два языка, сделано через контексты: site.ru и site.ru/en/ и Babel. На сайте есть система приема платежей Paypal, она подключена и работает на первом контексте, но не работает на втором. У PayPal'а стоят в настройках админки нужные страницы: ms2_payment_paypal_success_id и ms2_payment_paypal_cancel_id.
Проблема:
Если клиент на английской части сайта что-то покупает, его пересылают на гейт пейпала, там всё тоже окей, но вот обратно он приходит на неправильный адрес:
site.ru/en/assets/components/minishop2/payment/paypal.php?action=succses&token=EC-000000&PayerID=0000000000 — что вызывает 404 ошибку и платеж НЕ проходит.
Дублирование результатов запроса после leftJoin
Уважаемое сообщество, здравствуйте!
В ходе работы над сниппетом, возвращающим список всех заказов пользователя, возникла проблема:
в результирующем массиве информация о заказе продублирована столько раз, сколько товаров включено в заказ.
Пожалуйста, подскажите, каким образом можно вернуть результат присоединения таблицы товаров к заказу в рамках одного элемента массива?
Ниже код моегокостыля сниппета (код, относящийся к оформлению результатов выборки вырезан, т.к. к вопросу не относится):
Спасибо!
В ходе работы над сниппетом, возвращающим список всех заказов пользователя, возникла проблема:
в результирующем массиве информация о заказе продублирована столько раз, сколько товаров включено в заказ.
Пожалуйста, подскажите, каким образом можно вернуть результат присоединения таблицы товаров к заказу в рамках одного элемента массива?
Ниже код моего
<?php
//
if(!isset($user) || ($user === 0)){
return '<p>Ошибка! Идентификатор пользователя не определён.</p>';
}
//Задаём значения чанков оформления по-умолчанию
if(!isset($tpl)){ $tpl = 'tpl.profile.orders_list.row'; }
if(!isset($tplWrapper) || ($tplWrapper === '')){ $tplWrapper = 'tpl.profile.orders_list.wrapper'; }
if(!isset($idx)){ $idx = 1; }
$q = $modx->newQuery('msOrder');
$q->select(
array
(
'msOrder.id',
'msOrder.num',
'msOrder.createdon',
'msOrder.cost',
'msOrder.status',
'op.product_id',
'op.name'
)
);
$q->where(array('msOrder.user_id' => $user));
$q->sortby('msOrder.id','DESC');
$q->leftJoin('msOrderProduct','op', 'msOrder.id = op.order_id');
$query = $q->prepare();
$query->execute();
$orders = $query->fetchAll(PDO::FETCH_ASSOC);
$res = print_r($orders,1);
echo '<div class="ord-lst-wrap"><pre>';
echo $res;
echo '</pre></div>';
Ниже приведен результат работы сниппета, первые два пункта демонстрируют проблему (в заказе два товара):Array
(
[0] => Array
(
[id] => 9
[num] => 1511/6
[createdon] => 2015-11-17 09:43:21
[cost] => 17849.00
[status] => 1
[product_id] => 5553
[name] => Primavera (гостиная) Комод 1 /Глазово
)
[1] => Array
(
[id] => 9
[num] => 1511/6
[createdon] => 2015-11-17 09:43:21
[cost] => 17849.00
[status] => 1
[product_id] => 5205
[name] => Berlin 1 (гостиная) Шкаф МНЦ КОРПУС (01, Ясень шимо свентлый) /Глазово
)
[2] => Array
(
[id] => 8
[num] => 1511/5
[createdon] => 2015-11-15 09:00:35
[cost] => 7599.00
[status] => 1
[product_id] => 2034
[name] => (закрыт) Стенка Франк МА-190 Дуб кремона/Дуб феррара /Столлайн
)
[3] => Array
(
[id] => 7
[num] => 1511/4
[createdon] => 2015-11-10 03:09:59
[cost] => 26323.00
[status] => 1
[product_id] => 5788
[name] => Акцент орхидея Шкаф-купе 2300х1800х600/ясень шимо темный/шампань/Бумеранг
)
P.S.: самое простое решение — вовсе избежать leftJoin'а таблицы товаров заказа к запросу, а в оформленном выводе возвращать ссылку с id-заказа, которая вела бы на страничку со сниппетом, принимающим на вход id заказа и возвращающего оформленный список товаров этого заказа. Но, может быть, это возможно сделать в одном сниппете (без обработки результирующего массива на php — объединения элементов с одинаковым id и формированием массива товаров)? Куда копать?Спасибо!
Расширение любых таблиц MODX
В очередной раз понадобилось изменить таблицу сайта, менять которую не предусмотрено.
Что обычно люди делают в таких случаях? Верно, редактируют ядро или нужный компонент, и больше их не обновляют. Но ведь это неправильно, и можно решить вопрос иначе.
Пишем обычный плагин, выставляем для него событие OnMODXInit и меняем модель для нужных классов системы или дополнений. Например, я добавил id менеджера в заказ miniShop2:
Что обычно люди делают в таких случаях? Верно, редактируют ядро или нужный компонент, и больше их не обновляют. Но ведь это неправильно, и можно решить вопрос иначе.
Пишем обычный плагин, выставляем для него событие OnMODXInit и меняем модель для нужных классов системы или дополнений. Например, я добавил id менеджера в заказ miniShop2:
Помогите разобраться с leftJoin и where
День добрый. Пытаюсь сделать выборку товаров, имеющих в опции ps_type определенные значения.
Есть список товаров:
Делаю это через leftJoin и where:
Я не слишком хорошо знаком с механизмами SQL, но глядя на это условие, у меня возникает ощущение, что я пытаюсь найти строки в которых значение ps_type одновременно равно и «Подвесной», и «Административный», что, закономерно, ни к чему не приводит. Насколько я понимаю, мне нужно разносить значения, между которыми должно быть условие AND в разные опции? Или я неправильно понимаю?
Есть список товаров:
Товар 1; Административный, ПодвеснойНужно выбрать 1 и 2.
Товар 2; Административный, Промышленный, Подвесной
Товар 3; Промышленный, Подвесной
Делаю это через leftJoin и where:
[[!msProducts?
&parents=`2`
&leftJoin=`{
"ps_type": {
"class": "msProductOption",
"on": "ps_type.key = 'ps_type' AND ps_type.product_id = msProduct.id"
}
}`
&where=`{"ps_type.value:LIKE": "Подвесной", "AND:ps_type.value:LIKE": "Административный"}`
]]
Результатов у данной выборки нет.Я не слишком хорошо знаком с механизмами SQL, но глядя на это условие, у меня возникает ощущение, что я пытаюсь найти строки в которых значение ps_type одновременно равно и «Подвесной», и «Административный», что, закономерно, ни к чему не приводит. Насколько я понимаю, мне нужно разносить значения, между которыми должно быть условие AND в разные опции? Или я неправильно понимаю?
Уведомление о заказе разным менеджерам
Привет! Необходимо что бы если в корзину добавляются товары из одной группы письмо приходило одному менеджеру, если из другой другому, если из обоих то обоим. Как с наименьшим геморроем это сделать?
Tickets у вас недостаточно прав
Использую
[[!pdoPage?
&element=`TicketComments`
&allowGuest=`0`
&depth=`1`
&gravatarIcon=`mm`
&gravatarSize=`140`
&tplCommentAuth=`Tickets.comment.one.auth`
&tplCommentGuest=`tpl.Tickets.comment.one.guest`
&tplComments=`tpl.Tickets.comment.wrapper`
&tplCommentForm=`tpl.Tickets.comment.form`
&tplLoginToComment=`tpl.Tickets.comment.login`
&limit=`5`
]]
<hr />
[[!+page.nav]]