Николай Ланец
9 нояб. 2018 г., 15:26

Измененная версия modxclub.ru на prisma-cms, пока что еще в связке с MODX

Всем привет!

Недавно я писал про свою новую наработку - prisma-cms.

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

Уточню: основная часть сайта по-прежнему работает на MODX. Но рендеринг страниц уже полностью оторван от него и работает самостоятельно. Все данные для рендеринга подтягиваются по API. Вот API как раз и обеспечивает prisma-cms. Для этого к ней был написан модуль для работы с MySQL напрямую. Это сделано по причине того, что сам по себе MODX имеет очень ограниченные возможности для реализации API. Да, есть коннекторы и процессоры. Но попробуйте, к примеру, из коробки получить список пользователей и список ресурсов, да еще и с сортировкой и фильтрацией, а плюс к этому выдавать не все поля, а только определенные. Я более того скажу, без авторизации вы вообще не сможете ничего такого получить. Вот поэтому и пришлось писать модуль для прямого доступа к БД. Если интересно, вот этот модуль: https://github.com/prisma-cms/boilerplate-modx/blob/master/src/server/modules/modx/db.js

А для работы самого modxclub.ru был дописан расширяющий его модуль для работы с конкретными таблицами https://github.com/MODX-Club/modxclub.ru/blob/master/src/server/modules/modxclub/db.mjs

Да, в этом модуле много строк. Но, во-первых, его еще можно значительно оптимизировать, а во-вторых, это как раз показывает, почему эффективней использовать чистую prisma, ведь в случае с ней не приходится все это писать :)

Ну а для того, чтобы все это заработало, вот такой скрипт сервера написан: https://github.com/prisma-cms/boilerplate-modx/blob/master/src/server/index.js
Для сравнения, в базовой версии @prisma-cms/boilerplate этот же скрипт выглядит вот так: https://github.com/prisma-cms/boilerplate/blob/master/src/server/index.mjs

Но работа всего этого не ограничивается только прямыми запросами в базу данных. Некоторые функции выполняются непосредственно с MODX, такие как регистрация, авторизация, создание и редактирование топиков и комментариев и прочие функции. То есть запрос приходит по API на призму, оттуда, если это прописано в резолвере, запрос шлется на MODX, приходит ответ и формируется окончательный ответ вовне.

Вывод: на базе prisma-cms можно не только создавать проекты в рамках заданной концепции, но и взаимодействовать с другими работающими системами, и не только с MODX. Это вполне может работать и с Bitrix, к примеру. Есть у меня и модули для работы с другими сервисами. В этом вся и прелесть, что послав по API всего один запрос, ответ может формироваться при взаимодействии сразу с несколькими сторонними сервисами (каждый из которых, в свою очередь может так же взаимодействовать с другими сервисами). Это очень мощный инструмент для разработки распределенных систем.

Вы можете и сами попробовать поиграться с запросами. Вот API-страница: https://api.modxclub.ru

