Вывод всех пользователей и просмотр их профиля
        Здравствуйте, помогите понять как сделать вывод всех пользователей группы user, и просмотр профиля каждого из них. Используется на сайте office, tickets, pdoTools.
Создал личный кабинет через office
На странице users вывел каждого юзера группы user через [[!pdoUsers]]
Как сделать подобное тому что на этом сайте?
 
    
    
    
                                                                                
            Создал личный кабинет через office
На странице users вывел каждого юзера группы user через [[!pdoUsers]]
Как сделать подобное тому что на этом сайте?
Комментарии: 7
                Для реализации страницы «профиля» у вас есть 2 варианта:
1. При помощи собственной маршрутизации реализовать виртуальную страницу пользователя вида
/users/имя_пользователя, после чего в плагине на событие OnPageNotFound перехватывать имя пользователя и при совпадении с реальным пользователем — выводить информацию.
Таким способом реализованы страницы пользователей на этом сайте.
2. Плагином на событие OnUserActivate создавать полноценную страницу для пользователя, а на OnUserSave — синхронизировать данные.
В обоих случаях в чанке pdoUsers нужно будет сымитировать итоговую ссылку:
                    1. При помощи собственной маршрутизации реализовать виртуальную страницу пользователя вида
/users/имя_пользователя, после чего в плагине на событие OnPageNotFound перехватывать имя пользователя и при совпадении с реальным пользователем — выводить информацию.
Таким способом реализованы страницы пользователей на этом сайте.
2. Плагином на событие OnUserActivate создавать полноценную страницу для пользователя, а на OnUserSave — синхронизировать данные.
В обоих случаях в чанке pdoUsers нужно будет сымитировать итоговую ссылку:
href="[[~2]]/[[+username}]]" — где 2 = страница-контейнер для пользователей (users).            
                По п 1. отлично отрабатывает компонент VirtualPage, он гораздо приятнее в эксплуатации плагина.            
                    
                Интересный компонент, спасибо. А как правильно выводить список пользователей на странице users, а с них ссылку на профиль?            
                    
                Del, не прочитал п.1 :)            
                    
                Максим, а можете подсказать подробнее, как реализовать второй пункт? для SEO надо, чтобы страница таки «существовала физически» (            
                    
                Вообще, для сео это совсем не критично, т.к:
— если вам необходимо добавить страницы пользователей в sitemap, то это можно сделать в рамках pdoUsers
— если вам необходимы динамичные заголовки и мета-теги, то можно сделать примерно так:
1. В плагине создаем плейсхолдер user_id
2. В мета-тегах проверяем его наличие:
Что же до примера со вторым вариантом, то примерно вот так:
1. Создание страницы пользователя (тикетом)
2. Синхронизируем данные (в одну сторону — от пользователя к странице). Соответственно, если есть потребность редактировать поля пользователя из админки через его страницу, потребуется еще один плагин.
                    — если вам необходимо добавить страницы пользователей в sitemap, то это можно сделать в рамках pdoUsers
— если вам необходимы динамичные заголовки и мета-теги, то можно сделать примерно так:
1. В плагине создаем плейсхолдер user_id
2. В мета-тегах проверяем его наличие:
{block 'meta'}
	{var $user_id = $_modx->getPlaceholder('user_id')} 
	{if $user_id | length > 0}
		{var $user_name = $_modx->getPlaceholder('user_name')}
		{var $pagetitle = $user_name ~ ' / Профиль пользователя'}
	
		<title>{$pagetitle ~' :: '~ $_modx->config.site_name}</title>
		...
	{else}
		{parent}
		//обычный набор мета-тегов
	{/if}
{/block} — надеюсь логика понятна..)Что же до примера со вторым вариантом, то примерно вот так:
1. Создание страницы пользователя (тикетом)
<?php
	if ($modx->event->name == 'OnUserActivate') {
		if ($user) {
			if ($profile = $user->getOne('Profile')) {
				$user_id = $user->get('id');
				$fullname = $profile->get('fullname');
				/* Можно распределять пользователей в зависимости от их группы */
				if ($user->isMember('Users')) {
					//указываем родителя и шаблон
					$parent = 21;
					$template = 28;
				}
	
				if (isset($parent)) {	
					//Дополнительно может потребоваться проверка на то, создана ли уже страница для пользователя 
					//(на случай, если у вас возможна повторная активация-деактивация пользотвалея 
					$page = $modx->getObject('modResource', array(
						'parent' => $parent,
						'createdby' => $user_id
					));
		
					if (!$page) {
						/* Формируем uri по айди пользователя */
						$parent_alias = $modx->getObject('modDocument', $parent)->get('alias');
						$parent_alias .= '/' . $user_id;
					
						$ticket = $modx->newObject('modDocument');
					
						$ticket->set('parent', $parent);
						$ticket->set('template', $template);
						$ticket->set('class_key', 'Ticket');
						$ticket->set('show_in_tree', 0);
						$ticket->set('published', 1);
						$ticket->set('author', $user_id);
						$ticket->set('createdby', $user_id);
						$ticket->set('pagetitle', $fullname);
						$ticket->set('uri_override', 1);
						$ticket->set('uri', $parent_alias);
						$ticket->set('alias', $user_id);
						$ticket->save();
					}
				}
			}
		}
	}2. Синхронизируем данные (в одну сторону — от пользователя к странице). Соответственно, если есть потребность редактировать поля пользователя из админки через его страницу, потребуется еще один плагин.
<?php
	if ($modx->event->name == 'OnUserFormSave' && $mode != 'new') {
		if ($user) {
			if ($profile = $user->getOne('Profile')) {
				$user_id = $user->get('id');
				if ($user->isMember('Users')) {
					$parent = 21;
				}
				
				if (isset($parent)) {
					//Ищем страницу пользователя
					$page = $modx->getObject('modResource', array(
						'parent' => $parent,
						'createdby' => $user_id
					));
					
					if ($page) {
						$extended = $profile->get('extended');
						
						//Обновляем дефолтное поле страницы
						$page->set('pagetitle', $profile->get('fullname'));
						
						//Обновляем тв-поле
						if (isset($extended['phone'])) {
							$page->setTVValue('user_phone', $extended['phone']);
						}
						//Дополнить требуемыми полями по вкусу %)
					
						$page->save();
					}
				}
			}
		}
	}            
                Спасибо! Не ожидал настолько развернутый ответ ) сейчас буду пробовать            
                    
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.