Виртуальная страница пользователя
Вот была тема:
Страница пользователя как на 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
Я постарался прокомментировать свой плагин (сделан по тем же примерам) gist.github.com/Alroniks/e94bb0b997bbb55d02f94e72bc62a64c
Такс! Спасибо! Вроде теперь работают ссылки как надо, пробовал перейти на существующих пользователей, все здорово!
Но остались вопросы! Например:
1. Как должен выглядеть шаблон? Чтобы выводились данные именно того пользователя, которого мы запрашиваем! Потому как при запросе нужного пользователя выходят данные текущего авторизированного!
Пример шаблона взял из примера выше:
Но при переходе на страницу запрашиваемого пользователя выводятся не то, что ннадо! В Вашем плагине нашел следующие:
2. И второй вопрос, здесь на modx.pro сделано таким образом, что страница modx.pro/users — используется для отображения все пользователей, а дальнейшие запросы уже ясное дело используются как modx.pro/users/username вопрос то не трудный, следственно как сделать, что то похожее?
3. Так же на modx.pro организовано в ЛК таким образом, что в профиле можно выбрать как именно отображать ссылку на имя пользователя и стоит выбор между username и ID (так вот хотелось бы все же сделать так, чтобы был выбор при переключении)
Но остались вопросы! Например:
1. Как должен выглядеть шаблон? Чтобы выводились данные именно того пользователя, которого мы запрашиваем! Потому как при запросе нужного пользователя выходят данные текущего авторизированного!
Пример шаблона взял из примера выше:
<h3>[[!+fullname]]</h3>
<big>Информация</big>
<table class="table">
<tbody>
<tr>
<td>Веб-сайт</td>
<td><a href="[[!+website]]" target="_blank">[[!+website]]</a></td>
</tr>
<tr>
<td>Город</td>
<td>[[!+city]]</td>
</tr>
</tbody>
</table>
Т.е. все плейсхолды вызваны не кешируемыми!Но при переходе на страницу запрашиваемого пользователя выводятся не то, что ннадо! В Вашем плагине нашел следующие:
$modx->setPlaceholders($user, 'user.');
$modx->setPlaceholders($profile, 'user.');
$modx->setPlaceholders($extended, 'user.');
Пока не совсем разобрался, как с этим жить! Если можно поясните, потому как понимаю, что именно их нужно использовать для отображения информации о запрошенном пользователе!2. И второй вопрос, здесь на modx.pro сделано таким образом, что страница modx.pro/users — используется для отображения все пользователей, а дальнейшие запросы уже ясное дело используются как modx.pro/users/username вопрос то не трудный, следственно как сделать, что то похожее?
3. Так же на modx.pro организовано в ЛК таким образом, что в профиле можно выбрать как именно отображать ссылку на имя пользователя и стоит выбор между username и ID (так вот хотелось бы все же сделать так, чтобы был выбор при переключении)
Я же не просто так написал, что нужно все данные о пользователе положить в плейсхолдеры. Понятное дело, что на обычной странице информация о текущем пользователе будет выводится. Поэтому и записана все в плейсхолдеры с префикстом user. Выводить нужно так [[+user.fullname]], [[+user.email]] и тд. Кешированые или нет — это уже сами решайте.
По 2-му вопросу, все логику делаете в самом шаблоне этой страницы. Если используете Fenom, то с ним несколько проще. Но на деле можно проверить так. Если в плейсхолдере user.id есть значение, значит у нас страница пользователя и нужно показать карточку юзера, если нет, то вывести список всех пользователей через pdoUsers. Т.е. обычный if.
Насчет 3 не совсем понял, но определить пользователя по ID или useraname — это дописать условие в проверки в плагин. Если пришли цифры (можно проверить регулярным выражением или просто проверить на целое число функцией php), то искать пользователя по ID, иначе по username. Следовательно, если не нашлось, 404, нашлось — все тоже самое. Данные в плейсхолдеры, в шаблоне условия.
Ну а как записать юзеру параметр, как его ссылку показывать, ну так тут можно или доп поля испльзовать или системные настройки уровня пользователя (я у себя из использую, так как отдельная таблица, проще иногда работать, modx_users_settings).
По 2-му вопросу, все логику делаете в самом шаблоне этой страницы. Если используете Fenom, то с ним несколько проще. Но на деле можно проверить так. Если в плейсхолдере user.id есть значение, значит у нас страница пользователя и нужно показать карточку юзера, если нет, то вывести список всех пользователей через pdoUsers. Т.е. обычный if.
Насчет 3 не совсем понял, но определить пользователя по ID или useraname — это дописать условие в проверки в плагин. Если пришли цифры (можно проверить регулярным выражением или просто проверить на целое число функцией php), то искать пользователя по ID, иначе по username. Следовательно, если не нашлось, 404, нашлось — все тоже самое. Данные в плейсхолдеры, в шаблоне условия.
Ну а как записать юзеру параметр, как его ссылку показывать, ну так тут можно или доп поля испльзовать или системные настройки уровня пользователя (я у себя из использую, так как отдельная таблица, проще иногда работать, modx_users_settings).
Спасибо огроменное! Давно уже хотел реализовать эту фигню, без всяких костылей!
Приветствую! Уже прошло как много месяцев пользуюсь вашим плагином! Только он работает, а куча других примеров просто отказывается! Реально помогло! Но вот стукнула мне задача кое что еще сделать…
В этой теме: modx.pro/help/12183/ — я описал проблему, там человек пытается мне помочь, но через свой пример, а самая боль в том, что его пример у меня не работает хоть ты убейся! Может вы поможете интегрировать его пример в ваш! Заранее спасибо!
В этой теме: modx.pro/help/12183/ — я описал проблему, там человек пытается мне помочь, но через свой пример, а самая боль в том, что его пример у меня не работает хоть ты убейся! Может вы поможете интегрировать его пример в ваш! Заранее спасибо!
Разобрался с первым вопросом! Но все же хотелось бы решить последний, а именно второй! Вам уже огромное спасибо и плюсик разумеется! Все как часы работает! На большее я уже не рассчитываю! Последний вопрос постараюсь решить самостоятельно!
Доброго дня, можно поинтересоваться, как именно Вы формируете саму ссылку на страницу с данными пользователя?
Тут все достаточно просто!
Страница формируется при помощи плагина!
Т.е. создаете например страницу с Алиасом users и у вас в итоге получится, что то вроде этого:
Теперь надо поставить заполнитель для страницы с алиасом users, выглядеть он к примеру будет так:
Учтите, что я испытывал плагин и метод со следующими параметрами:
1. Дружественные юри включены
2. Вложеные юри включены
3. Каталог с алиасом users — был в корне сайта!
Вот вроде и все, что необходимо сделать, для отображения пользователя! Если хотите, чтобы по адресу показывался список пользователей, то:
Чанк отображения пользователя в списке через pdoUsers, у меня выглядит так:
Страница формируется при помощи плагина!
Т.е. создаете например страницу с Алиасом users и у вас в итоге получится, что то вроде этого:
http://mysite.ru/users
Затем пишем плагин, который был предложен джентльменом выше и обязательно ставим галочку на системное событие OnPageNotFound.Теперь надо поставить заполнитель для страницы с алиасом users, выглядеть он к примеру будет так:
<h3>[[!+user.fullname]]</h3>
<big>Информация</big>
<table class="table">
<tbody>
<tr>
<td>Веб-сайт</td>
<td><a href="[[!+user.website]]" target="_blank">[[!+user.website]]</a></td>
</tr>
<tr>
<td>Город</td>
<td>[[!+user.city]]</td>
</tr>
</tbody>
</table>
Обратите внимание, что все плейсхолдеры прописываются с "!" это делается для того, что бы записи, которые будут выводиться на странице были именно того пользователя, которого вы искали, а не текущего! Так же имейте ввиду, что префикс user. можно поменять в коде палагина, но можно оставить и этот, но его обязательно необходимо указывать при выводе плейсхолдеров, иначе не чего появится при запросе! Ух ты, все готово! Теперь переходим к не посредственному тесту! А для этого, найдем пользователя с username например testuser и тут нам нужно пройти по адресу:http://mysite.ru/users/testuser
и мы увидим нашего запрошенного юзера!Учтите, что я испытывал плагин и метод со следующими параметрами:
1. Дружественные юри включены
2. Вложеные юри включены
3. Каталог с алиасом users — был в корне сайта!
Вот вроде и все, что необходимо сделать, для отображения пользователя! Если хотите, чтобы по адресу показывался список пользователей, то:
[[!+user.id:is=``:then=`[[$чанк или код списка пользователей, я вызывал при помощи pdoUsers]]:else=`[[$чанк или код заполнителей для отображения пользователя, например то, что я описал выше`]]
т.е. что здесь происходит — если вы обращаетесь к странице, на которой нет запроса user.id:http://mysite.ru/users/
то выводится список пользователей, если запросили пользователя:http://mysite.ru/users/testuser
то тогда выводить страницу с данными пользователя!Чанк отображения пользователя в списке через pdoUsers, у меня выглядит так:
<tr>
<td>[[!+id]]</td>
<td>
<img src="[[!+photo:default=`assets/avatars/default.jpg`]]" style="width:20%" class="img-circle">
</td>
<td><a href="[[~724]]/[[!+id]]">[[!+fullname:default=`Новый пользователь (Поменяйте отображаемое имя в настройках)`]]</a></td>
<td>[[!+createdon]]</td>
<td>[[!+tickets]]</td>
<td>[[!+comments]]</td>
<td>[[!+rating]]</td>
[[!+extended.user_status:is=``:then=`<td data-value="Пользователь">
<span class="status-metro status-active" title="Команда проектов">Пользователь</span>
</td>`:else=`
<td data-value="[[!+extended.user_status]]">
<span class="status-metro status-suspended" title="[[!+extended.user_status]]">[[!+extended.user_status]]</span>
</td>`]]
</tr>
Спасибо, что так подробно описали :) Однако, к тому времени, как я дождалась ответа, я уже поступила по другому (нашла пару советов в нескольких местах и соединила их) :)
Я использую get запросы типа:
Ну и чанк User, куда все полетело:
Я использую get запросы типа:
<a href="[[~32]]?name=[[+username]]" title="Просмотреть">
Где 32 — ресурс Страница пользователя, принимающий параметры с одним единственны вызовом:[[!userProfile]]
А уже данный сниппет таков:<?php
$count = $modx->getCount('modUser', array('username' => $_GET['name']));
if($count <= 0 || $count >= 2){
echo'<div class="alert alert-warning" role="alert"> <h2>
Ошибка
</h2>
<p>Вы видите данное сообщение потому, что:</p>
<br />
<ul>
<li>пользователя не существует на сайте;</li>
<li>профиль пользователя был удален;</li>
<li>пользователь принадлежит к тайному обществу, которое скрывает данные о себе.</li>
</ul>
<br />
<p>Если Вы читаете данное сообщение, значит полный профиль скрыт и Вы можете посмотреть его краткую версию на
странице <a href="[[~31]]" title="Все пользователи">Все пользователи</a></p></div> ';
}
else {
$user = $modx->getObject('modUser',array('username'=>$_GET['name']));
$user_id = $user-> get('id');
$params = array();
$params['users'] = $user_id;
$params['limit'] = '1';
$params['showBlocked'] = '1';
$params['tpl'] = 'User';
$result = $modx->runSnippet('pdoUsers', $params);
if (!empty($result)) {
return $result;
}
else {
return '<h2>
<a>Ошибка</a>
</h2>
<div>
Что-то пошло не так...
</div>';
}
}
Т.е. через строку url я получаю имя пользователя, отдаю его сниппету, а он направляет выборку в pdoUsers. Придумано не мной, я лишь адаптировала под себя.Ну и чанк User, куда все полетело:
<div class="col-lg-3 col-sm-3 hidden-xs col-md-3">
<img class="img-thumbmail margin-bottom15" src="[[+photo:default=`/assets/photouser/default.jpg`:thumb=`&w=150&h=150`]]" title="[[+username:htmlent]]">
</div>
<div class="col-lg-4 col-sm-4 col-xs-6 col-md-4">
<p class="margin-bottom25"><strong>Полное имя</strong></p>
<p><strong>Логин</strong> </p>
</div>
<div class="col-lg-5 col-sm-5 col-xs-6 col-md-5">
<h3 class="margin-bottom25">[[+fullname:empty=`не указано`]]</h3>
<p>[[+username:empty=`не указано`]]</p>
<p><a class="btn btn-default ticket-read-more" href="[[~35? &msgID=`[[+id]]` &recipient=`[[+sender]]`]]">
Написать</a>
</p>
</div>
<table class="table table-striped table-hover">
<tbody>
[[!getAuthorRating? &userId=`[[+id]]`]]
<tr><td>Город</td>
<td>[[+city:empty=`не указан`]]</td>
</tr>
<tr><td>Страна</td>
<td>[[+country:default=`Беларусь`]]</td>
</tr>
<tr></td></tr>
<tr><td>Телефон</td><td><span class="glyphicon glyphicon-phone-alt" aria-hidden="true"></span>
[[+phone:empty=`не указан`]]<br /><span class="glyphicon glyphicon-earphone" aria-hidden="true"></span>
[[+mobilephone:empty=`не указан`]]</td></tr>
</tbody>
</table>
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.