Для примера предлагаю выполнить вот такой запрос:
query users { usersConnection( first: 10 skip: 0 orderBy:username_ASC where:{ # username:"Fi1osof" Projects_some:{ id_not: null } } ){ aggregate{ count } edges{ node{ ...user } } } } fragment user on User{ ...userFields Projects( first: 3 ){ id status Project{ id name url Members{ User{ ...userFields } Services{ id name } } } } Resources( first: 3 where:{ published: true } ){ id pagetitle: name uri template } } fragment userFields on User{ id username fullname }
Вы получите список пользователей, проекты, в которых они участвуют, список других участников в их проектах (и какую услугу по ним указывали), а так же созданные ими ресурсы. Можете еще раскомментировать условие и прописать юзернейм любого пользователя. Ну и вообще можете всяко с запросами поиграться.

Или вот еще пример, список комментариев, кто их создал, в каких топиках они написаны и кто эти топики создал:
{ comments:resources( orderBy: createdAt_DESC first: 10 skip: 0 where:{ type:"Comment" } ) { id contentText CreatedBy { id username fullname } CommentTarget { id name uri CreatedBy { id username fullname } rating positiveVotesCount negativeVotesCount neutralVotesCount } } }
Полученные таким образом данные можно уже выводить где угодно. В этом и суть headless-cms: не суть что и как там крутится на сервере. Главное - возможность самому сформировать запрос из возможных вариантов, получить данные и вывести уже где и как хочется. Согласитесь, не плохо было бы, к примеру, выводить в своем личном блоге все написанные собой здесь топики и комментарии. Собственно, так в дальнейшем и будет развиваться MODX-Клуб: весь контент и ПО будет общедоступным. То есть каждый желающий сможет на своем домене разместить копию MODX-Клуба, если ему это хочется, или взять отдельные его части для разработки собственного ресурса. И каждый при желании сможет внести вклад в развитие, к примеру, дописав какие-нибудь интерфейсы (об этом будет более подробно позже, есть специальные заготовки и методики, но их еще надо будет расписать).

И в заключение: исходный код сайта лежит здесь: https://github.com/MODX-Club/modxclub.ru
Но пока не получится у себя его развернуть и заставить работать, просто потому что для этого требуется прямой доступ к базе данных, которого, по понятным причинам, я не могу дать. И это еще одна причина окончательно переписать modxclub.ru на prisma-cms, полностью оторвав его от MODX. Другие причины, в основном, связаны с тем, что в связке с MODX приходится слишком много костылей лепить и разработка простейших вещей превращается в кошмар.

Тем не менее modxclub.ru не перестанет быть MODX-Клубом. Здесь по-прежнему к месту любые вопросы по MODX, а так же будет введено довольно много полезных плюшек для более быстрого поиска информации по базу, личному структурированию и хранению этой информации. Плюс к этому MODX - это по большей степени все-таки только бэкэнд. Фронт по-прежнему на совести конечного разработчика (особенно когда дело касается с javascript). Так вот на этой технологии можно строить не только комплексные проекты, но и отдельные интерфейсы для готовых сайтов, конечно же, в том числе и на MODX. Это может быть личный кабинет, сложная форма заказа, различные анимационные элементы страниц и т.п. Так что, я думаю, MODX-сообщество останется только в выигрыше.

UPD: Приведенные в статье запросы актуализированы для текущего сайта MODX-Клуба, а не старой версии в связке с MODX.
Оставлю первый коммент.

Это действительно КРУТО!!!

Может это и не конструктивный комментарий, но уж точно он от души :)
Кстати, обратите внимание, что весь JS этого сайта - 346 kB в сжатом виде.
Мне нравится безумная скорость работы! Вот бы внешний вид и фишечки разные намудрить ещё))
Ну вот скоро вы и сможете всякие фишечки добавлять))
Николай, скажи, а ты мобильные приложения на JS не писал? Я слышал, что есть возможность на React их писать. Может у тебя есть инфа/опыт, которым ты мог бы поделиться?)
Да, писал. Технология называется React Native. А вот это все написано на React. Правда много общего в названиях? Если правильно планировать логику и визуализацию, то сайт с вполне вменяемыми усилиями может быть портирован на мобильник. При чем если качественно поплясать с бубном, установочный приложения будет весить всего 12+ МБ и работать даже на Андрюше 4.1+.
Но цикл этих статей будет позже. Пока есть другие более важные задачи.
По поводу мобильных приложений.
Вот статья https://blog.bitsrc.io/how-to-react-native-web-app-a-happy-struggle-aea7906f4903 - тут приводится одно из решений, как объединить код из веб-приложений и мобильных приложений. Т.е. использовать один и тот же код в разных случаях.

Понятное дело, это "велосипед". Но пока так...

Думаю, на Хабре можно поискать перевод статьи.

