Профиль пользователя ModX

Как сделать профиль пользователя с полями комментариев и прочее как на этом сайте?
Что порекомендуете использовать?
Сейчас на сайте авторизация через HybridAuth.
Михаил Боровов
01 марта 2017, 16:08
modx.pro
2
2 631
0

Комментарии: 23

Максим Кузнецов
02 марта 2017, 02:18
+2
1. Создаете общую страницу для списка пользователей (users)
2. С помощью кастомной маршрутизации на событие OnPageNotFound перехватываете запрос пользователя и, если он подходит под формат страницы пользователя (/users/$username), то подменяете страницу:
$tmp = explode('/', $request);
	
if (end($tmp) == '') {
	array_pop($tmp);
}
if (count($tmp) >= 2) {
	switch ($tmp[0]) {
		//Профиль пользователя
		case 'users':
			//манипуляции с именем пользователя:
			//1. ищете подходящего пользования
			//2. если он не существует - возвращаем 404, если существует - идем дальше
			//3. приводим адресную строку к единому формату ('имя, Имя, ИМЯ' -> 'Имя')
			//4. Заносите в плейсхолдер (user_id, user_name) значение пользователя
			//5. подменяете страницу при помощи sendForward на страницу users

			//опционально: здесь же можно проверять наличие 3-ей и более подстрок запроса
			//(posts, comments, favorites и тд) 
	...

3. На странице users проверяете наличие соответствующих плейсхолдеров (user_id, user_name) — если они есть, то отображаете шаблон страницы пользователя, если их нет — общую страницу пользователей
    Михаил Боровов
    02 марта 2017, 03:18
    0
    Очень сложно (((

    Я про это имел ввиду:

    Как вывести «Заметки», «Комментарии»?
    Хотя бы для себя в своём профиле.
      Максим Кузнецов
      02 марта 2017, 03:52
      +1
      При помощи сниппетов getTickets и getComments, с применением параметра &where:
      &where=`{"createdby": [[!+modx.user.id]]}`
        Михаил Боровов
        02 марта 2017, 03:55
        0
        О! Отлично!
        Так и попробую!

        Еще небольшой вопрос: Как вывести кнопку «Редактировать», доступную только автору и Админу?
          Максим Кузнецов
          02 марта 2017, 03:59
          1
          +1
          С помощью фильтров MODX'a:
          [[!+modx.user.id:is=`[[*createdby]]`:or:memberof=`Administrator`:then=`Редактировать`]]

          С помощью фенома:
          {if $_modx->user.id | ismember : 'Administrator' || $_modx->user.id == $_modx->resource.createdby}
          	Редактировать
          {/if}
            Михаил Боровов
            02 марта 2017, 04:36
            0
            А что вписать вместо «Редактировать»?
            Сейчас выводит только текст (((
              Максим Кузнецов
              02 марта 2017, 04:40
              +1
              Это зависит от того, как вы планируете редактировать материал.

              Если вы хотите редактировать тикеты из дополнения Tickets, то:
              1. создаете страницу для управления тикетами (допустим, news/admin), на которой вызываете сниппет TicketForm
              2. прописываете в примере выше ссылку в следующем формате:
              <a href="[[~айди_страницы_из_пункта_1]]?tid=[[*id]]"></a>
                Михаил Боровов
                02 марта 2017, 04:45
                0
                Планирую сделать как тут, в созданном этом тикете:

                  Михаил Боровов
                  02 марта 2017, 05:11
                  0
                  Спасибо. Корректнее написать было:

                  <a href="[[~айди_страницы_созданной_в_пункте_1]]?tid=[[*id]]">Редактировать</a>
                    Raimei
                    02 марта 2017, 05:12
                    0
                    О первом пункте можно подробнее?

                    Мне пришлось на тестовом сайте сделать через сниппет.

                    joxi.ru/8Anb0qYU6Kd1AO здесь проверка на феноме как написал Максим
                    joxi.ru/52aBQl9Tp05VA0 здесь проверка уже отличается

                    Для Михаила: если интересно, могу внятный гайд сделать.
                      Михаил Боровов
                      02 марта 2017, 05:16
                      0
                      Спасибо сделал просто див:

                      [[!+modx.user.id:is=`[[*createdby]]`:or:memberof=`Administrator`:then=`
                      	<div class="alert alert-warning" style="font-size: 12px; height: 40px; padding: 10px;">
                      	<i class="glyphicon glyphicon-pencil" style="padding:3px"></i> <a href="[[~130]]?tid=[[*id]]">Редактировать</a>
                      	</div>
                      `]]
                      где [[~130]] — ID страницы в системе для создания нового тикета
                        Михаил Боровов
                        02 марта 2017, 05:20
                        0
                        Завтра буду «заметки» и «комментарии» в профиле разбирать.
                        Пока только мысли и они уже путаются )))
                          Максим Кузнецов
                          02 марта 2017, 05:21
                          0
                          Не совсем понял, что именно нужно расписать…

                          1. У вас есть раздел с тикетами (допустим, новости), доступный по адресу '/news/'. Создаете в древе ресурсов новую страницу (не тикет), после чего перетаскиваете ее в раздел с тикетами, делая ее дочерней.
                          2. Изменяете алиас для страницы и создаете для нее отдельный шаблон.
                          3. Исключаете страницу из поиска и выборок pdoResources/getTickets по данному разделу.
                          4. Вызываете в шаблоне сниппет TicketForm c параметром &parents, равным айди раздела с тикетами.
                            Raimei
                            02 марта 2017, 05:24
                            0
                            Тьфу. Совсем заработался. Извиняюсь :)

                            Весь день делал личный кабинет более-менее схожий с modx.pro
                            Знаний в PHP и MODX в целом не так много. В основном версткой занимаюсь.

                            Мозги поломал знатно.
                              Михаил Боровов
                              02 марта 2017, 05:26
                              0
                              Можете поделиться как получилось?
                              Тем же самым занимаюсь — пока только с профилем боролся — вроде победил )))
                              Редактирование, аватарки, авторизация через соцсети, тикеты…
                              Raimei
                              02 марта 2017, 05:41
                              0
                              У меня сборка на Tickets + ModClassVar + Office, часть вещей вам вряд ли пригодятся.

                              Пока могу поделиться ссылками. Голова совсем не думает на данный момент)

                              Виртуальная страница пользователя. Почему-то мне подошел именно этот плагин.

                              Что бы плагин начал работать, на 24 строке необходимо ID контейнера обернуть в одинарные кавычки.

                              Отсюда первые два пункта. Второй вывожу прямо на странице.
                              Alex Zhuravlev
                              11 июля 2018, 23:26
                              0
                              Добрый вечер. Подскажите пожалуйста как вывести на странице пользователя его поля.

                              На странице site.com/user вижу всех юзеров и при клике перехожу на страницу site.com/user/testuser где вижу тот же список всех юзеров, а как вывести на этой странице поля выбранного?

                              Делал так
                              Вывел список пользователей на страницу site.com/user

                              [[!pdoPage?
                                  &element=`pdoUsers`
                                  &tpl=`user_list_tpl`
                                  &sortdir=`asc`
                              ]]

                              в чанке user_list_tpl

                              Пользователь: <a href="[[~52]]/[[+username]]" class="">[[+username]]</a>

                              Повесил плагин «Виртуальная страница пользователя» по вашей ссылке
                              Михаил Боровов
                              12 июля 2018, 00:12
                              0
                              К сожалению, было давно и не помню ((((
                              Денис
                              12 июля 2018, 14:19
                              0
                              Судя по плагину (смотрите 60 строчку), выводить поля [[+user.ключ]]. А в fenom {$_pls['user.ключ']} или {'user.ключ'|placeholder}. Так же подтягиваются все поля профиля и дополнительные поля пользователя, так же с префиксом 'user.'
                              Alex Zhuravlev
                              12 июля 2018, 15:18
                              0
                              Это понятно и поля изера на странице site.com/user выводятся, вопрос в том как оформить страницу самого пользователя (на виртуальной странице), ведь при схеме которую я реализовал (см выше) я на виртуальной странице вижу вызов pdousers с списком всех пользователей, но не понял как мне указать чанк именно для пользователя…
                              Может не верно выражаюсь
                              Alex Zhuravlev
                              12 июля 2018, 15:50
                              +1
                              Что то я затупил.
                              В шаблоне User проверяю и вывожу есть ли id юзера и если есть то вывожу поля профиля а если нет то pdousers… Так правильно делаю?

                              {if 'user.id'|placeholder?}
                                  {'user.username'|placeholder}
                                  {'user.fullname'|placeholder}
                                  {'user.email'|placeholder}
                                  {'user.mobilephone'|placeholder}
                              {else}
                                  {'!pdoPage' | snippet : [
                                      'element' => 'pdoUsers',
                                      'tpl' => 'user_list_tpl',
                                      'sortdir' => 'asc',
                                  ]}
                              {/if}
                              Денис
                              13 июля 2018, 09:22
                              0
                              Да, всё верно.
                              Максим Кузнецов
                              02 марта 2017, 05:30
                              +3
                              Вы еще легко отделались: я последний ~месяц занимаюсь разработкой системы управления заказов минишопа — после продолжительного программирования теряю возможность нормально склонять и расставлять ударения в словах на какое-то время %)
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          23