Раньше просто не было источников user и document, так-то они работают.
  • avatar paic
  • 1
И небольшое дополнение к топику
VI. Вывод зарегистрированных пользователей в каталог.

[!DocLister? &idField=`id` &idType=`documents` &controller=`onetable` &table=`web_user_attributes` &extender=`user` &usertype=`web` &userFields=`internalKey` &dateFormat=`%d.%m.%Y в %H:%M` &dateSource=`createdon` &orderBy=`id DESC` &ignoreEmpty=`1` &selectFields=`*` &display=`20` &paginate=`pages` &pageLimit=`1` &pageAdjacents=`1` &tpl=`@CODE:
					<div class="col-md-6 col-sm-6 col-xs-12">
                        <div class="user-image-box">
                           <div class="img-box">
							   <img src="[+photo+]" class="img-responsive center-block" alt="[+fullname+]">
							</div>
							<div class="content-area">
                              <div class="">
                                 <h2><a href="">[+fullname+]</a></h2>
								  <ul class="contact-details">
                                      <li><i class="fa fa-map-marker"></i> [+state+], [+street+]</li>
                                      <li><i class="fa fa-envelope"></i> [+email+]</li>
                                      <li><i class="fa fa-phone"></i> [+phone+]</li>
									  <li><i class="fa fa-clock-o"></i> [+date+]</li>
                                   </ul>
                              </div>
                              <div class="text-center"><a href="[~36~]?aid=[+id+]" class="btn btn-default btn-sm">Подробнее <i class="fa fa-angle-double-right"></i></a></div>
                           </div>
                        </div>
					</div>` 
&TplPrevP=`@CODE: <li><a href="[+link+]"><i class="fa fa-angle-left"></i></a></li>`
&TplPage=`@CODE: <li><a href="[+link+]">[+num+]</a></li>`
&TplDotsPage=`@CODE: <li> ... </li>`
&TplCurrentPage=`@CODE: <li><a href="[+link+]">[+num+]</a></li>`
&TplNextP=`@CODE: <li><a href="[+link+]"><i class="fa fa-angle-right"></i></a></li>`
&TplWrapPaginate=`@CODE:<ul class="pagination">[+wrap+]</ul>`
!]
[+pages+]


Поскольку собственных страниц у зарегистрированных пользователей нет, здесь вывод из таблицы web_user_attributes с использованием екстендера user.
А при переходе на страницу пользователя (она на сайте одна) используется идентификатор по id пользователя, я его назвал aid, как было принято в самом начале для идентификации в FL.

VI. Вывод зарегистрированного пользователя на страницу.

[!showuser!]
<img src="[+user.photo+]" alt="[+user.fullname+]" class="profile-img img-responsive">
<h2>[+user.fullname+]</h2>
<ul class="contact-details">
    <li><i class="fa fa-map-marker"></i> [+user.state+], [+user.street+]</li>
    <li><i class="fa fa-envelope"></i> [+user.email+]</li>
    <li><i class="fa fa-phone"></i> [+user.phone+]</li>
	<li><i class="fa fa-globe"></i> [+user.country+]</li>
</ul>

Список данных пользователя можно добавить, у меня сделано, что остальные данные выводятся только для зарегистрированных пользователей (так было в ТЗ).
Можно так же добавить форму для отправки сообщения данному пользователю с параметром
&to=`[+user.email+]`

А если этот раздел только для админа сайта, то в форму можно добавить блокировку пользователя с полем причины блокировки.
При этом можно предусмотреть фильтр в DocLister, чтобы объявления заблокированного пользователя тоже не выводились, как на странице пользователя, так и вообще на сайте.

Сам showuser, это старый добрый сниппет из закромов, немножко актуализировал
//Вызов [!showuser? &user=`[*aid*]`!], на странице с get [!showuser!]
	
$user = isset($user) ? $user : $modx->db->escape($_GET['aid']);
$dateFormat = isset($dateFormat) ? $dateFormat : '%d.%m.%Y в %H:%M';