Саша, за статью спасибо. Но там столько подводных камней, что просто ппц. К примеру, раньше для быстрого старта предлагался https://github.com/react-community/create-react-native-app , по аналогии с create-react-app. Сейчас же этот репозиторий заморозили и предлагается https://github.com/expo/expo-cli
Expo отлично подходит для веб-разработки, НО! С августа гугл поднял планку по минимальной таргет-версии SDK. https://developer.android.com/distribute/best-practices/develop/target-sdk
И знаешь в чем прикол? В том, что Экспо просто не поддерживала его. Там получался замкнутый круг: если обновляешь SDK, Экспо не работает, а если даунгрейд, то просто нельзя залить итоговое приложение в маркетплейс. В итоге пришлось несколько дней потратить на то, чтобы научиться собирать React Native приложение средствами Android Studio без всяких там Экспо и т.п. Но результат порадовал. Приложение, собранное Экспой, весило 36 метров и ппк как тормозило, то есть так, что даже на Note-4 страница начинала отвечать только через минуту в прямом смысле. После того, как собрал на студио, как я и говорил, приложение весило всего 12 метров и отлично запускалось и работало даже на старом LG 500 (по-моему так модель, ей несколько лет, год она просто в ящике провалялась, и там Андроид 4.4). И это при том, что старая лыжа была заменена по причине того, что практически на всех приложениях уже тормозила.
К сожалению, вы не сможете потестировать то приложение, потому что оно для системы пропусков в бизнес-центре, и там надо логин-пароль получать в администрации, самостоятельно не зарегаться, но скоро появится приложение для modxclub.ru и исходники и инструкции выложу.
А так, все это реально очень сложно. И к слову, про статьи на хабре. Как правило да, это во-первых, перевод, во-вторых, чаще всего очень запоздалый. Сейчас темпы развития таковы, что не редко счет действительно на часы идет. Не редко, заходя на гитхаб в поисках ответа на возникшую ошибку, узнаешь, что причина появилась всего несколько часов назад в связи с какими-нибудь обновлениями. Обновления бывают мелкие и устраняются легко своими силами или подождать день-два, а бывает что-то глобальное, как появление babel-7, много что полетело, и тот же react-scripts-2 идет с его поддержкой, но долгое время еще react-scripts-1 шел основной веткой, потому что не было у них обратной совместимости, а 1-ую версию перевести на babel-7 было нереально.
Или посмотрите вот на эту ветку: https://github.com/facebook/jest/issues/2441
Фейсбук два года уже не может закрыть тикет на вывод отладочных сообщений в асинхронных методах. Два года, Карл! Я не знаю занимаетесь ли тестами вы, а я в последнее время довольно плотно ими занимаюсь (а иначе практически нереально за ночь переписать хоть и маленькую, но социальную сеть) так, чтобы было минимум ошибок и максимум обратной совместимости. Так вот, вот этот их баг - полнейший АДъ! У тебя просто в отдельных моментах отсутствует какая-либо отладка.
А вот это? https://github.com/facebook/jest/issues/4842 Тоже год уже не могут закрыть. Вот, к примеру, к прочтению: https://habr.com/company/tuturu/blog/326716/
Часть коммента скушалась... Еще один минус в костыльности связки...

Если коротко, то можно писать JS-модули без всяких там бабелей и т.п., и даже загружать их в браузер и уже на стороне браузера использовать как модули (прописав < script type="module" src="..." />). Но хотя практически всеми современными браузерами это поддерживается, общая экосистема еще не выстроилась, в основном из-за того, что из .mjs нельзя просто так вызвать модули ил .js и наоборот :) А плюс к этому еще и тесты ломаются. То есть тот же jest, на тикет которого я привел ссылку, просто не поддерживает тестирование .mjs. По этой причине пришлось мигрировать с jest на mocha.
Вот такая фигня. Это, считай, краткое повествование одной рабочей недели. Подобных примеров так много, что я мог бы несколько статей полноценных написать.
Я это все к тому, что с такими темпами, полагаться на переводы - утопия. Хочешь или нет, а надо изучать хотя бы технический английский и прописываться на забугорных ресурсах. Иначе просто никак.

А на днях решил реанимировать сайт на js, который не трогал 3 месяца. И знаете что? Он не запустился :) За три месяца на этом сайте более трех десятков компонентов обновилось, часть из которых не имела обратной совместимости. То есть в современном вебе 3 месяца - то вполне реальный срок, чтобы выпасть из общего потока, и даже если не обновляться и поддерживать работу просто в первоначальном виде, скорее всего новые плюшки на него натягивать не получится просто из-за того, что новые компоненты будут требовать более свежие версии, чем те, что установлены на сайте. Но это в случае, если вы пишете сайт полностью сами. Сейчас же я свои сайты все перевожу на prisma-cms и таких проблем стало во многие разы меньше, так как если хоть на одном сайте выявляется неподдержка чего-либо на уровне ядра, обновляется ядро, выливается свежая версия в сеть, а на конечных сайтах просто выполняешь обновление зависимостей и все, "едем дальше, видим мост". Тут уже сосредотачиваешься только на своих конечных компонентах.

