Всего 124 029 комментариев

Андрей Шевяков
05 декабря 2024, 19:45
+1
Вот так вроде работает, попробуйте

'where' => '{"Data.image:!=":""}',

Пример с сайта на Fenom:
{'!msProducts' | snippet : [
                    'parents' => $_modx->resource.parent,
                    'resources' => -$_modx->resource.id,
                    'sortby' => 'publishedon',
                    'includeThumbs' => 'medium',
                    'where' => '{"Data.image:!=":""}',
                    'tpl' => 'tpl.msProducts.row.custom',
                ] ?: 'Похожих товаров нет.'}
Александр Мельник
05 декабря 2024, 11:56
0
Без тени осуждения, просто видя ваше восхищение и понимая, как сильно оно отличается от моих чувств. я не могу не спросить.
А вы после этого все еще чувствуете себя программистом? Разве это не противно, что вместо написания кода мы думаем как правильно составить запрос. Разве не возникает чувство собственной неполноценности? Разве не ужасно, что вы как человек теряете контроль над кодом? Ведь по сути вы просто «верите» что ИИ сделал все правильно. Да в коде из 10 строк это можно проверить, но что если код состоит из 50 000 000 строк?

Просто интересно, что у вас это вызывает такой восторг, в то время как у меня почти панический ужас. Но все мы разные.
Наумов Алексей
05 декабря 2024, 10:51
0
А толку то, в репозитории только 1 пакет с одним именем может лежать. Нет же выбора загрузки версии. Точнее вроде как есть, но никто не будет следить за этим. Да и версии компонентов от разных авторов могут развиваться в разном направлении.

Проблема в том, что авторы бросают свои дополнения и перестают развивать. И даже присланные PR не внедряют. Вот Sheduler на gitjhub висит с последним обновлением 2 года назад, и что с ним делать, если автору пофигу?..
Дмитрий
05 декабря 2024, 10:12
+1
Денис, напиши пожалуйста, что не использовать на файлы js, а то будет как у меня, 4 часа времени восстанавливать построчно, а так работает без нареканий, спасибо
Максим
05 декабря 2024, 09:01
0
Не только цена может измениться, но и товара уже может не быть в наличии.
Ruslan
04 декабря 2024, 23:10
0
по моему путь не верный у вас в «snippet.sendcode.php», должен быть такой наверное?
require_once MODX_CORE_PATH . 'components/sendit/services/identification.class.php';
Ruslan
04 декабря 2024, 22:55
0
Еще нашел такой параметр «pdotools_elements_path» со значением "{core_path}elements/"
Почему-то он ругался на этот путь.
Создал всё там «elements/snippets/smsauth/snippet.sendcode.php»
И проде как другие ошибки уже показывает.

Или я вообще не туда смотрю? )))

а еще заметил что нету файла по этому пути
require_once MODX_CORE_PATH . 'components/sendit/model/sendit/identification.class.php';
Это норма? Мне самому его создавать?
Ruslan
04 декабря 2024, 22:47
0
Если вы про пресет «sendcode» со снипетом
'snippet' => '@FILE snippets/smsauth/snippet.sendcode.php',
то он существует.

не понимаю где я не правильный путь указал.
Можете подсказать?
Ruslan
04 декабря 2024, 22:29
0
Добрый вечер.
Попробывал сделать по вашей рекомендации, но у меня в логах ошибок выдаёт такое.

ERROR	/var/www/............/core/components/sendit/services/sendit.class.php	234
PHP warning: include(/var/www/............../core/custom_auth_hooks/smsauth): failed to open stream: Нет такого устройства
ERROR	/var/www/............./core/components/sendit/services/sendit.class.php	234
PHP warning: include(): Failed opening '/var/www/............/core/custom_auth_hooks/smsauth' for inclusion (include_path='.:')
ERROR	/var/www/............/core/components/pdotools/model/pdotools/pdotools.class.php	875
Could not find the element file "core/elements/snippets/smsauth/snippet.sendcode.php".
ERROR	/var/www/........../core/components/pdotools/model/pdotools/pdotools.class.php	345
[pdoTools] Could not load snippet "@FILE snippets/smsauth/snippet.sendcode.php"
в чём может быть проблема?
Александр Туниеков
04 декабря 2024, 22:19
0
Из-за сложной структуры extJS оказалось, что нужно написать бессмысленно много PHP кода. Когда счет новых процессоров пошел на второй десяток — пришлось остановиться
Вообще конечно когда классные процессоры выпустили для MODX это было думаю круто. Наверно сократило кол-во кода. Наумкин помню ими восторгался. Но все равно это для меня оказалось не хорошим решением. Кода все равно много писать пришлось. Для getTables я CRUD делал в одном файле. Это сократило кол-во контроллеров php с 5-7 на таблицу на 1 контроллер общий для всех таблиц.
Можно попробовать процессоры create, getlist, update и т.д. переписать на 1 процессор на таблицу для extJS. Или может даже 1 процессор на все таблицы. Но здесь не уверен. ExtJs сейчас уже подзабыл.