// Получаем плейсхолдеры

	$currentWebUser = $modx->getWebUserInfo($user);
	$modx->setPlaceholder('user.id', stripslashes($currentWebUser['id']));
	$modx->setPlaceholder('user.username', stripslashes($currentWebUser['username']));
	$modx->setPlaceholder('user.fullname', stripslashes($currentWebUser['fullname']));
	$modx->setPlaceholder('user.internalkey', $currentWebUser['internalKey']);
	$modx->setPlaceholder('user.email', $currentWebUser['email']);
	$modx->setPlaceholder('user.phone', $currentWebUser['phone']);
	$modx->setPlaceholder('user.mobilephone', $currentWebUser['mobilephone']);
	$modx->setPlaceholder('user.city', $currentWebUser['city']);
	$modx->setPlaceholder('user.street', $currentWebUser['street']);
	$modx->setPlaceholder('user.dob', strftime('%m-%d-%G', $currentWebUser['dob']));
	$modx->setPlaceholder('user.country.integer', $currentWebUser['country']);
	$modx->setPlaceholder('user.state', $currentWebUser['state']);
	$modx->setPlaceholder('user.zip', $currentWebUser['zip']);
	$modx->setPlaceholder('user.fax', $currentWebUser['fax']);
	$modx->setPlaceholder('user.photo', $currentWebUser['photo']);
	$modx->setPlaceholder('user.comment', stripslashes($currentWebUser['comment']));
	$modx->setPlaceholder('user.logincount', $currentWebUser['logincount']);
	$modx->setPlaceholder('user.createdon', strftime($dateFormat, $currentWebUser['createdon']));
	$modx->setPlaceholder('user.lastlogin', strftime($dateFormat, $currentWebUser['lastlogin']));
	$modx->setPlaceholder('user.thislogin', strftime($dateFormat, $currentWebUser['thislogin']));
	$modx->setPlaceholder('user.blocked', $currentWebUser['blocked']);
	
// Получаем плейсхолдеры из списка

	$modx->setPlaceholder('user.country', stringForCountryInt3($currentWebUser['country']));
	$modx->setPlaceholder('user.gender', stringForGenderInt3($currentWebUser['gender']));

	function stringForCountryInt3($countryInt)
	{
		switch ($countryInt)
		{
			case "176" : return 'Российская Федерация'; break;
			case "11" : return 'Армения'; break;
			case "20" : return 'Беларусь'; break;
			case "109" : return 'Казахстан'; break;
			case "220" : return 'Украина'; break;
		}
	}

	function stringForGenderInt3($genderInt)
	{
		if ($genderInt == 1)
		{
			return 'Мужской';
		}
		else if ($genderInt == 2)
		{
			return 'Женский';
		}
		else
		{
			return 'Другое';
		}
		
	}

Самому не нравится этот сниппет, особенно если много стран вообще будет портянка, но пока так.

VII. Вывод объявлений зарегистрированного пользователя на его страницу.
Здесь все просто
[!DocLister? &tvPrefix=`` &display=`30` &filters=`AND(tv:aid:is:[+user.id+])` &prepare=`priceformat,imgformat` &tvImg=`img` &phpthumb=`w=237,h=188,zc=1,bg=ffffff` &depth=`3` &parents=`2` &dateFormat=`%d.%m.%Y в %H:%M` &dateSource=`createdon` &orderBy=`id DESC` &tvList=`img,price` &addWhereList=`template='11'` &showNoPublish=`0` &tpl=`@CODE: ....`!]


P.S.
Маленькое, но полезное дополнение в форму удаления объявления (раздел III)
Если добавить параметр
&defaultsSources=`param:contentDefaults`

то в форму можно вывести заголовок объявление и все что посчитаете нужным, чтобы обезопасить пользователя от случайного удаления не того объявления.
Я добавил только название, теперь в шаблоне формы ссылка с названием удаляемого объявления
<h4>Удаление объявления #[+id+] : <a href="[~[+id+]~]" target="_blank">[+pagetitle+]</a></h4>
  • avatar paic
  • 0
Спасибо за критику, плюсую.
Неправда, есть
Не нашел, наверное плохо искал. Почему и полез в файл контролера разобраться.
Они используются после того, как запись создана, чтобы в письме написать, кто ее создал. Не знаю, зачем до этого момента в форме нужны данные о пользователе, но сниппет userinfo для их получения не нужен, потому что можно использовать параметр defaultsSources. [+content.url+] придется самостоятельно генерировать плагином, это ограничение MODX.
Я в курсе, что можно, и в другом проекте делал. В доках написано, что можно использовать несколько источников и прописывать через точку с запятой, но у меня такой финт почему-то не получился
&defaultsSources=`param:contentDefaults;user:web`

