Всего 123 786 комментариев

Сергей Шлоков
08 апреля 2024, 08:11
+1
Отличный пример как делать нельзя. Это максимально жесткий сценарий оверхеда нагрузки.
Подробности описаны мной тут.
Арман
08 апреля 2024, 04:22
0
[08-Apr-2024 04:14:56 Europe/Moscow] PHP Fatal error:  Uncaught TypeError: count(): Argument #1 ($value) must be of type Countable|array, null given in /var/www/u1387551/data/www/site.ru/core/components/pdotools/vendor/fenom/fenom/src/Fenom/Template.php(487) : eval()'d code:20
Stack trace:
#0 /var/www/u1532978/data/www/site.ru/core/components/pdotools/vendor/fenom/fenom/src/Fenom/Render.php(215): Fenom\Template->{closure}(Array, Object(Fenom\Template))
#1 /var/www/u1532978/data/www/site.ru/core/components/pdotools/vendor/fenom/fenom/src/Fenom/Render.php(215): Closure->__invoke(Array, Object(Fenom\Template))
#2 /var/www/u1532978/data/www/site.ru/core/components/pdotools/vendor/fenom/fenom/src/Fenom/Template.php(492): Fenom\Render->display(Array)
#3 /var/www/u1532978/data/www/site.ru/core/components/pdotools/vendor/fenom/fenom/src/Fenom/Render.php(229): Fenom\Template->display(Array)
#4 /var/www/u1532978/data/www/site.ru/core/components/pdotools/src/Parsing/Fenom/Fenom.php(136): Fenom\Render->fetch(Array)
#5 /var/www/u1532978/data/www/site.ru/core/components/pdotools/src/CoreTools.php(418): ModxPro\PdoTools\Parsing\Fenom\Fenom->process(Array, Array)
#6 /var/www/u1532978/data/www/site.ru/core/components/formit/src/FormIt.php(341): ModxPro\PdoTools\CoreTools->getChunk('siDefaultEmail', Array)
#7 /var/www/u1532978/data/www/site.ru/core/components/formit/src/FormIt/Hook/Email.php(193): Sterc\FormIt->getChunk('siDefaultEmail', Array)
#8 /var/www/u1532978/data/www/site.ru/core/components/formit/src/FormIt/Hook.php(141): Sterc\FormIt\Hook\Email->process(Array)
#9 /var/www/u1532978/data/www/site.ru/core/components/formit/src/FormIt/Hook.php(107): Sterc\FormIt\Hook->load('email', Array, Array)
#10 /var/www/u1532978/data/www/site.ru/core/components/formit/src/FormIt/Request.php(402): Sterc\FormIt\Hook->loadMultiple(Array, Array)
#11 /var/www/u1532978/data/www/site.ru/core/components/formit/src/FormIt/Request.php(345): Sterc\FormIt\Request->runPostHooks()
#12 /var/www/u1532978/data/www/site.ru/core/components/formit/src/FormIt/Request.php(254): Sterc\FormIt\Request->postProcess()
#13 /var/www/u1532978/data/www/site.ru/core/cache/includes/elements/modx/revolution/modsnippet/11.include.cache.php(21): Sterc\FormIt\Request->handle(Array)
#14 /var/www/u1532978/data/www/site.ru/core/src/Revolution/modScript.php(88): include('/var/www/u13875...')
#15 /var/www/u1532978/data/www/site.ru/core/components/pdotools/src/CoreTools.php(358): MODX\Revolution\modScript->process(NULL)
#16 /var/www/u1532978/data/www/site.ru/core/components/sendit/model/sendit/sendit.class.php(391): ModxPro\PdoTools\CoreTools->runSnippet('FormIt', Array)
#17 /var/www/u1532978/data/www/site.ru/core/components/sendit/model/sendit/sendit.class.php(372): SendIt->runSnippet('FormIt')
#18 /var/www/u1532978/data/www/site.ru/assets/components/sendit/action.php(45): SendIt->process()
#19 {main}
  thrown in /var/www/u1532978/data/www/site.ru/core/components/pdotools/vendor/fenom/fenom/src/Fenom/Template.php(487) : eval()'d code on line 20
Наумов Алексей
07 апреля 2024, 19:27
0
Ну… попробую описать) у меня в проекте очень длинный код и он делает не много не то, что вам нужно, поэтому всю портянку сюда не вставить.

0. на фронте добавляем поле для выбора ширины или ввода его вручную

