Алексей Федоров

Алексей Федоров

С нами с 19 октября 2015; Место в рейтинге пользователей: #186
Сергей Шлоков
26 декабря 2015, 12:21
3
+2
Ну самое простое это сделать сниппет, в котором запрашивать группы
<?php
if ($modx->user->get('id')) {
	$q = $modx->newQuery('modUser',array('`modUser`.`id`'=>$modx->user->get('id')));
	$q->innerJoin('modUserGroupMember','UserGroupMembers');
	$q->innerJoin('modUserGroup','UserGroup','`UserGroupMembers`.`user_group` = `UserGroup`.`id`');
	$q->select('UserGroup.name');
	$groupsArray = array();
	if ($q->prepare() && $q->stmt->execute()) {
	    while($row = $q->stmt->fetch(PDO::FETCH_ASSOC)) {
		    $groupsArray[] = $row['name'];
	    }
	}
	// Список групп через запятую
	$userGroups = implode(',',$groupsArray);
} else {
	$userGroups = 'Аноним';
}
return $userGroups;
и вставлять его в нужное место.
Сергей Скат
01 декабря 2015, 14:56
2
+2
в общем если поле ТВ, нужно писать его с префиксом и без скобок, примерно так
[[!pdoResources?
                        &parents=`0`
			&includeTVs=`opinion_view`
                        &tpl=`standart_news_block`
                        &tplCondition=`tv.opinion_view`
                        &tplOperator=`==`
                        &conditionalTpls=`{"1":"first_opinion", "2":"second_opinion", "3":"standart_news_block"}`
                    ]]
Подсказал Володя , за что ему большое спасибо!
Василий Наумкин
19 ноября 2015, 10:23
10
+7
My quick example:
<?php
$tplWrapper = '@INLINE <ul>{{+output}}</ul>';
$tplYear = '@INLINE <li>{{+year}}<sup>({{+count}})</sup><ul>{{+resources}}</ul></li>';
$tplMonth = '@INLINE <li>{{+month}}<sup>({{+count}})</sup><ul>{{+resources}}</ul></li>';
$tpl = '@INLINE <li><a href="{{+uri}}">{{+pagetitle}}</a></li>';

$pdo = $modx->getService('pdoFetch');

$resources = $pdo->getCollection(
	'modResource',
	array('published' => true, 'deleted' => false),
	array('parents' => 0, 'sortby' => 'createdon', 'sortdir' => 'DESC')
);
$tree = array();
foreach ($resources as $resource) {
	$year = date('Y', $resource['createdon']);
	$month = date('m', $resource['createdon']);
	$tree[$year][$month][] = $resource;
}

$output = '';
foreach ($tree as $year => $months) {
	$tmp1 = '';
	$count = 0;
	foreach ($months as $month => $resources) {
		$tmp2 = '';
		foreach ($resources as $resource) {
			$tmp2 .= $pdo->getChunk($tpl, $resource);
			$count++;
		}
		$tmp1 .=  $pdo->getChunk($tplMonth, array(
			'month' => $month,
			'count' => count($resources),
			'resources' => $tmp2,
		));
	}
	$output .=  $pdo->getChunk($tplYear, array(
		'year' => $year,
		'count' => $count,
		'resources' => $tmp1,
	));
}

return $pdo->getChunk($tplWrapper, array('output' => $output));

Result:
Сергей Шлоков
13 ноября 2015, 11:47
1
+4
А вот как пользователя добавить в группу «Покупатель товара N» — уже не знаю
Есть 2 часа времени? Поехали
$modx->user->joinGroup('Покупатель товара N')
Всё. Поезд дальше не идет. Просьба освободить вагоны. :)
П.С. Когда сделаю, выложу. Мне не жалко.
Wassi Wassinen
18 апреля 2015, 01:27
2
+4
[[+modx.user.id:userinfo=`username`]]


подставляй в userinfo любое нужное поле.
Wassi Wassinen
16 апреля 2015, 09:06
1
0
Нет, не удалось. Нашел решение, которое мне показалось более изящным и масштабируемым — публикую товары minishop2 через вот этот чудесный компонент

https://modstore.pro/packages/users/ms2form

Умеет публиковать категории товаров (раздел тикетов) и сами товары (тикет). Поддерживает тэги, мультикатегории, крутой редактор и т.д. Вместе с автором всё еще шлифуем компонент. На выходе, надеюсь, получится интересно.
Максим Кузнецов
03 февраля 2015, 11:08
1
0
Отлично, значит результат есть.

Теперь, если дату необходимо представить с возможностями «тикетов» — (сегодня/вчера, 5 минут назад) и так далее, то вам необходимо поставить дополнение DateAgo modstore.pro/packages/utilities/dateago и вызывать в нужном месте таким:
[[!dateAgo? &input=`[[+pub_date:default=`[[+publishedon]]`]]`]]
или таким образом:
[[+pub_date:default=`[[+publishedon:dateAgo]]`:dateAgo]]

Если же такой необходимости нет, то преобразовать текущий результат (unix timestamp) в обычную дату можно следующим образом:

[[+pub_date:default=`[[+publishedon:strtotime:date=`%a %b %e, %Y`]`:strtotime:date=`%a %b %e, %Y`]]
(возможно, без последнего ":strtotime:date=`%a %b %e, %Y`", но точно не скажу).

Формат даты, соответственно, настраивается по желанию (вот перечень доступных).
Максим Кузнецов
10 января 2015, 09:34
4
+2
С вашего позволения, приведу сюда пример реализации большинства пунктов (не отрицаю востребованнось решения данных задач сразу из коробки, т.к. работы для реализации этих пунктов нужно сделать прилично):

Страницы пользователей с нормальными урл

1. Создаем страницу «профиль пользователя» (не путаем с личным кабинетом), выставляем ему псевдоним, допустим users, к которой будут обращаться в виде site.ru/users?profile=имя

2. Ставим дополнение pdoTools

3. Создаем сниппет user.Profile и добавляем его в шаблон вывода
<?php
	$count = $modx->getCount('modUser', array('username' => $_GET[profile]));
	if($count <= 0){
		echo'	<h2>
				<a>Ошибка</a>
			</h2>
			<div>
				Пользователя не существует.
			</div>';
	}
	else {
		$params = array();
		$params['users'] = $_GET[profile];
		$params['showBlocked'] = '1';
		$params['tpl'] = 'user.Profile';
		$params['prepareSnippet'] = 'user.Profile.Prepare';
		
		$result = $modx->runSnippet('pdoUsers', $params);
		
		if (!empty($result)) {
			return $result;
		}
		else {
			return '<h2>
					<a>Ошибка</a>
				</h2>
				<div>
					Что-то сломалось.. Сейчас починим.
				</div>';
		}

	}
— насколько я помню, сразу вызвать pdoUsers с параметром конкретного пользователя нежелательно, т.к. если пользователя не существует, он выдает по-умолчанию весь список пользователей. Возможно, сейчас что-то поменялось или это можно обойти — не проверял.

Для данного сниппета также можно дописывать условия, если пользователь не активирован и тд и тп. При помощи параметров tpl и prepareSnippet кастомизируем до нужного уровня.

4. Дописываем в .htaccess
RewriteRule ^users/([^/]+)$ /users?profile=$1 [L]
— чтобы ссылка приняла вид site.ru/users/Имя_пользователя

Возможность добавлять поля в профиль пользователя

При регистрации: дополнение login
Для редактирования пользователем (личный кабинет) — дополнение office

Возможность указывать шаблон для оформления страницы пользователя

1. Добавляем дополнительное поле в личный кабинет пользователя (шаблон отображения)
2. В шаблоне отображения профиля пользователя дописываем классы, завязанные на полученном значении (class=«userInfo-[[+tpl.style]]»)
2.А. Если необходимо менять структуру шаблона в зависимости от выбранного пользователя значением, то в сниппете в первой части дописываем до

$params = array();
получение extended-поля по id пользователя с вытекающими условиями if, внутри которых будет разный параметр $params['tpl']

Добавить «из коробки» дату регистрации и дату последней активности

Дату регистрации — сниппет логин и 1 доп. поле.
С датой последней активности сложнее, т.к. в таблицах Modx'a, насколько я помню, есть только поле последней авторизации. Возможно, нужно завязывать на сессии +временной промежуток.

Возможность сделать станицу пользователя общедоступной для просмотра

Аналогично пункту 2.А. в разделе «шаблона отображения»
Евгений
03 ноября 2014, 13:01
1
0
getComments — то что нужно, я его и не заметил, а читал документацию о других сниппетах tickets где среди них не было getComments

теперь
[[!getComments?  &tpl=`Tickets.comment.latest.custom` &limit=`3`]]
Выводит как и было задумано 3 последних комментария.
сам сниппет заворачивается:
...
<ul>
[[!getComments?  &tpl=`Tickets.comment.latest.custom` &limit=`3`]]
</ul>
...
а чанк Tickets.comment.latest.custom оборачивается в тег li

В итоге чудовищный восторг:



Abu
Abu
28 августа 2013, 19:19
6
0
Оставлю памятку разграничения тикетов между пользователями и менеджерами.

1) Создается 2 группы пользователей: Users и Managers

*все действия в контексте web, роль Member

2) Создается группа ресурсов Restricted -при создании можно сразу автоматически дать доступ Administrator, анонимный доступ, дать доступ нашим группам Users,Managers (в результате в группах появляется доступ к группе ресурсов — Restricted и все пользователи могут их load,list,view (Resource))

3) Создается группа ресурсов Editable — автоматически дать доступ Administrator, дать анонимный доступ, дать доступ группам Users,Managers (в результате в группах появляется доступ к группе ресурсов — Editable)

4) Далее, чтобы можно было добавлять секции, добавляем в группах Administrator, Managers, Users —
еще один доступ к ресусам Editable, уже с политикой — TicketSectionPolicy.

5) Группам Administrator, Managers — дадим доступ и к ресурсам Restricted с политикой TicketSectionPolicy

6) Добавляем разрешенные к редактированию пользователями и менеджерами ресурсы в группу Editable, а разрешенные только к редактированию менеджерами ресурсы в Restricted — например Новости сайта в Restricted, а Вопросы пользователей в Editable.