Всего 125 341 комментарий

Николай Савин
06 июля 2022, 07:52
0
Что там пилить. Генерируешь произвольную строку пользователю. Отдаешь на фронт.
Теперь фронт каждый раз при авторизации подписывает запросы токеном. На базе него происходит проверка прав и выдача ответа. В отличие от куки — токен можно быстро, массово отозвать, сменить и так далее.
Игорь
06 июля 2022, 07:16
0
«сохранять состояние можно в куки, в сессию или local storage» — зачем?
Все необходимые для работы программы параметры передаются в браузерной строке при переходе на следующую страницу.

«migx, как и в твоём варианте, будет просто интерфейсом редактирования» — да, просто интерфейс редактирования.

«не хватает описания практического применения» — квест является примером реализации.
Конечно же, есть определённые чанки для вывода HTML-блоков, которые размещаются в шаблоне (у меня — в одном шаблоне для всего квеста).

При размещении в шаблоне MODX при помощи formirfrommigx выведет HTML-блоки для основного экрана

[[*content]]
[[$formirfrommigx?&tipokna=`1`&nomerknigi=`0`]]
В окне для записной книжки

<!-- HTML-код модального окна -->
<div id="myModalzapis" class="modal fade">
  <div class="modal-dialog">
    <div class="modal-content">
      <!-- Заголовок модального окна -->
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">X</button>
        <h4 class="modal-title">Записная книжка</h4>
      </div>
      <!-- Основное содержимое модального окна -->
      <div class="modal-body">
[[$formirfrommigx?&tipokna=`3`&nomerknigi=`0`]]
[[$formirfrommigxinterf?&tipokna=`3`&tipinter=`3`&nomerknigi=`0`]]
    <hr>
      </div>
      <!-- Футер модального окна -->
      <div class="modal-footer">
        <button type="button" class="btn btn-default" data-dismiss="modal">Закрыть</button>
      </div>
    </div>
  </div>
</div>
[[$formirfrommigx?&tipokna=`3`&nomerknigi=`0`]] — вывести HTML-блоки для ЗАПИСНОЙ книжки именно на этой странице — в самом верху
[[$formirfrommigxinterf?&tipokna=`3`&tipinter=`3`&nomerknigi=`0`]] — вывести HTML-блоки для ЗАПИСНОЙ книжки для ВСЕХ страниц — глобальный интерфейс

чанк formirfrommigx

[[getImageList?
    &tvname=`sobit`
    &tpl=`formirscenariotpl`
    &where=`{"sobitie_tip:=":"[[+tipokna]]","sobitie_tip_int:<":"2"}`
    &prmnomerknigi=`[[+nomerknigi]]`
]]
tpl formirscenariotpl

[[!newformirpostuslovienew?&nomerknigi=`[[+property.prmnomerknigi]]`&imachunk=`formirscenariotc[[+sobitie_ssilkatip]]`&uslovieprov=`[[+sobitie_uslovie]]`
&sobitie_html=`[[+sobitie_html]]`
&sobitie_text=`[[+sobitie_text]]`
&sobitie_this_text=`[[+sobitie_this_text]]`
&sobitie_obrabotka=`[[+sobitie_obrabotka]]`
&sobitie_stranica=`[[+sobitie_stranica:is=`0`:then=`[[*id]]`:else=`[[!getmoiparamphp?&mp=`[[+sobitie_stranica]]`]]`]]`
&sobitie_ssilkatip=`[[+sobitie_ssilkatip]]`
&sobitie_kod=`[[+sobitie_kod]]`
&sobitie_uslovie_true=`[[+sobitie_uslovie_true]]`
&sobitie_uslovie_false=`[[+sobitie_uslovie_false]]`
&sobitie_obrabotka_true=`[[+sobitie_obrabotka_true]]`
&sobitie_obrabotka_false=`[[+sobitie_obrabotka_false]]`
&imiapar=`[[+imiapar]]`
&sobitie_dtext_ssilki=`[[+sobitie_dtext_ssilki:is=``:then=``:else=`[[+sobitie_dtext_ssilki]]`]]`
]]

