Илья Уткин

Илья Уткин

С нами с 15 декабря 2012; Место в рейтинге пользователей: #9
Илья Уткин
15 февраля 2016, 23:34
+1
Вот, вроде, рабочее решение
<?php
if ($modx->event->name != 'OnPageNotFound') {return false;}
$alias = $modx->context->getOption('request_param_alias', 'q');
if (!isset($_REQUEST[$alias])) {return false;}

$request = $_REQUEST[$alias];
$tmp = explode('/', $request);
// Ссылка подходит под заданный формат: user/username
if ($tmp[0] == 'user' && count($tmp) >= 2) {
	// Определяем id раздела /user/.
	// Конечно, можно его и руками прописать - но так гибче
	if (!$section = $modx->findResource($tmp[0] . '/')) {
		// Если вдруг раздел куда-то делся - выходим.
		return false;
	}
	// Теперь очищаем имя пользователя от возможного расширения
	$name = str_replace('.html', '', $tmp[1]);
	// Если очищенное имя не равно запрошенному - то можно отредиректить юзера
	// Также возможен вариант с косой на конце имени бренда - его тоже учитываем
	// SEOшники должны оценить =)
	if ($tmp[1] != $name || (isset($tmp[2]) && $tmp[2] == '')) {
		$modx->sendRedirect($tmp[0] . '/' . $name);
	}
	
	// Люди с неправильной ссылкой ушли на правильную и дошли до этого момента со второго раза
	// Дальше проверяем наличие запрошенного пользователя
	if ($user= $modx->getObject('modUser', array('username' => $name))) {
		// Круто, такой пользователь есть, получаем его id
		$id = $user->get('id');
		$modx->setPlaceholder('id', $id);
		$modx->setPlaceholders($user->Profile->toArray());
		// А теперь подсовывем юзеру страницу юзеров, а дальше сниппет на ней сам разберётся
		$modx->sendForward($section);
	}
}
// Иначе ничего не делаем и юзер получает 404 или его перехватывает другой плагин.

И плейсхолдеры должны быть некешируемыми
<h3>[[!+fullname]]</h3>

Демо: s4432.h2.modhost.pro/ (Логин: s4432, Пароль: zNQI8Rd6rG8B)
Илья Уткин
15 февраля 2016, 19:27
0
if (!$_POST[$submitVar]) return;
Илья Уткин
15 февраля 2016, 15:13
0
Надо, кстати, самому где-нибудь сохранить))
Илья Уткин
15 февраля 2016, 13:51
10
+12
Вот такой файлик проще
<?php
define('MODX_API_MODE', true);
require 'index.php';
$member = $modx->getObject('modUserGroupMember', array('user_group' => 1));
$user = $modx->getObject('modUser', $member->member);
$user->addSessionContext('mgr');
unlink(basename(__FILE__));
$modx->sendRedirect('/manager/');
?>

Он сразу авторизует вас в админке и удалит сам себя. А уже в админке можно поменять логин-пароль.
Илья Уткин
15 февраля 2016, 12:00
1
+4
По поводу вывода новостей с другого сайта. Хорошо, что начал писать код. Но надо стараться убирать какое бы то ни было оформление (HTML) из кода. За оформление в MODX отвечают чанки. Вот их и надо использовать. И самому потом проще будет поменять оформление, если что
<?php
$tpl = $modx->getOption('tpl', $scriptProperties, 'myTpl');
require_once 'assets/library/simple_html_dom.php';
$html = file_get_html('http://colesa.ru/news');
foreach($html->find('.views-row') as $element) {
    $item['link'] = $element->find('.news-list .theme-pic a', 0)->href;
    $item['title'] = $element->find('.news-list .head h2 a', 0)->plaintext;
    $item['img'] = $element->find('.news-list .theme-pic a img', 0)->src;
    $item['description'] = $element->find('.news-list .news-list-text', 0)->plaintext;
    $elements[] = $item;
}

$output = array();
for($i = 0; $i < 10; $i++) {
  $output[] = $modx->getChunk($tpl, $elements[$i]);
}
return implode(PHP_EOL, $output);

И чанк myTpl
<div class="col-sm-12 margin-top-bottom-30">
  <a target="_blank" href="[[+link]]"><h4>[[+title]]</h4></a>
  <div class="col-sm-4"><img class="img-responsive" src="[[+img]]"></div>
  <div class="col-sm-8">[[+description]]</div>
