Всего 125 376 комментариев

Александр Туниеков
25 ноября 2024, 10:27
0
ну возьми тогда htmx или реализуй фронт часть по аналогии с тем как сделали в laravel с их liwere.
Тут как 2 моих претензии к программированию вообще:
1) Сильно много инструментов. Чтобы освоить более менее сложный инструмент, написать пару приложений, набить шишки, нужно от месяца до года. Я вообще не горю желанием пробовать все подряд и долго думаю перед тем как что-то начать использовать. И инструментов так много, что может нужный и есть но об нем я даже и не слышал.
2) В 2023 году, когда решал перейти на vue, о htmx я не слышал. Сейчас когда потратил год, более мение освоил vue, написал АПИ появляется htmx и получается мое gtsAPI уже как бы легаси :-). Не успеешь написать приложение, а оно уже устарело :-).
gtsAPI и PVTables заняло год и то все что хочелось не реализованно. Подозреваю, что написание какого-либо modHTMX займет не меньше времени. На ларе уже реализованно и логичнее писать уже на ларавел просто. Но опять же легаси тянет к модекс. Переписывать на лару тоже год. Директор меня убъет, если я еще год буду все переписывать :-). gtsAPI уже реализованно и в течении года точно его буду использовать вместе с Vue. В сторону htmx, думаю, буду смотреть присматриваться. Если трудозатраты по предварительной оценке могут окупиться, то может сделаю modHTMX, но пока сомнительно. Это должно быть легко сделать чтобы за это браться.
про то что vue медленно отрисовывает данные в браузере, это вообще чтото новое
Vue то работает быстро, но пока не грузишь его тысячами элементов. Подгрузи 10 000 элементов и повиснет и Vue и браузер и API и чистый js(Если на нем писать). Я имею ввиду, что с большим числом элементов надо быть осторожнее.

про размеры бандлов, во первых никто не собирает единым бандлом, а разбивают на чанки, во вторых такого огромного размера бандл не будет если не подрубать на каждый чих стороннюю библиотеку
Тут кстати есть вопрос. А зачем вообще разбивают на чанки? В SPA все равно же все грузиться сразу или я что-то еще не разобрался…
Хотел еще зацепить проблему модульности приложения, но пропустил. Vue собирается в один или несколько чанков, но это в принципе один модуль который требуется для любой части приложения. Как быть если на 1 странице требуется один скрипт, а на другой другой? И хочется не грузить в продакшен монолит, а обновить модуль приложения? В чистом php все просто. 1 php файл 1 страница и для обновления страницы нужно заменить нужный файл. В MODX пишешь компонент и обновляешь в продакшен только его. А как в Vue делать?

rest api modx
Это насмешка, а не АПИ. Все равно на каждый чих писать свои классы расширяя rest api modx. В mmxDatabase, хотя бы, Василий говорил, что для основных таблиц MODX написал классы.
zoomx
В него не вникал. Так то меня феном устраивает, и еще шаблонизатор мне не нужен. Ачто там есть АПИ в первый раз слышу.
Александр Туниеков
25 ноября 2024, 08:00
0
ну тогда groupby и having
«query» принимает все параметры pdoFetch и в нем есть и groupby и having. Пример навскидку:
"query":{
		"class":"modUser",
		"leftJoin":{
			"modUserProfile":{
				"class":"modUserProfile",
				"on":"modUserProfile.internalKey = modUser.id"
			}
		},
		"select":{
			"modUser":"modUser.id",
			"modUserProfile":"modUserProfile.fullname,modUserProfile.email,modUserProfile.phone"
		},
		"where":{
			"modUser.active":1
		},
                "groupby":"modUser.primary_group",
                "having":{
                    "count(*)  > 3"
                },
		"sortby":{
			"modUser.id":"DESC"
		}
	}
Вроде такой запрос должен работать. «count(*) > 3» не уверен, что правильно составил.
+ подгрузка не родных пакетов
«loadModels»
{
        "actions": {
            "read": [],
            "create": [],
            "update": [],
    	    "delete": []
        },
        "loadModels" :"modextra,gtsshop",
...
еще я правильно понимаю что фильтрация и сортировка по умолчанию по всем полям?
Да правильно.

$object->set('password',md5(date('d.m.Y H:i:s')));
как потом этим пользоваться?
Хм. взял пример из Создание CRUD интерфейса вне админки. Не знаю зачем там случайный пароль ставили. Просто повторил на gtsAPI. Можно добавить поле password в таблицу и можно будет ставить пароль. Но прочитать его нельзя. MODX кеш пароля выдаст.
У нас пароли юзеров храняться в текстовом файле у меня. Так нам удобнее и я думал сделать интерфейс отделу кадров, чтоб они могли поставить и прочитать пароль. То есть сохранить его плагином в extended (Лучше редактировать extended, а password менять плагином). Но пока не до этого и директору может не понравиться.
Кстати extended, то есть JSON поле gtsAPI уже может редактировать.
"fields":{
        "extended.pass":{
            "label":"Пароль",
            "type":"text"
        }
    }
Но типа поля password еще нет. Он мне еще не нужен был.
Как использовать плагины, наверно, не очень понятно. Надо описать триггеры. Думал попозже сделать.
Алексей Соин
25 ноября 2024, 07:30
0
тут в статье бОльшая часть притензий к vue и к тому как всё работает, мне кажется, изза того, что вещи какие требуется сделать используются не через те инструменты, то что надо пересобирать фронт например, если это так сложно ну возьми тогда htmx или реализуй фронт часть по аналогии с тем как сделали в laravel с их liwere.

про то что vue медленно отрисовывает данные в браузере, это вообще чтото новое, gitlab работает на vue2 и там ничего не тормозит, если на вашем проекте при выводе одной только формы начинаются тормоза, тут надо задуматься, правильно ли вы чтото делаете

про размеры бандлов, во первых никто не собирает единым бандлом, а разбивают на чанки, во вторых такого огромного размера бандл не будет если не подрубать на каждый чих стороннюю библиотеку

насчет того, что компонентов для работы с апи modx раньше небыло не совсем понял, про что имеется ввиду? апи можно было всегда сделать, достаточно загуглить rest api modx, или например через zoomx
Александр Туниеков
25 ноября 2024, 07:19
+1
думаю 100мс на инициализацию бекенда это очень много — что-то не так с хостингом, или что-то очень тяжелое прикручено в плагинах на события onmodxinit или где-то ещё по пути до рендеринга
Как-то пробовал разобраться почему так много, но не разобрался. Может потому, что сервер на винде. Надо будет еще пробовать разобраться. В 500мс время реакции приложения укладывается и это не парит. Но загрузка приложения в 1.62 секунды уже не хорошо. Хотя пользователи не ругаются. 1С, например, 2 минуты грузиться и 2 секунды для них не страшно :-).

HTMX встречал упоминания и читал их, но вникать и пробовать использовать еще не думал. UI-фреймворков для него вроде еще нет и пока для меня бесполезно.

Тоже интересно, для чего реально используешь @Александр Туниеков gtsAPI
Описал в ответе Артуру :-)

Не переписываешь ли потихоньку всю админку на формы VUE? ))
Временами подмывает переписать :-). Но в админке используются формы, попапы, таблицы, дерево и файл-менеджер. Дерево и файл-менеджер мне в работе (в нашей ERP) нужны, но их делать месяц два на каждый и пока все время откладывается.
Александр Туниеков
25 ноября 2024, 06:21
0
Вот форма с которую сейчас сдаю в работу. Расчет деталей вентиляции

Использую из PrimeVue DataTable, поля форм, Dialog, Tabs, Toast, Popover

И Drawer

Будет еще форма прикрепления документов (Отчет, Счет и т.д.) к расчету.

А PHP многопоточный? Думаю скорость ответа NodeJs не от этого высокая.
На ноде при запуске сервера можно большую часть проинициализировать. Например, прогрузить настройки, чанки и сниппеты в память и не лазить за ними в базу или диск при каждом запросе. Это я пробовал на ноде like MODX сделать, но потом понял, что чанков нет и архитектура js другая и забросил.

А ещё хотелось бы понять для кого и для чего компонент gtsAPI? Какие практические задачи ты с его помощью решаешь?
Основное — это быстро сделать табличный CRUD, а остальное уже подтягивается. CRUD есть и более сложные задачи уже проще используя уже сделанное АПИ делать.
Александр Туниеков
25 ноября 2024, 06:00
0
Спасибо за отзыв :-). Написал заметку и подумал, что получилась заметка какой-то странной. Даже думал публиковать или нет. Но интересно что другие думают поэтому опубликовал. Я работаю над проектами один и у меня с обратной связью плохо. Не знаю толи правильно делаю толи можно сделать проще :-(.
Дима Касаткин
25 ноября 2024, 00:09
0
Полностью согласен с недостатками реактивных фреймворков, описанных в заметке, думаю 100мс на инициализацию бекенда это очень много — что-то не так с хостингом, или что-то очень тяжелое прикручено в плагинах на события onmodxinit или где-то ещё по пути до рендеринга. Про то, что фронтенд-часть весит какие-то огромные мегабайты, я писал также в комментах под mmxForms — но в принципе, для какого-то функционала админа, или зарегистрированного пользователя.

У меня на проектах по 20-30мс на полный ответ сервера, без какого-то рокет-турбо-тюнинга (а с ним — быстрее, но сейчас не об этом).

Мне пока удаётся в большинстве проектов убегать от этих адских фроентенд-фреймворков. Надеюсь удастся полностью пережить их рассвет, встретить закат, и классно-здорово работать на набирающем популярность (снова) серверном рендеринге технологии HTMX, которая отлично ложится в концепцию того, как работает MODX, с чанками, крутыми шаблонизаторами и т.п.

P.S. Тоже интересно, для чего реально используешь @Александр Туниеков gtsAPI. Задумка интересная. Не переписываешь ли потихоньку всю админку на формы VUE? ))

