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

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

С нами с 24 мая 2019; Место в рейтинге пользователей: #4
Отправить деньги
Артур Шевченко
24 декабря 2020, 13:51
0
Есть товары, которые продаются поштучно и цена у них за 1 штуку. А есть товары, которые продаются по весу и цена у них за единицу веса. А принципиальная разница в формировании общей стоимости разве есть? Ведь в обоих случаях нужно количество единиц умножить на цену. Так и какая вам разница, что обозначают цифры в поле с названием «количество» вес или штуки? Поэтому в самом простом варианте указываете цену за единицу веса — это в админке, а на фронте в поле типа number пишите: min=500 step=200. И всё работает как надо. Если граммы не устраивают, тогда переводите в кг и пишите плагин на события Добавление в корзину и Изменения в корзине, который будет переводить обратно в граммы, чтобы не править исходники минишопа, так как с дробным количеством он на работает.
Артур Шевченко
23 декабря 2020, 19:30
+1
А чем вам вес не количество? Я имею в виду, что укажите цену за единицу веса, допустим 1000гр и продавайте в граммах, если есть доставка с учётом веса, то тогда ещё надо плагин написать на msOnCartChange и перезаписывать weight. Если очень надо в кг, тогда либо ещё один плагин пишите который будет из дробного количества в кг делать целое в гр, либо делайте как тут Или callback'и пишите подробнее здесь
Артур Шевченко
21 декабря 2020, 11:52
-1
Понятно. Удачи вам в решении ваших многочисленных проблем)))
Артур Шевченко
20 декабря 2020, 00:39
0
Не знаю. Рекомендую переходить на fenom.
Артур Шевченко
19 декабря 2020, 23:50
0
Ресурс это, как верно подмечают переводчики, источник, а уж источником чего будет тот или иной документ решать вам. Если вам нужно одно поле, делайте одно поле, если нужен небольшой набор данных 2-4 поля, которые не требуют пагинации, фильтрации, сортировки используйте migx, а если всё сложнее используйте документ со всеми его полями. Это конечно только мое мнение.
Артур Шевченко
19 декабря 2020, 22:48
0
Я бы сделал так:
{set $migx = $resource_id | resource: 'migx_tvname' | fromJSON}
<!-- wrapperTpl -->
{foreach $migx as $m}
{$_modx->getChunk('tpl', ['fieldname' => $m['fieldname'], 'test' => $test])}
{/foreach}
<!-- wrapperTpl -->
Артур Шевченко
19 декабря 2020, 22:42
+1
Я вот тут поступил так.
1. Разместил в шаблоне блок в котором должен быть баннер с классом jsInnerBanner, скрытно.
2. Пометил все превьюхи классом к примеру jsBannerMark.
3. Повесил обработчик на событие mse2_load
$(document).on('mse2_load', function(e, data) {
            insertBanner('.jsBannerMark','.jsInnerBanner', 0.6)
        });
Сама функция insertBanner ищет скрытый блок, вытаскивает из него шаблон баннера и вставляет в нужное место, я сделал в процентах, но вы можете сделать как вам нравится.
function insertBanner(mark,banner, percent){
        var count = $(mark).length,
            banner = $(banner).clone(),
            position = Math.round(count * percent);
       banner.find('.promo').addClass('jsBanner');
        if((position % 2) != 0){
            position = position + 1;
        }
        if(count > 1){
            if(mark == '.jsBannerMark'){
                $(mark)[position - 1].after(banner[0]);
            }
            if(mark == '.jsMaterialMark'){
                $(mark)[position - 1].before(banner[0]);
            }
        }else{
            $(mark).after(banner[0]);
        }
    }
Сами баннеры я сделал в виде ресурсов и забираю их через pdoResources. Конечно в чистом виде вам моё решение не подойдет, но думаю общая идея пригодится.
Артур Шевченко
19 декабря 2020, 13:35
-1
Я вам за невнимательность. Во-первых, когда я писал свой комментарий, было только ваше пояснение, без комментария @Иван Бочкарев, во-вторых, в своем комментарии я написал, что после ваших пояснений мне стала ясна суть проблемы и ни на какое из ваших начал я не наезжал, я дал понять, что для меня это не является существенной проблемой и пояснил, что помочь вам, к сожалению, не могу. Если вас оскорбило моё замечание, прошу прошу прощения, я не хотел вас обидеть, а имел намерение разобраться в проблеме и по возможности помочь. И наконец, цели просто высказаться я себе не ставлю.
Артур Шевченко
19 декабря 2020, 10:54
-3
Понятно, в общем ваше эстетическое начало страдает))) К сожалению не знаю как сообщить разработчикам.
Артур Шевченко
18 декабря 2020, 23:46
0
Не редиректит на оплату, потому что в коде этого нет. Вы же не стали расширять класс msOrderHandler, а написали свой сниппет или плагин, который создает объект msOrder, но не использует стандартный класс. Вообще это можно сделать проще. Если быстрый заказ работает для одного товара на просто отправить POST-запрос
$.post(document.location.href, {'ms2_action':'cart/add', 'id': product_id, 'ctx':'web', 'count':1},function(response){
response = JSON.parse(response);
if(response.success){
$.post(document.location.href, {'ms2_action':'order/create', 'id': product_id, 'ctx':'web', 'count':1},function(response){});
}
});
Если нужно предварительно очищать корзину, то обернуть всё в ещё один запрос 'cart/clean', ну и в :'order/create' там больше данных передавать надо, можно всю форму целиком, главное чтобы поля были правильно названы.