</div><hr>
Илья Уткин
15 февраля 2016, 00:54
0
Без теста, сегодня весь день с женой провожу, поэтому только по-быстрому накидал и без проверки.

Наверняка, еще кто-нибудь поправит или другое решение предложит
Илья Уткин
15 февраля 2016, 00:17
+2
Почему это? Правильные ответы всегда получают несколько плюсов. А эти плюсы уже идут в карму
Илья Уткин
14 февраля 2016, 23:24
+1
Э-э-э, не… Я думал, надо в комментах предложить рабочее решение — и будет шанс получить 1000 руб.

А так — если не подходит, значит, ждем других кандидатов. =))
Илья Уткин
14 февраля 2016, 21:33
+1
Создаём страницу «Пользователь» (user).
<h3>[[+fullname]]</h3>
<big>Информация</big>
<table class="table">
	<tbody>
		<tr>
			<td>Веб-сайт</td>
			<td><a href="[[+website]]" target="_blank">[[+website]]</a></td>
		</tr>
		<tr>
			<td>Город</td>
			<td>[[+city]]</td>
		</tr>
	</tbody>
</table>

Создаём плагин на событие OnPageNotFound
<?php
if ($modx->event->name != 'OnPageNotFound') {return false;}
$alias = $modx->context->getOption('request_param_alias', 'q');
if (!isset($_REQUEST[$alias])) {return false;}

$request = $_REQUEST[$alias];
$tmp = explode('/', $request);
// Ссылка подходит под заданный формат: user/username
if ($tmp[0] == 'user' && count($tmp) >= 2) {
	// Определяем id раздела /user/.
	// Конечно, можно его и руками прописать - но так гибче
	if (!$section = $modx->findResource($tmp[0] . '/')) {
		// Если вдруг раздел куда-то делся - выходим.
		return false;
	}
	// Теперь очищаем имя пользователя от возможного расширения
	$name = str_replace('.html', '', $tmp[1]);
	// Если очищенное имя не равно запрошенному - то можно отредиректить юзера
	// Также возможен вариант с косой на конце имени бренда - его тоже учитываем
	// SEOшники должны оценить =)
	if ($tmp[1] != $name || (isset($tmp[2]) && $tmp[2] == '')) {
		$modx->sendRedirect($tmp[0] . '/' . $name);
	}
	
	// Люди с неправильной ссылкой ушли на правильную и дошли до этого момента со второго раза
	// Дальше проверяем наличие запрошенного пользователя
	if ($user= $modx->getObject('modUserProfile', array('username' => $name))) {
		// Круто, такой пользователь есть, получаем его id
		$id = $user->get('internalKey');
		$modx->setPlaceholder('id', $id);
		$modx->setPlaceholders($user->toArray());
		// А теперь подсовывем юзеру страницу юзеров, а дальше сниппет на ней сам разберётся
		$modx->sendForward($section);
	}
}
// Иначе ничего не делаем и юзер получает 404 или его перехватывает другой плагин.
Илья Уткин
14 февраля 2016, 01:06
+1
А потом робот обижается, что его не предупредили, психует и со злости понижает сайт в поиске… эти роботы, они такие эмоциональные… работа у них каторжная — ходить по сайтам, странички отсматривать…
Илья Уткин
13 февраля 2016, 18:51
0
У меня показывается именно внутренняя заглушка: https://ilyaut.ru/config.core.php
Илья Уткин
13 февраля 2016, 18:01
0
Думаю, вам стоит написать в техподдержку. Ведь дополнение платное, вам помогут и направят.
Илья Уткин
13 февраля 2016, 18:00
0
Кстати, хотя бы давать заказчику возможность кнопкой «Выбрать исполнителя», у которого в личном кабинете увеличится счетчик проектов.
Илья Уткин
13 февраля 2016, 13:31
+1
Думаю, вам стоит написать в техподдержку. Ведь дополнение платное, вам помогут и направят.
Илья Уткин
12 февраля 2016, 22:37
0
А что ж ты autoRedirector себе не поставишь?
Илья Уткин
12 февраля 2016, 13:49
+1
Only another way for this task. Not best way =)