Andrey

Andrey

С нами с 08 августа 2016; Место в рейтинге пользователей: #213
Andrey
26 мая 2017, 22:33
0
Вы не поверите! Но чет не фурычит опять никак! Даже по прямой ссылке ничего не выдает!
Вот плагин сбахал, тот что выше с вашими модификациями, на страницу чтобы вывести контент уже до банального образа дошел:
[[*alias:is=`posts`:then=`Контент с Публикациями`]]
пробовал так же и вот этот вариант:
{var $user_page_type = $_modx->getPlaceholder('user_page_type')}

{switch $user_page_type}
	{case 'main'}
		000
	{case 'posts'}
		111
	{case default}
		000
{/switch}
при чем когда загружаю странцу пользователя то вот это условие {case default} или {case 'main'} выполняется, т.е.
на странице по адресу:
http://mysite.ru/users/[[!+user.id]]
выдает контент 000
А когда я пытаюсь перейти на другой алиас, напимер сюда
http://mysite.ru/users/[[!+user.id]]/posts
то условие {case 'posts'} не срабатывает и один фиг отображается то, что было на стартовой странице пользователя!
У меня вот вопрос, может плагин корявый и где то что то конфликтует? Или же его надо доконструировать, что бы начало работать это условие:
{var $user_page_type = $_modx->getPlaceholder('user_page_type')}

{switch $user_page_type}
	{case 'main'}
		000
	{case 'posts'}
		111
	{case default}
		000
{/switch}
Но вот тогда почему не работает это:
[[*alias:is=`posts`:then=`Контент с Публикациями`]]
чет я запутался вообще!

Andrey
26 мая 2017, 22:00
0
вот это я лопух…
$modx->sendForward(айди_страницы_users);
забыл то назначить ID…
вот теперь вы понимаете почему я не очень люблю феном и пхп, много закорючек!
а вот вопрос, как это можно к динамичности привести? Чтобы он не по айди вычислял страницу а по алиасу?
Andrey
26 мая 2017, 21:52
0
мде, в общем чет нифига не работает по всякому. + виртуальные вкладки мне кажется тоже не работают, а если быть точнее то я не знаю как проверить!

Дело в том, что первый раз установив плагин я обрадовался, т.к. по запросу например страницы:
mysite.ru/users/2/posts
он вроде бы сделал редирект и страница просто обновилась на странице пользователя, я подумал, что и должно быть, что вроде бы как надо теперь кастомизировать алиас для этих страничек! Да вот не тут то было, оказалось, что он так реагирует на все алиасы:
http://mysite.ru/users/2/wadwfw
http://mysite.ru/users/2/awdafw
http://mysite.ru/users/2/sgsgse
У меня вот вопрос, а ресурсы надо в админке создавать с этими алиасами? Может в этом дело :D
Andrey
26 мая 2017, 21:07
0
Нууу я так то обучаюсь потихоньку. Просто учусь пока на готовых примерах, разбираю их на запчасти, а потом собираю. Поэтому если не сложно не могли бы вы написать, как бы выглядел вызов фенома, чтобы прийти к выводу того, что мне надо! Если конечно это не трудно и это не выглядит как километр кода, чтобы вас не напрягать! Заранее спасибо!
Andrey
26 мая 2017, 20:51
0
[[+user_id:is=``:then=`обычная страница "списка всех пользователей"`:else=`формируем страницу профиля`]]
вот так сейчас у меня и реализовано! Но это только одна виртуальная страничка, а вот ваш вариант интересный, но феном пока даже с коментами плохо понимаю, потому как это почти пхп, а я в нем мягко говоря не шарю!

Вот момента когда происходит вот это:

{if $user}
	//оформляем страницу пользователя
{else}
	//оформляем общую страницу всех пользователей
{/if}
как впихнуть еще три виртуальные страницы Публикации, Коменты, Избранное в эту часть:

{if $user}
	//оформляем страницу пользователя
{else}
ведь с учетом работы плагина получается, что страница списка пользователей расположена по адресу:
www.sitename/users
а страница пользователя по адресу:
www.sitename/users/[[!+user.id]]
а вот виртуальные вкладки, например публикации:
www.sitename/users/[[!+user.id]]/posts
вот первые два варианта уживаются так как вы и написали, собственно у меня так и было еще давно:
[[+user_id:is=``:then=`обычная страница "списка всех пользователей"`:else=`формируем страницу профиля`]]
А вот как теперь сделать так, чтобы прийти к контенту на виртуальной странице:
www.sitename/users/[[!+user.id]]/posts
Andrey
26 мая 2017, 20:32
0
Еще раз приветствую! Действительно работает! Вроде бы вкладки определяет + я допилил автономности и динамичности, но вот есть небольшая проблема… Как теперь на этих вкладках вызывать то, что мне надо? Если вас не затруднит распишите пожалуйста! :D

