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

Как сделать профиль пользователя с полями комментариев и прочее как на этом сайте?
Что порекомендуете использовать?
Сейчас на сайте авторизация через HybridAuth.
Михаил Боровов
01 марта 2017, 16:08
2
573
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>
                Hiddenski
                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, равным айди раздела с тикетами.
                    Hiddenski
                    02 марта 2017, 05:24
                    0
                    Тьфу. Совсем заработался. Извиняюсь :)

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

                    Мозги поломал знатно.
                      Михаил Боровов
                      02 марта 2017, 05:26
                      0
                      Можете поделиться как получилось?
                      Тем же самым занимаюсь — пока только с профилем боролся — вроде победил )))
                      Редактирование, аватарки, авторизация через соцсети, тикеты…
                      Hiddenski
                      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
                      Вы еще легко отделались: я последний ~месяц занимаюсь разработкой системы управления заказов минишопа — после продолжительного программирования теряю возможность нормально склонять и расставлять ударения в словах на какое-то время %)