1. Создадим плагин на событие msopOnAfterGetCost
if ($modx->event->name == 'msopOnAfterGetCost') {
    $isGetModificationAction = (isset($_REQUEST['action']) && $_REQUEST['action'] == "modification/get");
    $isCartAddAction = (isset($_REQUEST['ms2_action']) && $_REQUEST['ms2_action'] == "cart/add");
    
    // Обрабатываем только ajax запросы, в которых компонент msOptionsPrice2 отдает цену
    // Есть альтарнативный способ: проверять $_REQUEST['ms2_action'] !== cart/add
    if($isGetModificationAction || $isCartAddAction) {
    // здесь наш основной код
    // доступна переменная $modification
    // если пользователь выбрал определенную модификацию и у нее есть цена, то берем данные из нее
    if($modification['id']) {
    } else {
        // нет модификации, соответствующей переданным параметрам...
        // нужно высчитать цену, исходя из ширины вашего товара
        // ...
        // а вот тут мы вернем цену
        $modx->event->returnedValues['cost'] = ???;
    }
    
    
    }
}
2.
Олег Захаров
07 апреля 2024, 12:05
0
А как задать сортировку опций внутри категорий? Для тех кто не знает и чтобы сэкономить себе время и нервы подсказываю (сам долго тупил и не знал как настроить):
Чтобы опции внутри категории сортировались в нужном порядке, заходим в редактирование Категории товаров в Minishop и находим вкладку Настройки. Там должны быть опции категории. Перетаскиваем строки вверх вниз формируя нужную сортировку.
Поле rank у опций категории (таблица modx_ms2_category_options) по умолчанию стоит видимо 0, но после перетаскивания строк формируется последовательность сортировки.
Олег Захаров
06 апреля 2024, 22:31
+1
да правильно, поправил в ТС код.
Пример работы выложил тут https://dev445.gowindo.ru/dealers
Есть одна недоработка. Когда нажимаешь на метку, раскрывается всплывающая карточка организации (balloonContent). После закрытия карточки выведенный справа блок от метки iconContentLayout остается открытым (т.к. мышка оказывается за пределами границ иконки геометки myPlacemarkWithContent после закрытия balloonContent, но событие mouseleave не срабатывает). И показанный блок iconContentLayout не закрывается пока снова не наведешь мышку на метку и выйдешь за пределы метки (повторно вызвав срабатывание mouseenter и mouseleave). Надо бы доделать, повесить вызов кода либо событие на закрытие balloonContent, либо добавить событие потери фокуса после попадания мышки за пределы границ иконки геометки myPlacemarkWithContent. Пока лень думать над этим, т.к. пока Заказчику это не горит.
Дима Касаткин
06 апреля 2024, 22:07
+1
Благодарю за полезный материал!

Для тех, кто захочет воспользоваться решением, рекомендую заменить JS-комментарии (/* такие */) на fenom-комментарии ( {*на такие*} ) чтобы на фронтенд не выводить их!
Александр Мельник
06 апреля 2024, 15:34
0
Не очень в тему, но вдруг кому то будет полезно.
Недавно на одном из наших проектов (не MODX) столкнулись со «странным» поведением модуля доставки СДЕКа.
Не вдаваясь в нюансы, проблема оказалось в том, что СДЕК хранит много данных в сессии. Это и список pvz_list (пункты выдач) и почтоматы и так далее.
Сессии хранились в базе данных и длина эти данных стала превышать разрешенную для типа данных TEXT, изза чего вся сессия уничтожалась.
serdeles
06 апреля 2024, 10:31
0
Спасибо, попробую.
Артур Шевченко
06 апреля 2024, 09:45
0
Сделай просто тестовое поле и пишу туда путь к файлу.
serdeles
05 апреля 2024, 23:08
0
Спасибо! Буду пробовать это решение. Нестандартная она для меня, так как я не так плотно и часто занимаюсь разработкой ))

Просто там может быть вероятность размещения не только изображений, но и, к примеру, встроенных видеороликов или просто текстовых блоков.
Артур Шевченко
05 апреля 2024, 23:00
+1
Не понимаю при чём тут галерея, размер и формат картинок. Если все картинки связаны с один конкретным ресурсом, то нужно создать TV типа migx, в котором будет другой migx. Покажу на примере массива
[
    [
        'class' => 'col-1',
        'images' => [
            'image-1.jpg',
            'image-2.jpg'
        ]
    ],
    [
        'class' => 'col-2',
        'images' => [
            'image-1.jpg',
            'image-2.jpg'
        ]
    ],
]
И в шаблоне это можно вывести так
{foreach $blocks as $block}
<div class="{$block.class}">
    <ul>
    {foreach $block.images as $img}
        <li><img src="{$img}"></li>
    {/foreach}
    </ul>
