Финансовая поддержка VPS, бесплатные дополнения и docs Донаты оплачивают сервер и двигают бесплатные дополнения MODX и документацию. Поддержать

Всего 126 118 комментариев

Алексей Соин
Алексей Соин
абсолютно не вызывает опасения, ИИ хорош как помощник в рутинных задачах и в получении готового кода который аналогично можно самостоятельно получить прочитав документацию, если задача стоит чуть сложнее рутинного кода, то все ИИ выдают полнейший бред.

А вот если все задачи которые решает разработчик способен заменить условный чатгпт, то вот тут уже стоит задуматься о полноценности и о том, что возможно пришла пора углубиться в своих знаниях или сменить работу.
Андрей Шевяков
Андрей Шевяков
Вот так вроде работает, попробуйте

'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',
                ] ?: 'Похожих товаров нет.'}
Александр Мельник
Александр Мельник
Без тени осуждения, просто видя ваше восхищение и понимая, как сильно оно отличается от моих чувств. я не могу не спросить.
А вы после этого все еще чувствуете себя программистом? Разве это не противно, что вместо написания кода мы думаем как правильно составить запрос. Разве не возникает чувство собственной неполноценности? Разве не ужасно, что вы как человек теряете контроль над кодом? Ведь по сути вы просто «верите» что ИИ сделал все правильно. Да в коде из 10 строк это можно проверить, но что если код состоит из 50 000 000 строк?

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

Проблема в том, что авторы бросают свои дополнения и перестают развивать. И даже присланные PR не внедряют. Вот Sheduler на gitjhub висит с последним обновлением 2 года назад, и что с ним делать, если автору пофигу?..
Ruslan
Ruslan
Еще нашел такой параметр «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
Ruslan
Добрый вечер.
Попробывал сделать по вашей рекомендации, но у меня в логах ошибок выдаёт такое.

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"
в чём может быть проблема?
Александр Туниеков
Александр Туниеков
Из-за сложной структуры extJS оказалось, что нужно написать бессмысленно много PHP кода. Когда счет новых процессоров пошел на второй десяток — пришлось остановиться
Вообще конечно когда классные процессоры выпустили для MODX это было думаю круто. Наверно сократило кол-во кода. Наумкин помню ими восторгался. Но все равно это для меня оказалось не хорошим решением. Кода все равно много писать пришлось. Для getTables я CRUD делал в одном файле. Это сократило кол-во контроллеров php с 5-7 на таблицу на 1 контроллер общий для всех таблиц.
Можно попробовать процессоры create, getlist, update и т.д. переписать на 1 процессор на таблицу для extJS. Или может даже 1 процессор на все таблицы. Но здесь не уверен. ExtJs сейчас уже подзабыл.

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

Но с большими объемами кода ИИ вечно косячит, может просто взять и половину логики потерять, речь в частности просто о ChatGPT. Поэтому простыням кода от него я не доверяю.
cronAbs
cronAbs
Нужно проверять метод 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
Riwka
Павел, скрипт у вас просто замечательный! Только одно но, или 2, смотря как считать… Сниппет требует от браузеров пользователей очень много ресурсов и долго загружается, что понижает показатели сайта, которые сейчас очень важны для поисковиков. В его js файле используется JQ, который, в свою очередь, требует подключения соответствующей библиотеки. Подгружать сниппет аяксом не получается, поскольку тогда не срабатывают обработчики js, из-за того что соответствующих объектов нет в DOM. Пробовала откладывать загрузку js до полной прогрузки страницы, но тогда вылезает ошибка как в комментарии Кровельного. Скажите, пожалуйста, у вас в планах есть желание переписать сниппет сделав возможным его отложенную загрузку, или вы его забросили?