Сорри за много буков...
Полностью согласен насчет переводов. Упоминание про перевод на Хабре привел лишь для того, чтобы те, кому буржуйский язык пока не ведом, хотя бы общий смысл статьи приняли.

А подводных камней в статье я тоже насчитал немало. Потому и сказал, что это, в целом, велосипед. Просто был коммент про мобильную разработку, а я как раз на днях эту статью прочел. Вот и привел.

Думаю, пытливые умы не перестают биться над тем, чтобы свести мобильную и веб разработку в русло одного какого-то инструмента. Решения постоянно появляются (нередко для того, чтобы "заморозиться" через некоторое время).

Например, вот проект Jasonette (http://jasonette.com). В общем и целом, этот инструмент придуман для создания мобильного приложения на базе веб-проекта, который уже существует.
Т.е. разрабатывать мобильное приложение, задействующее нативные возможности мобильных платформ и одновременно включающее материалы работающего сайта, а также локальные ресурсы.

У меня самого руки пока не дошли до опыта я этим инструментом, но подозреваю, что нюансы будут и тут. Хотя бы потому, что предполагаю, что не каждый сайт получится без усилий преобразовать в мобильное приложение. Разве что облегчить работу.
Столкнувшись со всем этим непосредственно, не верю, что какие-то небольшие компании могут создать серьезный продукт такой направленности. Поэтому кроме React Native ничего всерьез больше не воспринимаю пока. Чисто только как энтузиазм и источник идей. Коммерческий проект не стал бы на таком делать.
Ну а вообще, советую многим воздержаться от выхода на эту дорожку. Слишком она скользкая. Гораздо перспективней PWA https://habr.com/post/418923/ . Пока это еще не стандарт, но, считаю, эту очень перспективный и быстроразвивающийся рынок.

Спасибо, было интересно почитать мнения!
P.S. Николай, а мог бы ты отписать моё мыло от уведомлений на комменты? А то столько писем на мыло прилетело)
Сегодня, думаю, доделаю уже обновленную версию и выложу, там опять появится возможность управлять своими настройками уведомлений. Сейчас удалю, после этого коммента.
Прощу прощения, хотел бы задать вопрос, но не знаю, как тут топик создать?
Грядет смена глобальная, поэтому многий функционал пока скрыт. Вот прямая ссылка: https://modxclub.ru/add-topic.html
Через несколько часов все модификацию будут отключены, поэтому не затягивайте.
Стоит ли вообще тогда "задерживаться" с MODX? Вполне вероятен прогресс с более эффективными и качественными системами, и вот уже призма-цмс дает такие шансы так сказать, ну или вернее показывает что направления развития имеются и не стоит "цепляться" за модикс.
Сергей, лично я за MODX цепляться не буду. Все верно, нет никакого смысла. Но не все сразу так сделают, это слишком рискованно. Я два года на это потратил и еще даже не в середине пути. А что говорить об остальных? Конечно наверняка есть еще те, кто идет в этом направлении, но я уверен, их очень и очень мало. Так что логично, что большинство все еще будет в основной деятельности на MODX опираться. Это логично. Но MODX-Клуб "цепляться" будет только в плане информации. Здесь много полезного материала уже есть. Плюс задача стоит в том, чтобы обеспечить более удобное пространство для обмена этим опытом. А JS-плюшки всякие будут сначала для игр и обучения, а вот потом, постепенно, может народ начнет переходить окончательно на JS. Это процесс даже не нескольких месяцев.
Предполагал, что тема исчерпана и не хотел писать здесь, но все же на коммент Коли решил таки вставить свои пять копеек.

Безусловно, Коля справедливо отметил, что очень много людей будут придерживаться еще какое-то время устоявшихся методов работы конкретно с MODX. И это говорит лишь об одном - это хорошая и качественная платформа. Для своих целей.

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