</div>
{/foreach}
Ну или использовать сниппет getImageList для обработки полей типа migx.
В чём нестандартность задачи неясно, может быть ты что-то не договариваешь?
serdeles
05 апреля 2024, 22:34
0
Потому что речь идет не о галерее. И потому что на одной странице будут размещаться картинки в несколько колонок (от одной до четырех). Картинки разного размера и формата. Соответственно, для их вывода разработаны CSS-классы, которые в зависимости от количества колонок будут применяться к элементам списка.

Задача нестандартная, поэтому и попросил тут совета.
Артур Шевченко
05 апреля 2024, 22:26
0
А зачем картинку делать дочерним документом? Чем тебе migx не угодил?
Артур Шевченко
05 апреля 2024, 22:23
0
pThumb вполне справляется, правда нужно шаблоны править.
Валентина Павлова
05 апреля 2024, 19:37
0
Хотелось бы попробовать, круто выглядит. Но выдает ошибку:
Это расширение было отключено, так как оно не поддерживает виртуальные рабочие области.
То есть файл можно только локальный редактировать? И потом через git синхронизировать?
Удаленно нельзя?
Вячеслав
05 апреля 2024, 10:00
0
Все поправил на обоих сайтах, но заметил, что при оформлении Курьером в поле индекс прилетает «undefined» у кого-нибудь есть такое же и как решили?
Олег Захаров
05 апреля 2024, 09:36
0
Круто! Вы молодец! Спасибо огромное Вам за Ваши труды. Хоть и принято на сайте общаться на ты, но пишу ВЫ с большой буквы, т.к. Вы человек с большой буквы. Благодаря Вашим стараниям и таким энтузиастам как Вы и всем участникам сообщества кто пишет и развивает MODX — живет MODX, живет сообщество.
Благодаря Вам всем уважаемые коллеги люди могут писать классные сайты в классной среде (пусть и не все идеально, но это не Wordpress с непонятным кодом и не Joomla с тормозами и недоделками и не 1C Битрикс (тяжелый движок)). MODX очень классный движок, гибкий, простой. Сколько благодаря сообществу людей могут заработать на хлеб с маслом не сосчитать.
Очень нужны понятные уроки для новичков. Особенно интересны подходы работы в среде разработки с подключением Github и прочих инструментов разработки как Compose и т.д. Интересны описание совместной работы нескольких человек над сайтом одновременно чтобы можно было в студиях для командной разработки применить. И тогда полк разработчиков увеличится.
Для себя я понял что Laravell + VUE.js это конечно круто, но разработка на нем должна начинаться от нескольких сотен тысяч рублей, или лучше от 1 миллиона и имеет смысл для сложных сервисов с большой нагрузкой и сложным интерфейсом и где есть бюджет большой. Для большинства же стандартных сайтов и простеньких интернет-магазинов MODX все еще очень даже не плох, кто бы что про него не говорил. Старичок, но надежный и простой.
Василий Наумкин
05 апреля 2024, 05:45
+2
Полностью перешёл на Vesp и очень доволен.

Но, как показала практика, освоить работу с ним непросто, поэтому сейчас я возвращаюсь вместе с Vesp в MODX — для чего и придумал новые composer-only дополнения.

Теперь я могу писать современные приложения внутри MODX, что должно хорошо повлиять в целом на систему. Про это и буду рассказывать всем в Белграде.

Насколько будет сложнее делать на модных Laravell + Vue.js?
Можешь почитать курс про работу на Vesp, там будет понятно. Есть еще и продолжение про переезд магазина с miniShop2 на Vesp.
Олег Захаров
05 апреля 2024, 03:14
0
Василий, а Вы сейчас на MODX что-то разрабатываете? Или полностью перешли на свой VESP? Насколько сложнее по Вашему мнению и опыту сделать например интернет-магазин на MODX (я все не решаюсь что-то делать на 3.0, пока только на 2.8.6) и на VESP разработчику не знакомому с VESP?
Вопрос не только к Василию, может кто бывалый поделится опытом?
Насколько будет сложнее делать на модных Laravell + Vue.js?
Олег Захаров
05 апреля 2024, 03:10
0
MODX старичок. На нем реальные проекты быстро можно сделать. А на laravell я например сам пока еще не решаюсь что-то серьезное делать, много изучать надо, есть постоянно возникающие вопросы что и как. Пока наф… г наф… г делаю на старичке и работает самое главное. Конечно многое хочется по другому чтобы было.