man

man

С нами с 04 января 2016; Место в рейтинге пользователей: #235

Дополнительные поля профиля юзера (не extended)


Разрабатываю проект, в котором необходимо было реализовать более простое редактирование дополнительных полей профиля, чем есть из коробки. К слову, неудобное редактирование — это не единственный минус нативного способа расширения профиля полями. Ни для кого не секрет, что фильтрацию по JSON полям нормально не осуществить, только костылями. Фактически, мне надо было получить решение, которое бы расширяло стандартный код MODX, не трогая исходники, дабы сохранить карму в порядке возможность обновления системы.
Пришёл к выводу, что буду расширять стандартную вкладку профиля «Общая информация». При желании можно чуть переписать код в событии OnUserFormPrerender и создать свою вкладку со своими полями.
Павел Гвоздь
30 мая 2016, 22:36
modx.pro
114
18 744
+19

ЧПУ фильтр mFilter2

Всем доброго времени суток!
Уже не в первый раз на своих проектах сталкивались с пожеланием сеошников, чтобы часть параметров фильтра была доступна ЧПУ-ссылками и чтобы это было достаточно универсально. Под катом пара решений, которые я старался пилить достаточно универсально, но всё же без небольших костылей не обошлось!)
Дмитрий Зарубин
21 февраля 2016, 23:06
modx.pro
42
8 334
+12

Перенос фото товаров из TV в галерею miniShop2

Постановка задачи: был интернет магазин, где товары — обычные ресурсы, а изображения — TV поля (в моем примере 5 штук). Необходимо сделать товары типа msProduct, а изображения перенести в стандартную галерею miniShop2.

Небольшой скрипт, решающий вторую часть задачи, ниже. (первая часть задачи решается примерно так)

Что он делает? Скрипт берет все записи с типом msProduct, и копирует изображения из TV в галерею miniShop2.

Надеюсь кому-нибудь будет полезным (скрипт не 100% универсальный, подгоняйте под себя! и да, я запускаю его из Console, если у вас просто php файл, то необходимо сначала авторизоваться в админке через API).
Наумов Алексей
03 февраля 2016, 12:05
modx.pro
11
3 872
+5

Как вывести список групп пользователя?

Пытаюсь вывести список групп, в которые входит пользователь. Сразу уточню, вывести не одну группу, а названия именно всех групп. Примерное решение нашел, но выглядит крайне ерундовым.
Алексей Федоров
25 декабря 2015, 20:23
modx.pro
6
3 592
0

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 ошибку и платеж НЕ проходит.

Scorp Satex
03 декабря 2015, 14:42
modx.pro
1
2 007
0

Дублирование результатов запроса после 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 и формированием массива товаров)? Куда копать?
Спасибо!
Денис Райх
18 ноября 2015, 01:15
modx.pro
2
1 865
0

Расширение любых таблиц MODX

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

Что обычно люди делают в таких случаях? Верно, редактируют ядро или нужный компонент, и больше их не обновляют. Но ведь это неправильно, и можно решить вопрос иначе.

Пишем обычный плагин, выставляем для него событие OnMODXInit и меняем модель для нужных классов системы или дополнений. Например, я добавил id менеджера в заказ miniShop2:
Василий Наумкин
16 ноября 2015, 07:07
modx.pro
116
10 198
+11

Помогите разобраться с leftJoin и where

День добрый. Пытаюсь сделать выборку товаров, имеющих в опции ps_type определенные значения.
Есть список товаров:
Товар 1; Административный, Подвесной
Товар 2; Административный, Промышленный, Подвесной
Товар 3; Промышленный, Подвесной
Нужно выбрать 1 и 2.
Делаю это через 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 в разные опции? Или я неправильно понимаю?
Александр
12 ноября 2015, 13:43
modx.pro
2
5 018
+1

Уведомление о заказе разным менеджерам

Привет! Необходимо что бы если в корзину добавляются товары из одной группы письмо приходило одному менеджеру, если из другой другому, если из обоих то обоим. Как с наименьшим геморроем это сделать?
Артем
10 ноября 2015, 05:03
modx.pro
4
1 392
0

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]]
Konstantin
23 октября 2015, 14:12
modx.pro
2
3 512
0