Даже в том же MODX методы работы, которые какое-то время назад активно продвигал Коля, все же не нашли отклика как хотелось бы. Мне вот методы и инструменты, которые им разработаны, пришлись по душе и я буду ими активно пользоваться, пока будет спрос. А также в меру сил разрабатывать сам.
Рад, что есть взаимопонимание и общее видение ситуации. Но немного еще добавлю информации, к слову.
Так вот, к слову о некоторых моих наработках, которые кому-то все же пришлись по душе, хоть и не всем. Там, где они были использованы, они продолжают работать, даже если были встроены несколько лет назад. Особый пример: https://www.radimax.ru/ Это второй сайт, где я использовал Smarty (первый был моим личным проектом и давно уже канул в лету). На нем же развивался modxSite со своего первоначального вида. И хотя сайт пережил несколько глобальных апгрейдов, заложенная в него основа все еще работает.

modxclub.ru последние часы отживает на тех еще технологиях. И хотя он уже наполовину JS-овый, основное ядро все еще на modxSite, хоть уже и без Smarty.

А недавно вот помогал с обновлением shopModx https://modxclub.ru/topics/shopmodx-oshibki-v-rabote-magazina-pri-obnovlenii-s-versii-2.2.10-na-2.6.5-2806.html
Обновился MODX с версии 2.2.10, а это, на минуточку, релиз от 07.10.2013 :) https://modx.com/download/other-versions?releaseKey=revolution-2.2.10-pl
На обновление я потратил меньше часа, просто обновил пакеты, пару контроллеров подправил и все. И магазин дальше поехал работать (к слову, поломались только некоторые функции в админке из-за глобальных изменений ее на уровне MODX, а во фронте работало все, кроме одного Ajax-запроса).

Это все не может не радовать. Но знаете в чем прикол? В том, что за два дня я переписал все это на JS, то есть блоги, топики, комментарии, рейтинги, авторизацию-регистрацию и т.п., а так же дописываю импортер для переноса старых данных в новую базу. И еще различные плюшки накидал.

Вот немного скринов:

Когда накачу обновления, сможете это погонять самостоятельно.

Так к чему я это? Надежные проверенные технологии это конечно хорошо. Но в наше время немаловажна скорость разработки и совместимость с чужими технологиями. За два дня я столько вещей с нуля написал, столько всяких вариантов испробовал, что на MODX я это делал бы не один месяц. Я серьезно. Чего только стоит работа с базой данных. Попробуйте в MODX поставить несколько компонентов, которые под себя создают таблицы с одинаковыми названиями, и быть уверенными, что все правильно поставилось, и нет нигде логических ошибок в базе данных.

У меня мало того, что схема легко редактируется и при деплое происходит автоматическое изменение структуры базы данных, так еще и тесты можно писать на проверку необходимых полей. К примеру, вот так выглядит результат успешного выполнения теста:
✓ modxclub Verify prisma SchemaCheck type "Route"Check type "User"Check type "Resource"Check type "Tag"Check type "ResourceTag"Check type "Vote"Check type "Import"Check type "Log" modxclub Verify API SchemaCheck type "Route"Check type "User"Check type "Resource"Check type "Tag"Check type "ResourceTag"Check type "Vote"Check type "Import"Check type "Log"


А вот так с ошибками:
Verify prisma SchemaCheck type "Query"Check type "TestUser" Verify API SchemaCheck type "Query"Check type "TestUser" modxclub Verify prisma SchemaCheck type "Import"Check type "Log"Check type "User" 1) Check type "Resource" modxclub Verify API SchemaCheck type "Import"Check type "Log"Check type "User" 2) Check type "Resource" 10 passing (11ms) 2 failing 1) modxclub Verify prisma Schema Check type "Resource": Error: the string "Can not find field Resource:template" was thrown, throw an Error :) 2) modxclub Verify API Schema Check type "Resource": Error: the string "Can not find field Resource:published" was thrown, throw an Error :)

Так что, я думаю, в будущее надо смотреть обязательно.

UPD: вот гляньте, подключил 4 модуля к проекту и выполнил деплой схемы в БД:

Подключение модулей выглядит вот так:

import UserModule from "@prisma-cms/user-module"; import ResourceModule from "@prisma-cms/resource-module"; import SocietyModule from "@prisma-cms/society-module"; // ... this.mergeModules([ SocietyModule, UserModule, ResourceModule, ]);
После этого в консоли выполняем PORT=4001 endpoint=$endpoint yarn deploy
и все, получаем результат. В данном случае было создано несколько таблиц и связей между ними. При чем если подобные схемы уже были, они просто дополнили друг друга и все.

