Ivan K.

Ivan K.

С нами с 30 марта 2017; Место в рейтинге пользователей: #28
Ivan K.
16 июля 2025, 17:41
+2
Загрузил новую исправленную версию в репозитории,
Ivan K.
15 июля 2025, 12:22
+4
Через несколько дней будет готов компонент и для второй ветки MODX. Glide тоже будет версии 2.
так как Glide 3.0 требует минимум php 8.1, а у второй версии минималка 7.2
Ivan K.
13 июля 2025, 13:21
+27
Я готов и для MODX2 написать подобный компонент. Если этот комментарий наберет 15 плюсиков))
Ivan K.
13 июля 2025, 12:55
0
Из-за лени )) Мне удобней у себя размещать.
Ivan K.
10 июля 2025, 12:26
+2
Есть такой компонент, но с ним могут быть сложности, у новичков точно, он давно не обновлялся и у меня например, не «заводился» из коробки.

msOptionsPrice2
modstore.pro/packages/ecommerce/msoptionsprice2

В вашем случае скорее всего нужно кастомное решение.
Ivan K.
09 июля 2025, 14:04
0
Значит я не зря все-таки вынес логику в сервисный класс))
Ivan K.
09 июля 2025, 13:43
+1
Точно плагин срабатывает (нормально проверил) с выключенным MODX_API_MODE.

Но чтобы выключить MODX_API_MODE тоже нужно править исходник, того же Fetchit, например.
Ivan K.
09 июля 2025, 12:01
0
Все-таки не минуя index.php, но из-за того, что включен режим API (MODX_API_MODE), плагины действительно не сработают.
Вы знаете вы ввергли меня в сомнения)
Попробовал, и выяснил, включен или нет API — не имеет значения плагин не срабатывает, если напрямую обращаться, например, к assets/components/fetchit/action.php
Ivan K.
09 июля 2025, 11:33
0
У компонентов FetchIt AjaxForm нет обновлений уже очень давно.

У меня есть идея использовать настройку auto_prepend_file в php.ini. Тогда не нужно будет править исходники. Не знаю стоит ли реализовывать и как это скажется на производительности.
Ivan K.
30 июня 2025, 21:17
+5
Безусловно, использование Git является золотым стандартом в современной разработке.
Позвольте я объясню, почему IskFileGuardian является не заменой, а дополнением к таким практикам, и для кого он предназначен в первую очередь.
IskFileGuardian создан для другой аудитории и решает несколько иные задачи:
MODX часто используют менеджеры контента, владельцы малого бизнеса, веб-мастера, которые не работают с Git и не имеют SSH-доступа к серверу. Из собственного опыта скажу, многие не закрывают даже доступ к папке /core/ — типа и так сойдет.
Компонент предоставляет им интуитивно понятный интерфейс прямо в админке MODX, не требуя технических навыков.

Скрипт с git status требует настроенного Git на сервере и прав на его выполнение через cron.
Мой компонент работает на любом шаред-хостинге, где есть PHP и MODX.
Git — это инструмент для разработчика на этапе разработки и деплоя.
IskFileGuardian — это инструмент для администратора/владельца сайта на этапе эксплуатации и мониторинга безопасности. Это разные плоскости применения.

Команда git status отслеживает изменения только в файлах, которые индексируются Git. Она целенаправленно игнорирует все, что указано в файле .gitignore. Что обычно находится в .gitignore на проекте MODX?
Кэш (/core/cache/)
Загружаемые пользователями файлы (/assets/uploads/, /images/)
Логи и сессии
Иногда — папки с компонентами, установленными из репозитория MODX.

Хацкер, получивший доступ к сайту, с вероятностью 99% загрузит веб-шелл или бэкдор именно в одну из этих папок. git status никогда не покажет этот новый файл.
Ivan K.
23 июня 2025, 15:13
0
Попробуйте мой компонент. IskWaf — Web Application Firewall (MODX3) iskwaf2x (MODX2)
Может поможет.
А то мало скачиваний даже немного обидно))
Ivan K.
13 июня 2025, 14:47
0
Все проще, ИИ просто выдумывает. Он чтобы дать ответ придумывает, то чего не было.
Ivan K.
12 июня 2025, 14:31
+1
Очень хороший у вас компонент получился. Еще не пробовал, но думаю скоро попробую его в деле.
Очень шустро смотрю фильтрует товары, мне прям очень нравится, скажите не тестировали на большем количестве параметров? Скорость не сильно падает?
Я так понимаю pbShop еще в разработке, не подскажите, когда примерно будет готова корзина и оформление заказов? Так сказать, минимальный набор для запуска нового интернет-магазина. А то miniShop3 не понятно, когда появится и еще более призрачно появления компонента для фильтрации товаров для MODX3.
Ivan K.
11 июня 2025, 17:29
+1
Компонент создан для MODX2 и MODX3. Загрузил в репозиторий, жду модерации.
Ivan K.
29 мая 2025, 16:19
0
Данная версия будет бесплатной всегда, задумывал ее как базовую версию. Я скоро выпушу платный вариант с расширенным функционалом, где будет возможность использовать другие базы ip.
Ivan K.
17 мая 2025, 21:26
+1
А вы какой планировщик имеете ввиду? (Scheduler — modstore.pro/packages/utilities/scheduler) он?
Но там ведь нет возможности указать периодичность запусков заданий. Только можно указать точное время запуска.
При такой структуре Scheduler'а, для достижения периодичности выполнения нужно будет реализовать логику самоперепланирования внутри скриптов, а первый запуск придется сделать вручную. Это как-то не очень удобно не находите? и не очень надежно. Если вы знаете в каком компоненте есть реализация нормальной работы с этим планировщиком напишите. я гляну, вдруг что-то не так понимаю.
Ivan K.
03 мая 2025, 20:44
0
А целую галерею) я не так понял, думал одну фотку менять, у меня из коробки и одна не менялась (фотораму не использую на сайте) два часа возился. Как целую галерею менять подсказать не могу не использовал ни когда.
Ivan K.
02 мая 2025, 12:42
0
Вот пример как вызываю
<form class="ms2_form msoptionsprice-product space-y-2" method="post">
            <input type="hidden" name="id" value="[[*id]]">
            <input type="hidden" name="count" id="product_price"  value="1"/>
            <input type="hidden" name="options" value="[]">
            [[!msOptionsPrice.option?
            &options=`palitra2,verhetaz2,futerovka2,vidkamen2,kamenkrishka2,radiussteklo2,povorotmeh2,maternoga2,raspol_pech2,vidkamepanel2,kamenkrishka3,maternoga3`

            &sortOptions=`
            vidkamepanel2:SORT_ASC:SORT_STRING,
            raspol_pech2:SORT_ASC:SORT_STRING,
            maternoga2:SORT_ASC:SORT_STRING,
            maternoga3:SORT_ASC:SORT_STRING,
            povorotmeh2:SORT_ASC:SORT_STRING,
            radiussteklo2:SORT_ASC:SORT_STRING,
            kamenkrishka2:SORT_ASC:SORT_STRING,
            kamenkrishka3:SORT_ASC:SORT_STRING,
            vidkamen2:SORT_ASC:SORT_STRING,
            palitra2:SORT_ASC:SORT_STRING,
            futerovka2:SORT_ASC:SORT_STRING,
            verhetaz2:SORT_DESC:SORT_STRING,
            `
            &tpl=`zbagira.tpl.msOptions.radio`

            &constraintOptions=`{"vidkamen2":["maternoga2"],"kamenkrishka2":["maternoga2"],
            "maternoga3":["vidkamepanel2","kamenkrishka3"],
            "kamenkrishka3":["vidkamepanel2"],
            "vidkamepanel2":["maternoga3"],
            "maternoga3":["kamenkrishka3"]

            }`


            ]]
            


            <div id="my-image-container" class="w-full  button--icons"></div>
            <button type="submit" class="w-full button button--primary button--icons" name="ms2_action" value="cart/add">
                <span>В корзину</span>
                <svg class="size-5">
                    <use xlink:href="/assets/components/zbagira/tema/images/template/icons.svg#cart"></use>
                </svg>
            </button>



        </form>
zbagira.tpl.msOptions.radio

{foreach $options as $name => $values}

    <div class="sm-text "><b>{('ms2_product_' ~ $name) | lexicon}</b></div>
<div class="flex flex-wrap gap-2"

        {if $constraints[$name]}
            data-constraints="{$constraints[$name]| json_encode: 256 | htmlentities}"
        {/if}
>
    {foreach $values as $value index=$index}

        <label class="input-parent flex items-center gap-3 p-2 duration-200 border border-neutral-200 rounded-xl hover:border-neutral-400">
            <input type="radio" class="pointer-events-none form-radio" value="{$values[$index]}" name="options[{$name}]" {if $index == 0}checked="checked"{/if}
                    {if $constraints[$name]}
                        data-relations="{$relations[$name][$value]| json_encode: 256 | htmlentities}"
                    {/if}
            />
            <div class="text-sm text-neutral-900">{$values[$index]|replace:'0_':''}</div>
        </label>


    {/foreach}
</div>
{/foreach}