И вот ещё вариант modstore.pro/packages/integration/msoneclick )))
Артур Шевченко
18 декабря 2020, 23:30
0
Вызывать pdoArchive два раза: первый раз для вывода управления табами, второй для вывода содержимого.
Артур Шевченко
18 декабря 2020, 23:23
+1
Вынужден вас огорчить, провалидиловать поля с таким именем не получится, нужно запараллелить с помощью js cо скрытыми input, у которых будут имена без квадратных скобок, и проверять именно их.
Артур Шевченко
18 декабря 2020, 00:12
0
Я пользуюсь, и скинул скрипт, которым в последнем проекте проверял файлы, но правда не для тикетов, для них мне обязательно нужен только один файл и я его загружаю в отдельное ТВ и для него я сделал отдельное поле на фронте, куда вставляю один из загруженных пользователем файлов и которое проверяю через validate. Вы можете сделать так же, т.е. если нужно чтобы был загружен как минимум один файл сделайте отдельный input и в файле files.js при успешной загрузке вставляйте значение в дополнительный input, и этот input проверяйте в параметре validate.
Артур Шевченко
17 декабря 2020, 23:13
0
Я посмотрел, похоже надо исходники править, в шаблоне нет inout'а он вставляется динамически, значит надо изобретать велосипед, но более простой вариант проверять на фронте. В этом файле assets/components/tickets/js/web/files.js в районе 107 строки написать примерно так
$('.jsFileInput').change(function () {
            $('.error_photos').text('');
            var input = $(this)[0];
            if (input.files && input.files[0]) {
                if (input.files[0].type.match('image.*')) {
                    var reader = new FileReader();
                    reader.onload = function (e) {
                        $('.jsAvatar').removeClass('no-avatar').css('background-image', 'url("' + e.target.result + '"');
                    }
                    reader.readAsDataURL(input.files[0]);
                } else {
                    $('.error_photos').text('Изображение должно быть одного из следующих форматов: jpg,png,jpeg');
                }
            } else {
                console.log('хьюстон у нас проблема');
            }
        });
Артур Шевченко
17 декабря 2020, 22:11
0
И что? Это input, у него может быть name, а значит его можно записать в validate
'validate' => 'upload:required:customValidator'
Артур Шевченко
17 декабря 2020, 21:14
0
docs.modx.pro/komponentyi/tickets/snippetyi/ticketform последний параметр validate. Там же есть примеры оформления чанка. А сам валидатор можно взять тут.
Артур Шевченко
15 декабря 2020, 18:14
0
Посмотрите есть в плагине переменная id, если есть то смотрите что в ней. Ещё можно посмотреть что в массиве $_POST, какой-то идентификатор ресурса, за который отдают голос, должен быть. И тогда через $modx->getObject получайте этот ресурс и меняйте значение ТВ.<cut/>
Артур Шевченко
15 декабря 2020, 16:08
0
Понятно, в логах что-то есть? Вы проверяли плагин вообще отрабатывает? Что в него приходить? Что он отдает? Если нет, то очищаете журнал ошибок, потом меняете код плагина так
switch ($modx->event->name) {
    case "xLikeOnVote":
        $modx->log(1, 'Смотрим что в class пришло ' . $class);
         $modx->log(1, 'Смотрим что в list пришло ' . $list);
        if ($class == 'modResource' && $list == 'default') {
            if ($resource = $modx->getObject($class, array('id' => $parent))) {
                $modx->log(1, 'Проверяем дошли ли мы до этой строки и что в rating ' . $rating);
                $resource->setTVValue('rating', $rating);
                $resource->save();
            }
        }
        break;
}
И смотрите что будет в журнале ошибок после того как отработает плагин.