и даже источники местами менял
Кем не предусмотрена?
У меня не сработало, документ не переместился и не скопировался. А потом подумал и посчитал это для проекта лишним. Но будет полезно позже, года будут добавляться города на поддоменах (или в категориях, пока ясности нет)
Зачем изобретать запись в базу, когда она уже изобретена? Для фронта нужна только верстка и js.
Не знал и наверное, не осилю. В общем, на что способен, то и сделал))
rowClass1
Таких параметров в доках нет, но можно посмотреть в контроллере — это обнуление проверок повторной отправки и времени между повторными отправками.
Неправда, есть.

1. [+content.url+], а так же [+user.fullname+], [+user.email+] и т.д., как сказано в доках
docs.evo.im/04_extras/formlister/sozdanie_i_redaktirovanie_dokumentov_polzovatelyami.html
почему-то не работают. Собственно, поэтому и использовал в форме препаре userinfo.
Они используются после того, как запись создана, чтобы в письме написать, кто ее создал. Не знаю, зачем до этого момента в форме нужны данные о пользователе, но сниппет userinfo для их получения не нужен, потому что можно использовать параметр defaultsSources. [+content.url+] придется самостоятельно генерировать плагином, это ограничение MODX.

3. При редактировании не предусмотрена смена директории parent, форма работает строго по id документа. А возможно влиять на parent? Т.е. сменить директорию, к которой размещено объявление, или разместить объявление сразу в нескольких директориях (физически, а
Кем не предусмотрена?

6. Загрузка картинок в SimpleGallery надо все же доделать, чтобы была и сортировка (запись в поле sg_index). А еще лучше, сделать нормальную галерею для фронта, а может у кого-то и есть — поделитесь.
Зачем изобретать запись в базу, когда она уже изобретена? Для фронта нужна только верстка и js.
При установки шопкипера через extras идет сниппет SHKUserProfile. внем вроде уже есть. или написать свой там пару строчек кода всего
  • avatar paic
  • 0
Спасибо, ищу… Но вот залить свой PMA как то не дошел, попробую, хотя все это странно, на денвере за много лет вообще никогда таких (да и других тоже) проблем не было.
ага, спасибо!
Код транслитерации можно заменить на штатный

if (!class_exists('TransAlias')) {
require_once 'assets/plugins/transalias/transalias.class.php';
}
$trans = new TransAlias($modx);
$trans->loadTable('russian', 'Yes');

$output = $trans->stripAlias($input,'lowercase alphanumeric','dash');
Попробуй Adminer
Попробуй HeidiSQL (идет с Open Server)
Попробуй сменить версию PHP (у меня было на одном хостинге под определенной версией PHP PHPMyAdmin видел только первые несколько таблиц)
Попробуй сам залей в папку с сайтом более новую или старую версию PHPMyAdmin
  • avatar paic
  • 0
Неужто никто Open Server'ом не пользуется?
  • avatar eXtream
  • 0
Спасибо!

Попробую тогда!
  • avatar Dmi3yy
  • 0
Можно обновить и с 0.9.3 до 1.4.5 все реально и особых проблем нет.

но обязательно делайте бекап. + Проверьте версию php под новую версию настоятельно рекомендую 7.1
  • avatar eXtream
  • 0
Можно вопрос, ко мне обратился клиент с просьбой обновить CMS с версии 1.1b-d7.1.2 до последней версии.

Можно ли легко обновить админку? Или это не реально?
  • avatar Redduck
  • 0
Почему сразу — «какашка». Бывает так что после письма в поддержку сразу устанавливают всё необходимое или дают возможность самому это сделать. И только после этого можно сказать — да, всё таки «какашка» или «ничего, потянет».
  • avatar redhat
  • 0
Значит хостинг «какашка» у вас. MySQL старая/не рабочая, а MySQLi вообще нет. Меняйте хостинг
  • avatar skmskm
  • 0
сделал, получил: Could not load DBAPI class.
  • avatar redhat
  • 0
в конфиге mysqli стоит?
$database_type     = 'mysqli';
  • avatar Dmi3yy
  • 0
Что то не то с mysql версией на хостинге :)
  • avatar shden
  • 0
Спасибо за ответ, но Вы описали подмену шаблона, а вопрос немного в другом, интересует именно ПОДМЕНА КЛАССОВ.