Спасибо что делишься!
Артур Шевченко
24 ноября 2024, 21:06
0
Какие задачи ты решаешь с помощью Vue?

Например я так и не смог заставить себя освоить Vue, потому что не вижу куда могу применить эти знания.
Мне в работу попадают обычные интернет-магазины, сайты визитки, лэндинги для чего там может понадобится Vue не представляю.

Самый сложный с точки зрения интерфейса сайт это сайт-каталог образовательных программ, там довольно заковыристая форма оформления заказа. Но, учитывая то, как работает Modx (сниппеты, чанки, шаблоны), я для себя решил, что проще отправлять запросы на сервер и вставлять на страницу полученный от него html. На долю JS остаётся только отправка запроса, вставка html и открыть\закрыть модалку.

во вторых нода однопоточная
А PHP многопоточный? Думаю скорость ответа NodeJs не от этого высокая.

А ещё хотелось бы понять для кого и для чего компонент gtsAPI? Какие практические задачи ты с его помощью решаешь?
Максим
24 ноября 2024, 20:31
0
Правильный вариант из текущей документации такой:
{set $condition = 1}
{switch $condition}
{case 0, 1, 2}
    сработает
{case 5}
    не сработает
{/switch}
Алексей Соин
24 ноября 2024, 17:38
-2
сначала ещё хотел описать в чем автор не прав, но в целом получилось, что весь пост это набор какого-то бреда…
Stepan
24 ноября 2024, 13:55
0
ну тогда groupby и having
+ подгрузка не родных пакетов
есть?

еще я правильно понимаю что фильтрация и сортировка по умолчанию по всем полям?

$object->set('password',md5(date('d.m.Y H:i:s')));
как потом этим пользоваться?
Артур Шевченко
24 ноября 2024, 13:39
0
Моя кофейная гуща говорит о том, что это код html и там есть смайлики, а кодировка бд не utf8mb4.
Александр Туниеков
24 ноября 2024, 09:32
0
Привет не понятно где храниться код который ты добавляешь. И что за код. Рискну предположить, что у тебя обрезается код сниппетов. Сниппеты хранятся в базе и возможно длины поля не хратает под твои огромные сниппеты. По умолчанию в modx_site_snippets тип поля snippet MEDIUMTEXT. По идее для всего должно хватать О_О. Что за код у тебя? Объясни подробнее
А HTML код… В modx_site_content: content и в modx_site_htmlsnippets: snippet тоже MEDIUMTEXT…
Евгений
23 ноября 2024, 11:51
0
Отличное дополнение, спасибо!
Подскажите, как организовать файл если стоит msOptionsPrice2 привязан к опции size там может быть много позиций с разными ценами?
Алексей
23 ноября 2024, 00:42
0
Еще снова вернулась проблемка, после выбора способа доставки почтой РФ — появляется стоимость доставки, но она «прилипает» и не исчезает после переключение способа доставки на СдэкКурьер.
(а до переключения на почту, Сдэк курьер рассчитывает нормально) Неправильно что-то сделал.
<h2 class="border h1">{'ms2_deliveries'|lexicon}</h2>
[[!msRussianPost]]
[[!ms_CDEK2]]
<div id="ms_cdek2_status"></div>
Алексей
22 ноября 2024, 23:29
0
Помогите пожалуйста, с настройками напутал.

По msRussianPost в этом году примерно началось, возможно при установке 4.0.13-beta 2024-10-21.
При выборе города из выпадающего списка в ранее заполненное поле индекс подставляется Undified.
И сдэк компонент примерно также (Undified не ставится, просто заполненный индекс удаляет)


Есть 2 выпадающих списка городов с разным дизайном, один при выборе просто стирает индекс, надо вводить заново, а второй список подставляет Undified.

Включаю Автокомплит у Почты (Индекс Undified ставится)
Надо выбрать и включить только один из автокомплитов городов, так задумано?
Артур Шевченко
22 ноября 2024, 21:57
+1
Лучше деинсталировать и установить новую версию. Там полностью переписан JS.
Алексей
22 ноября 2024, 21:49
0
Здравствуйте. Компонент ms_Cdek2 вернули, ура! У меня 2.0.31-beta от 2022г.
Подскажите пожалуйста, его деинсталлировать или просто обновить до новой версии?
Дмитрий
22 ноября 2024, 19:55
0
Все исправилось, после замены на 'parents' => $_modx->resource.id
Дмитрий
22 ноября 2024, 19:53
0
Добрый вечер! Я в курсе, что вылетает ошибка, т.к. не заполнены поля у товара… он выдает что то такое… надо исправить )…