Пробовал вот такую бурду:
[[*alias:is=`posts`:then=`Контент с Публикациями`]]
[[*alias:is=`comments`:then=`Контент с  Коментами`]]
[[*alias:is=`favorites`:then=`Контент с  Избранным`]]
При этом использовал небольшой динамиский фрагмент шаблона, где по факту должно было происходить переключение контента! Но чет пошло не по плану :(

Вот полный код плагина:

<?php
// обрабатываем только события OnPageNotFound, на случай, если отметили галкой и другие в настройках плагина
if ($modx->event->name != 'OnPageNotFound') {
    return false;
}
// на случай, если у нас настройки кто-то менял, получаем значение переменной, через которую передаются ссылки в modx от веб-сервера
$alias = $modx->context->getOption('request_param_alias', 'q');
// проверяем, что такая переменная есть, иначе и обрабатывать нечего
if (!isset($_REQUEST[$alias])) {
    return false;
}
// наш запрос, который нужно разобрать и обработать
$request = $_REQUEST[$alias];
// разбиваем ссылку на составляющие,
// как правило, будет что-то вроде users/username, на выходе будет массив с этими значениями
$chunks = explode('/', $request);

if (end($chunks) == '') {
	array_pop($chunks);
}

//Проверяем, что есть минимум 2 части ссылки (/users/ и /username/)
if (count($chunks) >= 2) {
	switch ($chunks) {
			
		//Cама страница пользователей
		case 'users':
			//проверяем существование пользователя
			if (!empty($chunks[1]) && $modx->getCount('modUser', array('username' => $chunks[1]))) {
				$user = $modx->getObject('modUser', array('username' => $chunks[1]));

				if ($user && $user->get('active') == 1) {
					$user_name = $user->get('username');
						
					//Приводим юзернейм к правильному регистру
					if ($chunks[1] != $user_name) {
						$chunks[1] = $user_name;
						$modx->sendRedirect(implode('/', $chunks));
					}
					
					//выставляем плейсхолдеры	
					$user_id = $user->get('id');
					$modx->setPlaceholder('user_id', $user_id);
					$modx->setPlaceholder('user_name', $user_name);
	
					//Страница профиля
					if (count($chunks) == 2) {
							
					}
					
					//Подразделы
					elseif (count($chunks) == 3) {
						switch ($chunks[2]) {
								
							//Сообщения пользователя
							case 'posts':
									
								break;
									
							//Комментарии пользователя
							case 'comments':
									
								break;
								
							//Избранное пользователя	
							case 'favorites':
									
								break;
						}
					}
						
					$modx->sendForward(айди_страницы_users);
				}

			}
					
			break;
				
		
	}
}
	
//иначе редиректим

// на всякий случай проверяем, что у нас есть корневой ресурс для пользователей, страница users
if (!$users = $modx->getObject('modResource', ['alias' => users])) {
    $modx->log(modX::LOG_LEVEL_ERROR, 'Entry point resource for users not found.');
    return false;
}
// а теперь обрабатываем нам запрос. 
switch ($chunks[0]) {
    // сверяем первую часть ссылки с алиасом нашего ресурса для пользователей, должны совпадать
    case $users->get('alias'):
        // еще одна проверка существования ресурса (наверное можно удалить, взял пример из реального проекта)
        if (!$usersSection = $modx->findResource($chunks[0])) {
            return false;
        }
        // у меня ссылки генерились с html, поэтому я вырезаю расширение перед поиском самого юзера 
        $userAlias = str_replace('.html', '', $chunks[1]);
        // еще одна проверка + убираем концевые слеши и редиректим на нормальную ссылку
        if ($chunks[1] != $userAlias || (isset($chunks[2]) && $chunks[2] == '')) {
            $modx->sendRedirect($chunks[0] . '/' . $userAlias);
        }
        // пробуем найти пользователя по username из запроса, если не нашли, то посылаем 404 заголовок
        // тут важно вручную послать страницу 404, иначе, если вернем просто ошибку, то у нас опять запустится обработчик 
        // 404 ошибки, опять запустится наш плагин, опять тут будет ошибка и привет бесконечный круг и ААААА! Ничего не работает!!!!!
        if (!$user = $modx->getObject('modUser', ['id' => $userAlias])) {
            $modx->sendForward($this->getOption('error_page'), $this->getOption('error_page_header', null, 'HTTP/1.0 404 Not Found'));
        }
        // пользоввателя нашли, теперь подгружаем его данные (профайл, расширенные поля и тд)
        /** @var modUserProfile $profile */
        $profile = $user->getOne('Profile');
        $extended = $profile->get('extended');
        // прописываем все наши данные в плейсхолдеры, чтобы потом на странице их вывести
        $modx->setPlaceholders($user, 'user.');
        $modx->setPlaceholders($profile, 'user.');
        $modx->setPlaceholders($extended, 'user.');

		// тут у меня еще момент, что пользователь может указать, что у него профиль приватный и его никому показывать нельзя,
        // поэтому в таком случае тоже 404 возвращаем. Но можно удалить
        // profile private, we should return not found error
        // if (isset($extended['private']) && $extended['private'] == 1) {
        //     $modx->sendForward($this->getOption('error_page'), $this->getOption('error_page_header', null, 'HTTP/1.0 404 Not Found'));
        // }

        // ну и отправляем нашу страницу с шаблоном профиля пользователя, где уже выводим всю его подноготную
        $modx->sendForward($usersSection);
        break;
}
Andrey
18 мая 2017, 19:17
0
хм… Спасибо тебе добрый человек! Сегодня буду пробовать!
Andrey
18 мая 2017, 02:20
0
Ладно, я понял… В пределах разумного сколько это будет стоить?
Andrey
23 декабря 2016, 01:28
0
Все очень плохо… :(
Andrey
23 декабря 2016, 01:27
0
Все очень плохо… :(
Andrey
20 декабря 2016, 05:12
0
Не, это конечно спасибо! Но как Вы могли увидеть из моих изысков, конструкция как раз и получилась из чтения документации и пользования «поиска» на сайте, в том числе и ссылка, которую вы предлагаете! Все это уже есть, посмотрите внимательнее в то что я описал!

Я же прошу здесь свежий взгляд, что я мог упустить или наоборот переборщил!
Я конечно не суперспециалист, но и не совсем глуп, чтобы сначала не попробовать воспользоваться поиском и документацией, это самое первое на что я обращаю свое внимание!
Andrey
18 декабря 2016, 03:40
0
Ну не ужели не у кого не было, такого, чтобы появлялись две кнопки «Еще записи»?
Andrey
16 декабря 2016, 20:18
0
Вот заметил, что подобные ошибки после глобального обновления Tickets и pdoTools выскакивают! На самом деле это не первый случай таких ошибок и не только с recapcha2 но с тем же mFilter2! Но там они естественно решались, но факт в том, что начали влазить портить вид фронта! Раньше если и бывали ошибки, то по крайней мере в фронт они не выскакивали!
Andrey
16 декабря 2016, 20:15
0
а вот стоит log_level — 1 у меня!

И поменять не получится! Файл ж перезаписывается каждый раз, когда кеш обновляется!
Та и честно сказать не помогло! Попробовал уже, даже не обновляя кеш, сохранить!
Andrey
15 декабря 2016, 15:38
0
Все обновлено!


Вызов:
[[!AjaxForm?
&form=`Main-contactForm`
&snippet=`FormIt`
&hooks=`recaptchav2,email`
&emailTpl=`emailtpl`
&emailSubject=`Обращения: проект [[++site_name]]`
&emailUseFieldForSubject=`1`
&emailTo=`[[+addressTo]]`
&emailReplyTo=`[[+contact_email]]`
&emailFromName=`[[++site_name]]`
&validate=`contact_name:minLength=^2^,
contact_email:email:required,
contact_message:minLength=^5^:required,
g-recaptcha-response:required`
&validationErrorMessage=`В форме содержатся ошибки!`
&successMessage=`Ваше сообщение успешно отправлено!`
]]
И смысл то в том, что эта ошибка выскакивает из-за гугловской рекапчи, при этом все прекрасно работает, форма отправляет данные, письма приходят! Убираю рекапчу нет ошибки, аяксформу по супер-минимуму комплектовал, толку ноль, виновна рекапча!

Как бы я уже писал, это не смертельно поменять её на яндекс капчу, но гугловская смотрится лучше, та и на мой взгляд надежнее!

Ругается на все, начиная с этой строки (см. выше):
if ($hook) { 
    $hook->setValue('recaptchav2_html', $recaptcha_html); // This won't re-render on page reload there's validation errors
    return true;
} else { // This works at least
    return $recaptcha_html;
}
Andrey
15 декабря 2016, 15:26
+2
Кстати так же хотелось бы добавить, что у некоторых (например у меня), несколько контекстов прилеплено, а именно сайтов, например 5! Вот вопрос, как будет работать этот виджет? Поэтому хотелось бы все же увидеть возможность регулирования и разделения потока статистики для каждого контента и вот зачем я говорил, про вывод во фронт сайта для каждого контекста отдельно!

А как и автор коммента выше, тоже готов пожертвовать копеечку, не жалко, только бы до ума допилить!
Andrey
15 декабря 2016, 15:20
0
тю! Та это я знаю, но вот я просто вынес админку во фронт некоторые возможности, для рядовых менеджеров
администраторов и хотелось бы им туда вот таких вот виджетов докрутить, чтобы они сами мониторили свои сайты, за которые они отвечают!

А так то я знаю, что можно просто кусок кода вставить и будет счастье! Вопрос зачем тогда для этого целый модуль для бэкенда! И однозначно отложил в избранное, компонент нужный, будет до ума доведен и для фронта, куплю без раздумий!
Andrey
15 декабря 2016, 03:13
+3
Эээх, можно было бы еще это дело во фронт выводить! Не пожалел бы еще тыщенку за модуль накинуть!