Алексей

Алексей

С нами с 24 декабря 2019; Место в рейтинге пользователей: #3015

[СДЕЛАЙ САМ] Получение ЛЮБЫХ полей пользователя

Если использовать как модификатор для fenom то запись будет такой:
{идентификатор пользователя | getUserInfo: 'fieldname1,fieldname2,extended.fieldname'}

Если как сниппет, то такой:
{'getUserInfo' | snippet:[
'input' => 'идентификатор пользователя',
'options' => 'fieldname1,fieldname2,extended.fieldname'
]}

идентификатор пользователя — id;
fieldname1,fieldname2 — основные поля профиля без префикса;
extended.fieldname — дополнительные поля профиля, те что хранятся в json и редактируются на отдельной вкладке, префикс extended. обязателен.

Собственно сам код сниппета getUserInfo (input передавать обязательно, если не передан $options вернётся массив всех полей пользователя и его профиля):
<?php
if(!$input){return false;}
$table_prefix = $modx->getOption('table_prefix');
$sql = 'SELECT * FROM `'.$table_prefix.'users` User LEFT JOIN  `'.$table_prefix.'user_attributes` Profile ON User.id = Profile.internalKey WHERE User.id=:id';
$statement = $modx->prepare($sql);
if ( $statement->execute(array('id'=>$input)) ) {
    $result = $statement->fetchAll(PDO::FETCH_ASSOC);
}
$output = [];
if($result) {
    $extended = json_decode($result[0]['extended'], 1);
    if($options){
        $options = explode(',',$options);
        foreach($options as $option){
            $option = trim($option); // это на тот случай если полей много и захочется сделать перенос строки
            if (strpos($option,'extended.') === false) {
                $output[$option] = $result[0][$option];
            } else {
                $ext = explode(".", $option);
                $ext = $ext[1];

                if(strpos($ext,'|') === false){
                    $output[$ext] = $extended[$ext];
                }else{
                    $cont = explode("|", $ext);
                    $key = $cont[0];
                    $val = $cont[1];
                    $output[$key][$val] = $extended[$key][$val];

                }
            }
        }
    }else{
        $output = $result[0];
        $output['extended'] = $extended;
    }
}
if(count($output) == 1 && !$extended){
    return $output[$options[0]];
}elseif(count($output) == 1 && $extended){
    return $output[$ext];
}else{
    return $output;
}
Артур Шевченко
27 ноября 2020, 01:33
modx.pro
2
762
+1

Localizator. Атрибут hreflang для мультиязычных сайтов



У нас есть мультиязычный сайт, построенный на Fenom и Localizator. Нам нужно прописать атрибут «hreflang» для правильного распознавания локализованной версии страницы поисковиками типа Google и Яндекс.

Используем вариант указания языковых версии в head. Этот вариант подходит для сайтов, у которых языков меньше 10 штук. Если больше, то оптимально будет указать локальные версии в sitemap.xml.

Совместно с @Евгений Webinmd накидали сниппет hreflangs, а потом его еще улучшил @Alex =).

Иван Бочкарев
22 сентября 2020, 22:28
modx.pro
4
1 513
+17

Шпаргалка на все случаи жизни

Полезные ссылки, которые Вам пригодятся в некоторых ситуациях.
Михаил
07 февраля 2020, 21:42
modx.pro
71
2 309
+35

Поле стоимость доставки значение "Бесплатно" и "Индвидуальный рассчет"

Появилась еще одна задача с которой я хочу с Вами поделиться.

Две задачи:

1. Не нравиться значение доставки 0 руб хочется заменить на Бесплатно
2. Через настойки MS2 адмистратору сайта устанавливать значение стоимости доставки «Индивидуальный рассчет.

Для того что бы это реализовать нам нужно выполнить все действия расписанные в статье Стоимость доставки отдельной строкой в оформление заказа MS2

Олег Щавелев
08 декабря 2019, 23:51
modx.pro
5
1 205
+10

Удобная фильтрация в mSearch2 на мобильной версии (внешний вид)

Доброго всем!
дам очень нужную инструкцию для изменения внешнего вида фильтров на мобильной версии (в десктопной ничего не измениться) в mSearch2 совместно с minishop2