«Только текстовые квесты?» — применяется там, где вывод страницы зависит от наличия (состояния значений) параметров.

Вместо текста — любой HTML-код (или я что-то не так понял?).

Пример с кучей параметров (пока игрок подошёл к дракону, он успел получить два заклинания, подсказку о наличии клада, волшебную флягу в три порции воды, кошелёк вместимостью в 50 монет, деньги — 35 золотых, почти бодрый и с «флагами» о прохождении определённых шагов — n1=1 — загадка короля решена — при встрече с единорогом это обыгрывается, n2=1 — игрок раскопал клад — в слухах в это обыгрывается)

maple4.ru/knigi/put-geroya/452-tryoxgolovyij-drakon/?&zklpolet=1&zklplav=1&dveberez=1&flg=1&flgzn=3&flgzntip=1&flgznpar=3&ksl=1&kslzn=35&kslznpar=50&ust=997&n1=1&n2=1

Можно открыть записную книжку или вещмешок для доп действий

ну, и без параметров
maple4.ru/knigi/put-geroya/452-tryoxgolovyij-drakon/
Артур Шевченко
06 июля 2022, 00:27
0
Допустим сохранять состояние можно в куки, в сессию или local storage. Что касается программирования, то если известен алгоритм, можно написать универсальный скрипт, который будет уметь работать с любыми параметрами, а migx, как и в твоём варианте, будет просто интерфейсом редактирования. Я думаю, что нужно оптимизировать, пока, лично для меня, логика работы до конца не ясна. Ещё не хватает описания практического применения. Только текстовые квесты? А на них есть спрос?
Игорь
06 июля 2022, 00:02
0
Представим ситуацию — я НЕ хочу (или не могу) напрямую работать с параметрами (да и самим PHP), тем более, начиная проект, я ещё НЕ ЗНАЮ, какие параметры мне понадобятся.

Я знаю, что HTML страница, уже как ИГРОВОЙ элемент, состоит из, собственно, самой страницы ПЛЮС параметры.

Сама страница — это просто шаблон.
Я же в MODX (поле MIGX) размещаю HTML-блоки, условия их показа на странице и отработку кликов (нажатий) по ссылкам/кнопкам/формам, НЕ КОДИРУЯ в PHP напрямую — в рисунке ВЫШЕ был пример — рекомендую открыть в новом окне.

Нужен мне какой-то параметр — в РОДИТЕЛЬСКОЙ странице (поле MIGX в MODX) его добавляю, а потом использую там, где НАДО (при помощи условий, опять же в поле MIGX в MODX).

Ну и самое главное — параметры при переходе на новую страницу не «теряются», если они НЕ РАВНЫ нулю.
Игорь
05 июля 2022, 23:36
0
Делая квест я НЕ ЗНАЛ, чем он закончится, какие параметры мне понадобятся и т.д.

Открывая новую страницу, бумажную версию квеста, вижу «Вы находите амулет со звездой, если понадобится — добавьте 5 к номеру страницы».

Ок, ТУТ же, в MODX, добавляю ИГРОВОЙ объект amlzvz

В MODX добавляю реакцию на получение амулета и его потерю (а вдруг его отберут?), отображение в малом интерфейсе на главном экране и в модальном окне — НЕ ЗАНИМАЯСЬ напрямую непосредственно кодированием кода PHP, прописывая только условия отображения на экране или том же модальном окне.
Мне это НЕ ИНТЕРЕСНО, у меня есть HTML-код, который я должен вывести.
И «забываю» об амулете.

Потом, в процессе прохождения квеста (точнее — последовательного переноса каждой бумажной страницы в электронный вариант), я вижу такое:

«Вы заходите в комнату с изображением звезды»

