Виртуальная страница пользователя
Вот была тема:
Страница пользователя как на modx.pro
Здесь было описано как сделать страничку пользователя с кучей мануалов! Вроде все понятно и вообще не чего трудного!
Делал все как написано в инструкции, которая расписана можно сказать так, что и «чайник» вроде меня разберется!
Казалось бы, что может быть проще:
1. Создать страничку с алиасом user
2. Затем написать плагин и повесить его не одно единственное событие!
3. Радоваться результату!
НО! Эта схема не работает у меня на рабочем проекте! Проверил все, что можно по этому мануалу! Но много и не написано!
Решил протестировать на отдельной «Болванке», такая же ситуация! Подозрительные плагины и сниппеты использовать не хотелось бы, а этот написан по мануалу Василия Наумкина, в продуктах которого пока еще не разу не усомнился! И я так понимаю, что этот вариант используется и здесь на modx.pro!
Поэтому вывод очевиден! Очень хочется разобраться именно с этим примером!
Возможно, что то я упустил или в мануале не достаточно сведений!
Прошу помощи в этом не легком для меня вопросе! Заранее спасибо за любую помощь!
P.S.
Могу дать доступ к тестовой «болванке», чтобы понять как работает данное чудо программирования!
Страница пользователя как на modx.pro
Здесь было описано как сделать страничку пользователя с кучей мануалов! Вроде все понятно и вообще не чего трудного!
Делал все как написано в инструкции, которая расписана можно сказать так, что и «чайник» вроде меня разберется!
Казалось бы, что может быть проще:
1. Создать страничку с алиасом user
2. Затем написать плагин и повесить его не одно единственное событие!
3. Радоваться результату!
НО! Эта схема не работает у меня на рабочем проекте! Проверил все, что можно по этому мануалу! Но много и не написано!
Решил протестировать на отдельной «Болванке», такая же ситуация! Подозрительные плагины и сниппеты использовать не хотелось бы, а этот написан по мануалу Василия Наумкина, в продуктах которого пока еще не разу не усомнился! И я так понимаю, что этот вариант используется и здесь на modx.pro!
Поэтому вывод очевиден! Очень хочется разобраться именно с этим примером!
Возможно, что то я упустил или в мануале не достаточно сведений!
Прошу помощи в этом не легком для меня вопросе! Заранее спасибо за любую помощь!
P.S.
Могу дать доступ к тестовой «болванке», чтобы понять как работает данное чудо программирования!
Комментарии: 9
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Я постарался прокомментировать свой плагин (сделан по тем же примерам) gist.github.com/Alroniks/e94bb0b997bbb55d02f94e72bc62a64c
Но остались вопросы! Например:
1. Как должен выглядеть шаблон? Чтобы выводились данные именно того пользователя, которого мы запрашиваем! Потому как при запросе нужного пользователя выходят данные текущего авторизированного!
Пример шаблона взял из примера выше:
Т.е. все плейсхолды вызваны не кешируемыми!
Но при переходе на страницу запрашиваемого пользователя выводятся не то, что ннадо! В Вашем плагине нашел следующие:
Пока не совсем разобрался, как с этим жить! Если можно поясните, потому как понимаю, что именно их нужно использовать для отображения информации о запрошенном пользователе!
2. И второй вопрос, здесь на modx.pro сделано таким образом, что страница modx.pro/users — используется для отображения все пользователей, а дальнейшие запросы уже ясное дело используются как modx.pro/users/username вопрос то не трудный, следственно как сделать, что то похожее?
3. Так же на modx.pro организовано в ЛК таким образом, что в профиле можно выбрать как именно отображать ссылку на имя пользователя и стоит выбор между username и ID (так вот хотелось бы все же сделать так, чтобы был выбор при переключении)
По 2-му вопросу, все логику делаете в самом шаблоне этой страницы. Если используете Fenom, то с ним несколько проще. Но на деле можно проверить так. Если в плейсхолдере user.id есть значение, значит у нас страница пользователя и нужно показать карточку юзера, если нет, то вывести список всех пользователей через pdoUsers. Т.е. обычный if.
Насчет 3 не совсем понял, но определить пользователя по ID или useraname — это дописать условие в проверки в плагин. Если пришли цифры (можно проверить регулярным выражением или просто проверить на целое число функцией php), то искать пользователя по ID, иначе по username. Следовательно, если не нашлось, 404, нашлось — все тоже самое. Данные в плейсхолдеры, в шаблоне условия.
Ну а как записать юзеру параметр, как его ссылку показывать, ну так тут можно или доп поля испльзовать или системные настройки уровня пользователя (я у себя из использую, так как отдельная таблица, проще иногда работать, modx_users_settings).
В этой теме: modx.pro/help/12183/ — я описал проблему, там человек пытается мне помочь, но через свой пример, а самая боль в том, что его пример у меня не работает хоть ты убейся! Может вы поможете интегрировать его пример в ваш! Заранее спасибо!
Страница формируется при помощи плагина!
Т.е. создаете например страницу с Алиасом users и у вас в итоге получится, что то вроде этого:
Затем пишем плагин, который был предложен джентльменом выше и обязательно ставим галочку на системное событие OnPageNotFound.
Теперь надо поставить заполнитель для страницы с алиасом users, выглядеть он к примеру будет так:
Обратите внимание, что все плейсхолдеры прописываются с "!" это делается для того, что бы записи, которые будут выводиться на странице были именно того пользователя, которого вы искали, а не текущего! Так же имейте ввиду, что префикс user. можно поменять в коде палагина, но можно оставить и этот, но его обязательно необходимо указывать при выводе плейсхолдеров, иначе не чего появится при запросе! Ух ты, все готово! Теперь переходим к не посредственному тесту! А для этого, найдем пользователя с username например testuser и тут нам нужно пройти по адресу:
и мы увидим нашего запрошенного юзера!
Учтите, что я испытывал плагин и метод со следующими параметрами:
1. Дружественные юри включены
2. Вложеные юри включены
3. Каталог с алиасом users — был в корне сайта!
Вот вроде и все, что необходимо сделать, для отображения пользователя! Если хотите, чтобы по адресу показывался список пользователей, то:
т.е. что здесь происходит — если вы обращаетесь к странице, на которой нет запроса user.id:
то выводится список пользователей, если запросили пользователя:
то тогда выводить страницу с данными пользователя!
Чанк отображения пользователя в списке через pdoUsers, у меня выглядит так:
Я использую get запросы типа:
Где 32 — ресурс Страница пользователя, принимающий параметры с одним единственны вызовом:
А уже данный сниппет таков:
Т.е. через строку url я получаю имя пользователя, отдаю его сниппету, а он направляет выборку в pdoUsers. Придумано не мной, я лишь адаптировала под себя.
Ну и чанк User, куда все полетело: