3 часа назад
Не нужно меня поддерживать в данном конкретном случае. Прошу убрать лишнее
Опыт по переносу MODX2 на MODX3 и Minishop3 2
4 часа назад
В общем убил целый день, но… так у меня ничего и не вышло.
не могу зарегистрировать класс.
содержание самого файла my_msorderhandler.class.php:
...
Кастомизация minishop'a 9
4 часа назад
Вот тебе моё мнение, через полгода-год заказчикам будем всё равно на чём ты будешь делать сайт, гораздо больше их будет волновать вопрос: умеешь ли ты...
Вопрос по будущему MODX и стратегии развития. 1
7 часов назад
Компонент очень нужный и мне кажется будет востребован.
У меня тут задача стоит сделать что-то подобное на сайте на движке на MODX 2.8 — там есть ста...
ms3Variants - Реализация вариантов одного товара в MiniShop3 4
8 часов назад
тут пришла мысль что никто не захочет просто так делиться своим опытом за бесплатно. Можно было бы сделать статьи и кейсы платными? Типа хочешь прочит...
Предложение по развитию сообщества: Создание каталога портфолио/реализованных кейсов на MODX с демо ... 1
Сегодня в 10:08
Добрый день! Я этот компонент давно делал, и еще лет 5 не возвращался к нему… он работоспособен, все в этом плане нормально (ну по крайней мере с php ...
msProductKits - удобное управление товарами-комплектами (наборами товаров) 29
Вчера в 10:22
Вижу, спасибо.
Ошибочно решил, что если есть в документации minishop2, то в старых версиях есть и сам код не посмотрел.
Предыдущий идентификатор статуса при событии 'msOnChangeOrderStatus' 4
Вчера в 09:27
Привет, Алексей.
1. Как определяем ботов
Проверка идёт по User-Agent в ms3rv_is_bot() (helpers.php). Используется regex по типичным маркерам краул...
ms3RecentlyViewed - Недавно просмотренные товары для MiniShop3 2
17 февраля 2026, 10:07
Здравствуйте, компонент куплен, на основной домен ставится, на dev. не ставится,
Could not generate encryption key
Vehicle 04b9f528f736384b46f71324...
[msProductRemains] Компонент учёта остатков товара 179
1. Добавляем в параметры допустимых полей сниппета ticketForm необходимое тв-поле (tvname1)
2. Добавляем внутри формы создания/обновления мультиселектор:
2. Добавляем для тега select атрибут data-real, со значением, равным названию нашего тв-поля и произвольный класс (пусть будет bimbo-input, от слова «пустышка»):
3. После тега select (или в любом другом месте внутри тега form) добавляем настоящий инпут, хранящий значение тв-поля:
4. В js добавляем событие, переносящие заполненные значения от селектора-пустышки в настоящий инпут при изменении первого:
5. В тот же js добавляем событие, переносящие реальное значение из скрытого инпута в пустышку при загрузке страницы:
В итоге:
— решение относительно универсально, т.к. не привязано ни к ticket-ам, ни к конкретным родителям, а упирается только в наличие нужных классов и скрытых полей
— вся лишняя нагрузка происходит в процессе заполнения
— может работать не только с мультиселекторами, но и простыми селекторами или инпутами (удобно в случаях, если селектор нужно кастомизировать каким-либо js-скриптом, который в процессе видоизменяет его структуру)
— когда вызывается файл main/default.js и auth/default.js, в первом определяется переменная Office и вложенные в неё общие функции, а во втором добавляется функция, работающая с авторизацией и регистрацией (и там же инициируется)
— принцип «переопределения» функции в том, что мы как бы переписываем переменную, содержащую саму функцию, и в её последующих вызовах уже будет выполняться то, что мы изменили.
И этот вариант хорош для больших файлов, где масса функций, а нам нужно изменить только одну из них. Например, в mSearch2 — таким образом мы сведем к минимуму проблемы, которые могут появиться при обновлении.
Но в файле auth/default.js всего 1 функция, которую мы и переопределяем. Поэтому в переопределении нет смысла, и вариант со своим файлом наиболее оправдан.
Так как переадресация должна происходить только после успешной регистрации, вам по-прежнему нужен сегмент, отправляющий данные на проверку и получающие ответ.
Вызов ДО основого файла будет перезаписан новой функцией от Office.
Вызов ПОСЛЕ приведет к тому, что у вас будет 2 идентичных скрипта, работать из которых будет только последний.
Если не секрет, какой объект resource вы получаете? И не легче ли получить его внутри плагина стандартными способами, как-то так:
(к слову, в редакторе сообщений есть тег code, который красиво оформляет синтаксис кода)
Приложите содержимое вашего плагина msOnCreateOrder. Если он выдает ошибку даже при пустом содержимом, стоит подумать о переустановке дополнения minishop2 и/или обновлении версии MODX-a
Способ с Inline-чанком избавляет от лишнего запроса к БД, способ с обычным чанком более читаем и удобнее, когда один и тот же чанк используется в нескольких вызовах. Лично я стараюсь использовать файловые чанки.
Документация.
Также не лишним будет открыть консоль браузера и посмотреть, не появляется ли в ней ошибка при нажатии на кнопку «заказать».
UPD: плюс, на мой взгляд, с точки зрения СЕО, переадресация с помощью js здесь более уместна, чем редирект. Но, возможно, сеошники меня поправят или предложат правильный код ответа (не 301/302).
Вообще, я изначально и писал вариант с переопределением функции (без необходимости замены js), но затем обратил внимание, что родной файл итак содержит, по-сути, всего 1 функцию, которую мы и заменяем.
В итоге загружаемый браузером код увеличивается в два раза без какой-либо необходимости — поэтому я и привел вариант с подменой файла.
Если подразумевалась пошаговая инструкция, то как-то так:
1. В чанке формы регистрации (по умолчанию tpl.Office.auth.login) дописать:
2. Создаем новый js-файл и копируем в него содержимое /assets/components/office/js/auth/default.js
3. Указываем путь до него в системной настройке office_auth_frontend_js
4. В новом файле заменяем данный код:
следующим:
Опционально, если до редиректа нужно дать время пользователю на просмотр сообщения об успешной регистрации, то строчку window.location.href можно обернуть таймаутом:
В рамках Office можно также переопределить функцию Office.Auth:
(функцию можно переопределить так)
Навскидку, тут одно из: или сторонний плагин или код, влияющий на функционал, или в новых версиях UserFiles что-то изменилось, или не все восстановили.
Дело в том, что при создании тикета, он физически формируется лишь при нажатии на кнопку «добавить», в то время как сами изображения в моем способе загружаются ДО создания ресурса, а в процессе его создания уже переназначаются новому ресурсу. Поэтому и необходим промежуточный родитель.
2. Визуально скрываете эту же кнопку с помощью стилей или классов
3. На кнопку «добавить фотографию» вешаете событие, указав id из шага 1:
(для примера из шага 3 требуется подключенный jQuery до кнопки «добавить фотографию»)
— вы можете подключить любую библиотеку всплывающих окон, засунуть во всплывающее окно вызов ufForm, а на кнопку «добавить файлы» повесить открытие этого окна
— вы можете скрыть форму ufForm с помощью css, а при нажатии на кнопку «добавить файлы» менять её отображающие классы или стили
Если вопрос был в том, где необходимо дописать html кнопки: чанки tplFormCreate/tplFormUpdate.
> which will result in a lot of the Dutch (and Vasily & Yana) to dress in orange
— вы оделись в оранжевую одежду или нарядились апельсинами? (нужны пруфы)
Если целью сайта было научиться азам программирования и верстки, то конечный продукт не будет эффективным для боевых задач. Если же вам необходим конечный продукт, реализованный своими силами, то совсем не обязательно писать все с нуля.
Разработка целого сайта подразумевает очень обширную сферу деятельности, и нет ничего зазорного в том, чтобы делегировать часть задач. Вы же не писали все используемые дополнения с нуля — поступите также и с дизайном, возьмите готовый шаблон. В процессе настройки его под себя вы все равно будете узнавать что-то новое, но в правильной дозировке, не превращая всю полученную информацию в кашу.
Что же до самого сайта, из того, что сразу бросается в глаза:
— скрипты, подключаемые с google fonts, можно склеить в один запрос (примерно так):
— без оглядки на небольшую эффективность тега keywords, его максимально допустимая длина — 250 символов (лучше уложиться в 150).
— иконку для сайта (favicon) можно сгенерировать детальнее для разных устройств — https://realfavicongenerator.net/
— для минимизации количества запросов, шрифты и стили лучше склеивать и минифицировать. Не углубляясь в детали, для вашего текущего уровня знаний подойдет MinifyX
— код, указанный ниже, не работает, т.к. он вызван до инициализации jQuery (вообще рекомендую при разработке почаще заглядывать в консоль браузера на наличие ошибок):
— при помощи плагина на событие OnWebPagePrerender можно реализовать сжатие html, что позитивно оценивается поисковыми системами.