Ок, я понимаю, что должен «воспользоваться» амулетом, поэтому в Вещмешке добавляю ИМЕННО НА ЭТОЙ странице добавляю кнопку «Использовать амулет звезды» — опять же, в MODX, никакого кодирования напрямую в PHP — и для кнопки задаю действие — что должно произойти при использовании амулета (скорее всего — переход на новую страницу с новыми параметрами).

ВСЁ. Я НЕ РАБОТАЮ напрямую с параметрами из строки браузера, не объявляю переменных PHP, я всего лишь проверяю условия срабатывания и изменение при использовании.

Могу ради интереса прямо сейчас добавить куда-то объект и реакцию на его использование :)
Павел Бигель
05 июля 2022, 22:56
+1
Отличительная особенность MODX сообщества заключается в том, что ребята изобретают такие велосипеды, от которых волосы на голове начинают выпадать.

Откинем вообще код, архитектурные «особенности» проекта и т.д т.п

Возьмем первоначальную задачу — «удобная работа с URL параметрами из под MODX»

Преположим, что логика работы игры вынесена в сервисы и остается только работать с URL параметрами.

Я просто оставлю этот тут
www.php.net/manual/en/function.parse-str.php
Артур Шевченко
05 июля 2022, 22:52
0
Эх… вот бы кто-нибудь статейку с примером запилил)))
Николай Савин
05 июля 2022, 22:31
0
Согласен работа с токенами — самый простой и достаточно надежный способ авторизации через API
Его очень легко реализовать для MODX.
Максим
05 июля 2022, 20:19
0
Я бы выбрал JWT. А вообще рекомендую посмотреть реализациюэтого пакета
Ну и не забудьте прочитать описание предварительно, что бы понять что это и для чего.
Евгений Лазарев
05 июля 2022, 20:15
0
Авторизация для каждого из приложений кто захочет воспользоваться rest дабы дать возможность с ним взаимодействовать только определённым.
Максим
05 июля 2022, 20:05
0
Что значит защитить? Нужно немного подробностей…
Станислав
05 июля 2022, 16:56
0
Понял. Значит мы оба нашли разные рабочие решения вопроса.
Александр
05 июля 2022, 16:50
0
Ожидается ли поддержка php 8?
Дмитрий Танцирев
05 июля 2022, 15:40
+1
Если ответ (единица) приходит именно числом — то моё решение работать не будет =)
Оно работает только если ответ приходит текстом.

submitOnValue — взял не с потолка =) если что))

github.com/modxcms/revolution/blob/v2.8.4-pl/manager/assets/modext/util/utilities.js#L567
Станислав
05 июля 2022, 15:34
0
Замечу, что и в самой БД эти поля должны быть tinyint(1), к слову ваше решение у меня не показывает галочки, а без него — показывает :-) Это как бы странно, но если у вас работает и вам помогло — то хорошо.
Специально создал новый xcheckbox, при даже просто типе поля int в map.class и в БД — значение 1 отправляет, но галочки нет. Tinyint в map и в самой БД — отправляет и открывает с галочкой.
Я прошу прощения, что отвечаю спустя практически 2 недели. Забыл про оповещение с форума
Alex
05 июля 2022, 13:35
0
Я, видимо, не до конца понятно выразился.
Я об этом и писал, только последнее предложение в моём комментарии немного вводит в заблуждение.
Надо написать: при первом взгляде на фото, я тоже сначала не понял, когда это было?
Константин
05 июля 2022, 11:58
1
0
Спасибо, почему-то пропал автоинкремент и у новых шаблонов id=0
Решил запросом ALTER TABLE modx_site_templates MODIFY COLUMN id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST
Дмитрий Танцирев
05 июля 2022, 11:50
0
Установите данный пакет: modx.com/extras/package/seosuite
Увидите =)

Данный пакет — объединил в себе два старых пакета: SEO Tab и SEO Pro

Если же у вас стоят SEO Tab и SEO Pro — то там «старый» вид.
Alex
05 июля 2022, 11:45
0
Автор имел ввиду, что было после установки дополнения и стало после того как он навёл красоту.
Я тоже сначала не понял, когда же так было? :-)