UPD2: А еще радует очень то, что при попытке деплоя, если удаляются какие-то колонки или таблицы и есть данные, которые при этом будут утеряны, деплой завершается с ошибкой, то есть вероятность потери данных при этом исключается.
Все, импорт прошел успешно :)
{ "data": { "startImportProcessor": { "success": true, "message": "", "errors": [], "data": { "id": "cjodrhwegbp8q0850k7n6x2a4", "createdAt": "2018-11-12T03:42:18.952Z", "updatedAt": "2018-11-12T03:47:07.834Z", "name": "Импорт со старого сайта", "status": "Completed", "CreatedBy": null, "Logs": [ { "id": "cjodrhwjybp8x0850m230niby", "level": "Info", "objectType": "Import", "message": "Было получено 3567 пользователей", "stack": null }, { "id": "cjodrj8s7bxib0850w1980w3w", "level": "Info", "objectType": "Import", "message": "Записано: 3567, пропущено: 0, ошибок: 0", "stack": null }, { "id": "cjodrj8sxbxij0850gbp8sckf", "level": "Info", "objectType": "Import", "message": "Было получено 42 блогов", "stack": null }, { "id": "cjodrj9labxnb08508c1gfcee", "level": "Info", "objectType": "Import", "message": "Записано: 42, пропущено: 0, ошибок: 0", "stack": null }, { "id": "cjodrj9nkbxnj0850xj09epwc", "level": "Info", "objectType": "Import", "message": "Было получено 1169 топиков", "stack": null }, { "id": "cjodrk6cxc2610850yfujjbrp", "level": "Info", "objectType": "Import", "message": "Записано: 1169, пропущено: 0, ошибок: 0", "stack": null }, { "id": "cjodrk6kuc2690850c270wz6b", "level": "Info", "objectType": "Import", "message": "Было получено 8032 комментариев", "stack": null }, { "id": "cjodro3akcx8b0850g4wv3bn3", "level": "Info", "objectType": "Import", "message": "Записано: 8032, пропущено: 0, ошибок: 0", "stack": null } ] } } } }
Меньше 5 минут. Блоги, топики, комменты, 9243 документа. И 3567 пользователей. Это при том, что для многих топиков и комментариев еще тексты из обычного текста конвертировались в draft-js. Красота! :)

Вообще, в этом как раз сильная сторона javascript - в то время, как "php создан, чтобы умирать", запущенный javascript-процесс крутится постоянно. Если он завершился, значит он умер. Вот и получается, что импортеры можно писать такие, которые просто часами могут работать, перелопатив не только тысячи, но и миллионы записей. Короче, мой ранее выпущенный modImporter - детский сад по сравнению с ним.

Если кому интересно, исходники выложил: https://github.com/MODX-Club/import-old-site

Модифицировав его, можно не только из одной базы данных в другую перегонять данные, но и собирать данные с нескольких источников, обрабатывать их и распределять в другие точки. Если кому-то что-то надо в таком плане, обращайтесь.

А теперь осталось только интерфейсы сайта актуализировать и в бой.
А вот, кстати, наглядный пример преимущества всех этих технологий: в предыдущем релизе импортера забыл прописать импорт тегов. Дописал функционал, выложил новый релиз пакета: https://www.npmjs.com/package/@modxclub/import-old-site , обновил версию на сайте, выполнил импорт, profit.


P.S., на самом деле мне не приходится на каждый чих публиковать новую версию компонента, чтобы установить на целевой сайт, потом выяснить, что что-то не так, внести корректировки, опять собрать и далее по кругу. В таком случае я бы больше занимался сборкой этих пакетов. При таком раскладе я сегодняшний импорт бы через неделею не закончил. Для ускорения процедуры используется линковка компонентов через yarn link, но об этом позже.
Внимание! Сайт переехал окончательно на JS. Пароли все старые не актуальны. Воспользуйтесь функцией смены пароля. И с этим два момента:
1. Почта отправляется с задержкой до 10 минут.
2. Пока почта не настроена как следует, так что смотрите папку Спам, скорее всего туда улетит.
И еще момент: кое-какие работы еще ведутся, так что возможны перебои. И пока никакие уведомления не работают. Уведомления заработают чуть позже.

