Артур Шевченко

Артур Шевченко

С нами с 24 мая 2019; Место в рейтинге пользователей: #7
Отправить деньги
Артур Шевченко
27 ноября 2020, 22:05
0
Без написания плагина на событие msOnBeforeAddToCart никак. Плагин примерно такой:
<?php
switch ($modx->event->name) {
    case 'msOnBeforeAddToCart':
        $product->get('id');
        $resource = $modx->getObject('modResource',  $product->get('id'));      
        $product->set('price', $resource->getTVValue('price_drop'));       
    break;
}
Для простоты лучше на фронте добавить
<input type="text" name="price_drop">
под price_drop тогда можно будет сделать так
<?php
switch ($modx->event->name) {
    case 'msOnBeforeAddToCart':       
        $product->set('price', $_POST['price_drop']);       
    break;
}
Артур Шевченко
05 ноября 2020, 22:14
0
Спасибо, Василий, тебе смело можно почивать на лаврах и зарабатывать на обучении, умеешь ты объяснить что куда и как. А что с minishop2? Кто-то будет поддерживать?
Артур Шевченко
01 ноября 2020, 17:00
0
Я не делал, но в таких случаях я лезу БД и смотрю в какой таблице и в каком поле хранится нужная инфа, а потом через pdoResources вывожу используя where.
Артур Шевченко
01 ноября 2020, 16:53
0
Я придумал простое решение проблемы. В магазине есть плашки предупреждающие о системных требованиях, пусть добавят плашку типа «Вызов некоторых снипеттов через этот компонент может быть использован злоумышленниками для взлома сайта».
Артур Шевченко
01 ноября 2020, 11:42
+1
Почитал здешний холивар и должен всех поблагодарить. Автора за компонент, критиков за критику. Объясняю. Я уже давно использую вот эту заметку в тех случаях, когда нужен вызов сниппетов ajax после определенных действий пользователей, но только после прочтения комментариев критиков я задумался о том, что таким образом действительно можно ломануть сайт, хотя сам я всегда отправлял только те параметры которые мне нужны, а не все возможные, но среди них мог быть where. Поэтому считаю, надо этот момент исправить, вариант с созданием в админке набора параметров очень неплох, пусть это сложнее, чем передать параметры через js, но безопаснее ведь. Что для аргументов автора, то они немного противоречивы, с одной стороны он говорит что компонент для неопытных пользователей, а с другой что каждый программист сам должен блюсти безопасность сайт. Вот я неопытный, в сравнении конечно, и как писал выше, до текущего момента не думал что можно взломать сайт через ajax и pdoResources, и обсуждение новых компонентов читаю очень редко, поэтому мог просто установить и пользоваться не подозревая о подвохе. А критикам долен сказать, будь мягче, что вы нападаете на парня, он старался, а вы «дыра» «в топку», спокойно бы объяснили в чём проблема и как исправить и всё. Мы же тут как бы одно дело делаем, нельзя так.
Артур Шевченко
31 октября 2020, 13:02
0
А можно немножко кода в студию?
Артур Шевченко
31 октября 2020, 12:55
0
Я вот тут делал avto-estet.ru/ без танцев с бубном, просто отметил в админке нужные варианты и всё работает. Главное не забыть инициализировать скрипты для фронта.
Артур Шевченко
31 октября 2020, 12:48
0
Мне очень нужно добавить новые поля в свойства товаров
Надо думать раз вы пытаетесь установить дополнение msAddField у вас установлен minishop2? И вы конечно же прочитали документацию или хотя бы пытались искать информацию по запросу «добавить новые поля в свойства товаров minishop2»? Вы конечно же читали и смотрели вот это modx.pro/components/20947? И наконец вы уверены что функционал опций товара, которой встроен по умолчанию, вам не подходит?
Артур Шевченко
31 октября 2020, 12:30
0
И вот ещё статья с подробностями itchief.ru/lessons/modx-revo/modx-setting-permissions Вторая ссылка в Яндексе по запросу modx настройка прав доступа
Артур Шевченко
31 октября 2020, 12:26
0
Осуществил создание тикетов (постов) с фронтенда.
где-то внутри кода, который отвечает за это осуществление, нужно устанавливать значение publised = 0 и всё. Если был бы код, я бы сказал точнее.
Артур Шевченко
19 августа 2020, 18:30
+1
Конечно в документации такого нет, потому что и смысла выводить через mfilter параметры по которым нечего фильтровать. Если нужно вывести параметры товаров, то можно использовать msOptions
Артур Шевченко
19 августа 2020, 17:49
0
Это ж платный компонент, напиши разработчику в техподдержку, он ответит точно и быстро.
Артур Шевченко
19 августа 2020, 17:44
0
Как вариант, сделать отдельное TV для каждого тура и туда записывать ближайшую дату и потом по этому полю сортировать, правда ту всё упирается в то, есть возможность заполнять это поле при заполнении поля MIGX.
Артур Шевченко
19 августа 2020, 17:37
0
Всё просто, в админке слева есть вкладка Элементы, там есть пункт Дополнительные поля, а рядом с ним плюсик. Еще можно в яндексе набрать «modx дополнительное поле для resource» и по ервой ссылке перейти и почитать.
Артур Шевченко
16 мая 2020, 18:12
0
Боюсь, что мешать теги нигде нельзя, если конечно вы хотите сделать хороший сайт.
Артур Шевченко
16 мая 2020, 00:41
0
На сайте itchef есть хороший мануал по загрузке файлов через formit, потом почитайте как создавать ресурсы через resource/create. Потом напишите хук который будет стоять после хука отвечающего за загрузку файлов, и в нем создавайте ресурс и вставляйте адрес картинки на сервере в нужное ТВ. Все инструкции в интернете есть, так что дерзайте.
Артур Шевченко
16 мая 2020, 00:30
0
А js вам совсем чужд? Сделайте форму отдельно от таблицы и по клику передавайте в неё нужные данные и отправляйте. Или просто отправляйте нужные данные по клику без формы, обязательно нужно передавать ключ ms2_action=cart/add, id и count, по необходимости можно массив опций передать.
Артур Шевченко
16 мая 2020, 00:17
0
Самый простой вариант это отваливать событие оплаты и если она не прошла, удалять заказ. Но стоит иметь в виду, что оплата могла не пройти по техническим причинам или клиент решил оплатить позже, а заказа уже нет. Другой вариант на событие msOnBeforeOrderCreate, в общем то которое возникает перед сохранением заказ, точное название есть в документации по minishop2, повесить вызов функции оплаты, но это сложнее. И если вы ждёте готовое решение, то вряд ли вам его в комментариях напишут.
Артур Шевченко
15 мая 2020, 16:15
0
Вдруг я не единственный, кому понадобилось получать данные любого пользователя на фронте, используя fenom, поэтому предлагаю вашему вниманию более универсальную версию сниппета user_info
$output = [];
$options = explode(',',$options);
$profile = $modx->getObject('modUserProfile', ['internalKey' => $input]);
if($profile) {
    foreach($options as $option){
        if (strpos($option,'extended.') === false) {
        $output[$option] = $profile->$option;
        } else {
            $extended = $profile->get('extended');
            $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];
                
            }
        }    
    }
}
if(count($output) == 1){
    return $output[$options[0]];
}else{
    return $output;
    //return json_encode($output); //раскомментируй чтобы возвращать json, а предыдущую закомментируй
}
Примеры вызова
<!-- получаем email -->
{44 | getUserInfo : 'email'} 
<!-- получаем несколько полей -->
{44 | getUserInfo : 'phone,extended.sizes|weight,extended.age' | print_r}
Во втором случае вернется
Array ( [phone] => +7(989)456-85-12 [sizes] => Array ( [weight] => 67 ) [age] => 35 )
sizes — это контейнер в дополнительных полях профиля пользователя, в котором лежит атрибут weight.