На выходе нас ожидает меню куда спрячутся все фильтра, а сбоку, поверх всего будет закреплена кнопка управляющая этим меню (открыть, закрыть). Работает как в bootstrap 3 так и в bootstrap 4. Внешний вид фильтров настраиваете на свой вкус и цвет.

Впринцыпе данный пример можно использовать где угодно, возможно спрячете меню блога, ну там уже на свое усмотрение. Работает через jquery
Сергей
19 апреля 2019, 18:55
modx.pro
28
2 495
+5

[mFilter2] Вывод товаров со смежными значениями

Небольшая заготовка из вчерашнего рукоделия.

Имеем сайт с подбором товаров по характеристикам, реализованным на mFilter2.
Один из параметров «Мощность активная» выглядит так (увеличение по клику):


Как видно, есть большое разнообразие товаров с близкими значениями мощностей, но общее количество товаров не столь велико.
Это приводит к тому, что когда посетитель выбирает, к примеру, мощность 10 кВт, то он видит 1 товар в результатах подбора. А специфика продукции такова, что логично предложить пользователю аналогичные изделия как с чуть меньшей мощностью, например 9 кВт, так и с большей, до 12-15 кВт.

Нет, конечно можно сказать, что пусть нащелкает нужные цифры в подборе, но всегда есть «но». На страницу «Товары с мощностью 10 кВт» (где уже стоит галочка в фильтре) пользователь приходит из поисковых систем, фильтра он не видел и не нажимал. Если на странице будет 1 товар, пользователь может быстро уйти, решив, что мы предлагаем крайне скудный ассортимент, так и не увидев, что есть фильтр.

В общем, небольшая зарисовка на тему того, как при выборе в фильтре параметра со значением 10, показать все товары в диапазоне -x%....+y%.

Наумов Алексей
26 февраля 2019, 10:29
modx.pro
15
1 464
+10

Оплата заказа miniShop2 без перехода на страницу платёжки

Порой клиенту приходит в голову навязчивая идея ни в коем случае никуда не перенаправлять со своего сайта. И даже чтобы оплатить заказ — ни на какую платёжку не уходить, оставаться на сайте. При этом, денег, чтобы заплатить за разработку интерфейса приёма карт прямо на сайте, у него нет:) Именно по этому поводу и был изобретён этот костыль.
mngatoff
20 февраля 2019, 14:56
modx.pro
23
2 075
+16

Хватить это терпеть! Или зачем столько чанков в FormIt!?

Привет сообществу!

Небольшая хитрость которая поможет новичкам избавиться от множества чанков/файлов писем с сайта и реализовать их в одном чанке/файле. Кроме этого пару слов о том, что происходит с MODX в конце заметки.

Предисловие:

Пару месяцев назад в чате был небольшой джентльменский спор между Павлом Зарубином и Евгением на тему «Так ли хорош FormIt?». В этом споре, я разместился где-то посередине так как я вижу и плюсы и минусы данного компонента. Эта заметка об одном из минусов, ну и конечно же решение.

Баха Волков
11 февраля 2019, 14:56
modx.pro
31
4 784
+24

Программно изменяем значение у пользователей, с условиями

Решил поделиться одним готовым решением. Лично мне, нужно нескольким тысячам юзеров в разных группах, раздать разные значения потраченных денег на покупки (эдакий перенос со старого сайта). Но если кто не понял, то давайте просто представим, что нам нужно изменить некоторые данные у пользователей, которые находятся в определенной группе. Казалось бы все просто. Нам нужно указать id определенной группы, вытащить из неё всех пользователей и изменить им нужные нам данные. Для многих программистов давно работающих с MODX, это дело 5-ти минут. У меня же это заняло около двух часов. В итоге решил, разу уж написал решение, нужно как обычно поделиться, мало ли кому-нибудь, когда-нибудь это понадобится. Ну или вон, Николай спарсит на модкс-клаб (шутка). =)
iWatchYouFromAfar
10 декабря 2018, 22:01
modx.pro
8
1 572
+8

[miniShop2] Как тестировать письма без оформления заказа


Иногда приходится тестировать внешний вид писем, отсылаемых при оформлении заказа. Чтобы не оформлять постоянно заказ для просмотра внешнего вида, написал сниппет. Подробности под катом.
Павел Гвоздь
25 ноября 2018, 15:48
modx.pro
36
3 547
+13