И еще важный момент: Если у кого при отправке комментария будет страшно ругаться, почистите localStorage в браузере. Или просто в консоли выполните localStorage.comment_new = null
В ближайшее время выкачу заплатку.
Да, изменение скорости ответа заметно даже на глаз.
К тому же не понаслышке знаю технологии, который заложил Николай. Это очень гибко, удобно и надёжно. Объем кода сайта - чуть больше 350кб. При этом никакого php, только чистый js. Это нереально круто.

По себе могу сказать - после работы с реактом, если приходится заниматься php+jquery - охота выкинуть комп в окно. А с реактом я просто отдыхаю.

Изменил пароль, письмо пришло практически мгновенно.
Саша, спасибо на добром слове!

Письмо пришло практически мгновенно - просто повезло. Там очередь рассылки раз в минуту. Ты видимо просто попал в очередной этап.
Не нашел почту обратной связи, так что пишу сюда, на сайте не работает авторизация через логин (через почту всё норм), при создании топика выводится только поле ввода заголовка, при сохранении пишется либо ошибка $data json либо "не заполнен текст", также не знаю фитча это или нет, но в настройках пользователя можно поставить любой пароль, даже пустую строку
также сейчас при написании комментария пишется ошибка "топик не найден", но комент добавляется
@alexsoin, сорри за долгий ответ, занят был новым функционалом (чуть позже опубликую и распишу его).

По вашим вопросам:

1. Авторизация не может не работать через логин, но работать через емейл, или наоборот. Авторизация проходит в два этапа: сначала поиск пользователя по логину или емейлу, затем уже непосредственно авторизация. При этом на втором этапе не передается ни логин, ни емейл, а только id найденного пользователя. То есть не важно как был найден пользователь, по емейлу или логину, далее процедура идет единая, главное - чтобы пользователь был найден в принципе. У меня есть более прокаченная форма авторизации, которая позволяет выбрать пользователя из нескольких найденных (например, по имени, если человек забыл и логин и емейл (давно не заходил)). Принцип тот же - в итоге отправляется только id выбранного пользователя.
Перепроверьте еще раз, и если не получается, дайте больше деталей с каким логином не получается авторизоваться.

2. Создание топиков поправлено.

3. Пароль можно поставить любой, но пустой пароль не сохраняется. То есть пользователь обновляется, но сохранение такого пароля не происходит. Вот код.

4. Про "топик не найден", я так понимаю, это в момент обновления данных страницы. Это очень тонкий момент, который еще предстоит поправить, так как он сразу от нескольких вещей зависит. Если коротко, то на сайте очень активно используется кеширование не уровне провайдера данных, который обеспечивает обмен данными между страницей и сервером (apollo-client). Когда сохраняется коммент (а с ним обновление еще нескольких сущностей), выполняется и подгрузка обновленных данных. Вот в этот момент, если на текущей странице топика, где вы комментарий писали, происходит разрыв между сбросом кеша и подгрузкой данных, получается, что данных топика нет, вот и выходит эта надпись. Момент неприятный, но для работы сайта некритичный. В любом случае, спасибо за фидбэк, я для себя пометил, что надо дополнительно над этим моментом поработать.


@Fi1osof, авторизоваться через логин у меня не выходит через аккаунт с которого пишу, ввожу логин, система как вы и говорите находит пользователя, затем пишет "введите пароль" ввожу пароль, нажимаю далее, в ответ выходит сообщение об ошибке, о некорректности введенных данных. По такому же принципу ввожу вместо логина почту, и всё срабатывает нормально
Не получается именно с логина alexsoin или какого-то другого?
Странно. Я первым делом попробовал. Хотя конечно же пароль ваш не знаю, поэтому пароль конечно же не вводил. Поменяйте пароль, пришлите мне на n.lanets@modxclub.ru его и инфу с какого браузера пытаетесь (включая версию и ось), я перепроверю.
Алекс, у меня получилось с вашими данными зайти в разных браузерах. Чуть позже только еще на винде посмотрю. Но в любом случае, вопросы к форме авторизации теперь и у меня возникли. Я говорил, что в итоге на авторизацию отправляются id пользователя и пароль, а оказалось, что все-таки юзернейм отправляется (видимо заюзал какой-то промежуточный вариант формы :)). На днях буду переделать форму. может решит проблему.
Так же посмотрите, если вдруг вы не на https://, а на http://, попробуйте на https.

Добавить комментарий