Либо у нас сейчас есть крутые ИИ и с задачей написать кучу однотипных процессоров Cursor думаю справиться :-). Только промт сообразить как написать :-).
Александр Туниеков
04 декабря 2024, 21:49
0
Блин курсор прям чума :-).
Написал промт
Теперь выбери специфичные для организации ВК24 данные. Запиши их в фай импорта системных настроек для MODX2 _build\configs\settings.js в нужном формате. В gsdoc.class.php добавь получение настроек и передачу их в getChunk. В чанке замени данные плейсхолдерами.
Прикрепил файлы.
Потом
Еще добавь наастройку для Директор ООО «ВК24». ООО «ВК24» company_short_name. идобавь настройки для логотипов и печати
И потом просто aply, aply и aply :-). И все работает.
Так бы делал час, а сделал за 20 минут. Просто промт долго соображал как написать :-)
Артур Шевченко
04 декабря 2024, 20:49
0
Во-первых, radio это переключатель, это означает, что он должен иметь какое-то значение изначально, соответственно и валидация не нужна. Во-вторых, если выше сказанное противоречит твоему мировосприятию, попробуй валидатор checkbox.
Наумов Алексей
04 декабря 2024, 12:34
+1
Из дополнений к VS Code я иногда юзаю Amazon Q, он умеет подсказывать код в процессе написания, иногда прям весьма и весьма хорошо себе.
К примеру пишешь метод updateStatus(MyClass $class, string $status), так он в теле метода предлагает все сделать — установить статус, сохранить объект, вернуть его, в общем время может экономить.

Но с большими объемами кода ИИ вечно косячит, может просто взять и половину логики потерять, речь в частности просто о ChatGPT. Поэтому простыням кода от него я не доверяю.
cronAbs
04 декабря 2024, 12:05
0
Нужно проверять метод save в файле assets/components/tickets/js/web/default.js
Там лаг с label id и input id и как раз если убрать из label id, то и произойдёт ошибка. Конечно если важно, чтобы валидатор был без ошибок, то нужно добавить class и в скрипте поменять "#" на "."
// Чанк с формой
<label for="comment-captcha" class="comment-captcha"[[-id="comment-captcha"]]>[[+captcha]]</label>
<input type="text" name="captcha" value="" id="comment-captcha" class="form-control" />
// Метод save
save: function (form, button) {
    $(form).ajaxSubmit({
        data: {action: 'comment/save'},
        url: TicketsConfig.actionUrl,
        form: form,
        button: button,
        dataType: 'json',
        beforeSubmit: function () {
            clearInterval(window.timer);
            $('.error', form).text('');
            $(button).attr('disabled', 'disabled');
            return true;
        },
        success: function (response) {
            form = '#comment-form';
            $(button).removeAttr('disabled');
            $(document).trigger('tickets_comment_save', response);
            if (response.success) {
                Tickets.forms.comment(false);
                $('input[name="captcha"]', form).val('');
                $('#comment-preview-placeholder').html('').hide();
                $('#comment-editor', form).val('');
                $('.ticket-comment .comment-reply a').show();

                // autoPublish = 0
                if (!response.data.length && response.message) {
                    Tickets.Message.info(response.message);
                }
                else {
                    Tickets.comment.insert(response.data.comment);
                    Tickets.utils.goto($(response.data.comment).attr('id'));
                }

                Tickets.comment.getlist();
                prettyPrint();
            }
            else {
                var cap = $('#comment-form-placeholder label[for=comment-captcha]').text().replace(/[^0-9+]/gi, '');
                if (cap.indexOf('+') > 0 ) {
                    numbers = cap.split('+');
                } else {
                    numbers = cap.split('-');
                }
                var sum = numbers.reduce(function(a, b) {
                    return parseInt(a) + parseInt(b);
                }, 0);
                
                if (response.data && $('input[name="captcha"]', form).val() != sum) {
                    Tickets.Message.error(response.message);
                    var errors = [];
                    var i, field;
                    for (i in response.data) {
                        field = response.data[i];
                        var elem = $(form).find('[name="' + field.field + '"]').parent().find('.error');
                        if (!elem.length) {
                            elem = $(form).find('.' + field.field + '-error');
                        }
                        if (elem.length) {
                            elem.text(field.message)
                        }
                        else if (field.field && field.message) {
                            errors.push(field.field + ': ' + field.message);
                        }
                    }
                    if (errors.length) {
                        Tickets.Message.error(errors.join('
'));
                    }
                    $('input[name="captcha"]', form).val('');
                }
            }
            if (response.data.captcha) {
                $('.comment-captcha', form).text(response.data.captcha);
            }
        }
        
    });
    return false;
},

К слову: Только вот непонятно почему после этих изменений отправляется только после второго раза, как жмешь кнопку отправить. То есть приходится вводить капчу 2 раза или/ жмешь отправить, а потом только вводишь, зато хоть работает, пример выше.
Riwka
04 декабря 2024, 11:30
0
Павел, скрипт у вас просто замечательный! Только одно но, или 2, смотря как считать… Сниппет требует от браузеров пользователей очень много ресурсов и долго загружается, что понижает показатели сайта, которые сейчас очень важны для поисковиков. В его js файле используется JQ, который, в свою очередь, требует подключения соответствующей библиотеки. Подгружать сниппет аяксом не получается, поскольку тогда не срабатывают обработчики js, из-за того что соответствующих объектов нет в DOM. Пробовала откладывать загрузку js до полной прогрузки страницы, но тогда вылезает ошибка как в комментарии Кровельного. Скажите, пожалуйста, у вас в планах есть желание переписать сниппет сделав возможным его отложенную загрузку, или вы его забросили?
Riwka
04 декабря 2024, 11:15
0
Я с таким встречалась когда пыталась отложить загрузку скрипта, т. е. у вас код js не успевает обрабатываться до вызова нового объекта. Как-то так.
Алексей Шумаев
04 декабря 2024, 08:48
0
Оставленная «на потом» дока будет камнем на шее успешного запуска нового модуля.
Про платную расширенную версию ещё не забываем.