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

Наумов Алексей
26 ноября 2024, 15:41
0
Параметр sortby сортирует по полю в базе. У вас в базе нет поля «pagetitle:getSurname», есть только «pagetitle».

Я бы предложил фамилию записать в отдельное поле и без проблем по ней сортировать.
Серый
26 ноября 2024, 15:21
0
Либо еще вариант — это написать сниппет, которому отдаем список родителей, а он из них делает список id отсортированный по фамилиям, то есть той части pagetitle, которая идёт после тега br.
Но сам не сдюжу, прошу помочь.
Даниил
26 ноября 2024, 13:01
0
Забыл написать версия modx 3.0.5
И сама форма
<form data-si-form="FormSlider" data-si-preset="slider_form" data-si-event="submit" data-si-nosave>
    <label>
        <input type="text" name="name" placeholder="Полное имя">
        <p data-si-error="name"></p>
    </label>
    <label>
        <input type="text" name="email" placeholder="Email">
        <p data-si-error="email"></p>
    </label>
    <label>
        <input type="tel" name="phone" placeholder="+7(">
        <p data-si-error="phone"></p>
    </label>
    <label for="politics">
        <input type="checkbox" name="politics" id="politics">
        Я на всё согласен!
    </label>
    <button type="submit">Отправить</button>
</form>






Я на всё согласен!

Отправить
Даниил
26 ноября 2024, 12:16
0
Аналогичная проблема пишет «Невалидный токен»
Версия бд
Apache:
2.4.55
Панель управления Beget MySQL:
5.7.21-20-beget
Панель управления Beget Nginx:
1.21.1
Панель управления Beget Perl:
5.14.2
Панель управления Beget PHP:
8.3
Панель управления Beget Python:
2.7.3

Вот что в консоли
{"success":false,"message":"\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0439 \u0442\u043e\u043a\u0435\u043d.","data":{"successMessage":"\u0424\u043e\u0440\u043c\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0430!","hooks":"FormItSaveForm,email","emailTpl":"siDefaultEmail","emailFrom":"noreply@complab59.ru","formName":"SimpleForm","emailSubject":"\u041f\u0438\u0441\u044c\u043c\u043e \u0441 \u0441\u0430\u0439\u0442\u0430 complab59.ru","validate":"email:email:required,name:required,politics:required","sendGoal":"0","counterId":""}}
{success: false, message: "Невалидный токен.",…}
data
: 
{successMessage: "Форма отправлена!", hooks: "FormItSaveForm,email", emailTpl: "siDefaultEmail",…}
counterId
: 
""
emailFrom
: 
"noreply@complab59.ru"
emailSubject
: 
"Письмо с сайта complab59.ru"
emailTpl
: 
"siDefaultEmail"
formName
: 
"SimpleForm"
hooks
: 
"FormItSaveForm,email"
sendGoal
: 
"0"
successMessage
: 
"Форма отправлена!"
validate
: 
"email:email:required,name:required,politics:required"
message
: 
"Невалидный токен."
success
: 
false
Вот чанк

{'RenderForm' | snippet: [
'tpl' => 'FormSlider',
'presetName' => 'slider_form',
'extends' => 'default',
'hooks' => 'FormItSaveForm,email',
'redirectTo' => 0,
'redirectTimeout' => 3000,
'clearFieldsOnSuccess' => 1,
'fieldNames' => 'name==Имя,phone==Телефон,email==Почта',
'validate' => 'phone:required,age:required,name:required,email:email:required,politics:checkbox:required',
'successMessage' => 'Форма отправлена!',
'validationErrorMessage' => 'Исправьте ошибки!'
]}

вот форма







Я на всё согласен!

Отправить
Stepan
26 ноября 2024, 09:34
0
В критерия должны передаваться параметры where это все что можно передать
т.е.
возможно только так
$criteria = array(
    "article:LIKE => "%{$qwery}%"
);
$modx->removeCollection('you_class', $criteria);
AM
AM
25 ноября 2024, 22:34
0
Вдруг кому понадобится… Прописать TV параметр в источнике файлов для MIGX можно так (для примера TV `ln`):

[[!migxResourceMediaPath? &pathTpl=`assets/resourceimages/{tv_value}/` &tvname=`ln` &createFolder=`1` ]]
Sergey (Sentinel)
25 ноября 2024, 21:01
0
Привет
Подскажи, пжл как добавить поля из компонента msFieldsmanager?
Скрин
Николай Савин
25 ноября 2024, 19:10
0
но их делать месяц два на каждый
Это ж есть все в PrimeVue. Нужно только адаптировать и написать коннекторы к PHP
Futuris
25 ноября 2024, 17:22
0
Слабовато в этом все понимаю, но все равно интересно) А VESP Васи Безумкина не рассматривал для решения подобных задач? Там все вроде есть нужное, и авторизация и VUE и т.д.
Александр Туниеков
25 ноября 2024, 13:39
0
интересно, а не быстрее ли было бы перенести весь сайт с требуемым функционалом на пхп фреймворк…
врядли. gtsAPI 2000 строк. А весь сайт 20 компонентов по 1000-2000 строк
Александр Туниеков
25 ноября 2024, 13:37
0
также, раз используется библиотека primeVue нужно посмотреть, компоненты из этой библиотеки грузятся в приложение все или только те что используются
Какие указал те и грузятся вроде. И ядро primeVue. Ладно это сейчас не интересно. Думаю то что нужно то и грузится.
ну тут скорее проблема в том, что данный подход пытается добавить в изначально устаревший подход разработки с modx чтото новое и удобное, изза этого и выходят трудности о необходимости пересборки, ошибок и тд.
Трудности есть везде. Например в Nuxt модуль Auth еще на стадии бета. А с авторизацией не хочется возится. Вроде и базовая вещь, но правильно спрограмировать сложно. Авторизация, группы MODX вполне устраивают.
Александр Туниеков
25 ноября 2024, 13:24
0
во вью можно делать отложенные импорты компонентов
Понятно думал есть что получше.
Алексей Соин
25 ноября 2024, 11:48
0
gtsAPI и PVTables заняло год и то все что хочелось не реализованно
интересно, а не быстрее ли было бы перенести весь сайт с требуемым функционалом на пхп фреймворк…
Алексей Соин
25 ноября 2024, 11:44
0
ну тут скорее проблема в том, что данный подход пытается добавить в изначально устаревший подход разработки с modx чтото новое и удобное, изза этого и выходят трудности о необходимости пересборки, ошибок и тд.

А зачем вообще разбивают на чанки? В SPA все равно же все грузиться сразу или я что-то еще не разобрался…
во вью можно делать отложенные импорты компонентов, допустим у тебя модальное окно редактирования вызывается только после нажатия на кнопку редактирования, то и нет смысла его грузить заранее, а лучше это делать по мере надобности.

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

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

Ачто там есть АПИ в первый раз слышу.
modzone.ru/blog/2021/02/04/zoomx-2.0-controllers-resful-api/
Александр Туниеков
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) нужны, но их делать месяц два на каждый и пока все время откладывается.