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

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

С нами с 24 мая 2019; Место в рейтинге пользователей: #3
Отправить деньги
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;
}
И смотрите что будет в журнале ошибок после того как отработает плагин.
15 декабря 2020, 13:38
0
В плагине переменные class, list, rating откуда появились?
15 декабря 2020, 13:33
0
В minishop2 можно создавать свои опции, TV к ним никакого отношения не имеют.
15 декабря 2020, 00:47
0
Заявлялось, о это не точно, что до 10 000 товаров работает нормально, и для нормального отображения важно не только ограничить количество товаров к категории, но и не выводить их все разом на странице, т.е. использовать либо ajax либо пагинацию. Это было про фильтры. Что до mSync, то проблемы могут быть только при первой синхронизации, т.к. хостинг ограничивает время работы скриптов и как правило это 60 сек, а за это время 40 000 товаров не загрузить, поэтому возможно придется делать несколько выгрузок.
14 декабря 2020, 02:14
0
Это хорошо для юзабилити, я бы не дал, но рядовой пользователь не поймёт, что файлы загружаются, если не показать процесс)))