Andrey

Andrey

С нами с 08 августа 2016; Место в рейтинге пользователей: #215
Andrey
16 марта 2018, 21:33
0
Да все идет опять таки к тому же самому посту. Я уже писал ниже:
вроде очень похоже, да вот только есть беда… не помогает, у меня нет слитно написанных
@media(max-width: 768px)
почти все написано так
@media screen and (max-width: 768px)
Да и плюс ко всему это началось после подключения ssl сертификата, до него подобной проблемы вроде не было.
И я не совсем пойму как посмотреть из-за какого файла у меня затык идет! Если в логе сервера написано так:
kubsmeta.ru [Fri Mar 16 10:17:00 2018] [error] [pid 22303] sapi_apache2.c(362): [client 217.118.81.22:56104] PHP Fatal error:  Uncaught Sabberworm\\CSS\\Parsing\\UnexpectedTokenException: Identifier expected. Got \xe2\x80\x9c: gri\xe2\x80\x9d in /home/s/starknet01/Kubsmeta/public_html/core/components/minifyx/munee/vendor/sabberworm/php-css-parser/lib/Sabberworm/CSS/Parser.php:178\nStack trace:\n#0 /home/s/starknet01/Kubsmeta/public_html/core/components/minifyx/munee/vendor/sabberworm/php-css-parser/lib/Sabberworm/CSS/Parser.php(402): Sabberworm\\CSS\\Parser->parseIdentifier(true, false)\n#1 /home/s/starknet01/Kubsmeta/public_html/core/components/minifyx/munee/vendor/sabberworm/php-css-parser/lib/Sabberworm/CSS/Parser.php(357): Sabberworm\\CSS\\Parser->parsePrimitiveValue()\n#2 /home/s/starknet01/Kubsmeta/public_html/core/components/minifyx/munee/vendor/sabberworm/php-css-parser/lib/Sabberworm/CSS/Parser.php(189): Sabberworm\\CSS\\Parser->parseValue(Array)\n#3 /home/s/starknet01/Kubsmeta/public_html/core/components/minifyx/munee/vendor/sabberworm/php-css-parser/lib/Sabberworm/CSS/Parser.php(114): Sabberworm\\CSS\\Parser->parseIdentifier()\n#4 /home/s/starknet01/Kubsmet in /home/s/starknet01/Kubsmeta/public_html/core/components/minifyx/munee/vendor/sabberworm/php-css-parser/lib/Sabberworm/CSS/Parser.php on line 178
Не понятно как определить косячника.
Andrey
16 марта 2018, 15:32
0
вроде очень похоже, да вот только есть беда… не помогает, у меня нет слитно написанных
@media(max-width: 768px)
почти все написано так
@media screen and (max-width: 768px)
Да и плюс ко всему это началось после подключения ssl сертификата, до него подобной проблемы вроде не было.
Andrey
16 марта 2018, 13:26
0
:(
Andrey
06 декабря 2017, 19:32
0
Честь вам и хвала, добрый человек! До конца всей вашей долгой и счастливой жизни!
Andrey
05 декабря 2017, 23:40
0
Было решение сделать что то вроде такого:
В сниппете найдите функцию getResources, в ней есть цикл foreach. Там как раз используется переменная $i. Вот в конце этого цикла сразу перед $i++; добавьте код $resources[$i]['idx'] = $i;. Таким образом, у Вас появится новый плейсхолдер idx. Далее можете его использовать в чанке.
Но это доя сниппета Instagram Latest Posts, а он кривоватый чуть чуть!
Andrey
31 мая 2017, 01:49
0
вот точно такая же проблема! Гребаная ошибка на фронте красуется, не убрать! Форма работает и гуглкапча тоже… Подскажите как вы решили проблему?
Andrey
30 мая 2017, 11:50
0
убран! С самого начала пользования!
Andrey
30 мая 2017, 11:50
0
кажется понял! Вот это условие:
$section = 1; //id страницы профиля
как бы мне его заменить на динамическое определение страницы по алиасу:
users
:D
Andrey
29 мая 2017, 16:23
0
не, ну это все уже понятно! А я имею ввиду как плагин ваш должен выглядеть? С учетом всех всех изменений и чтобы удовлетворял условия:

1. Адрес страницы пользователя выглядит так: mysite.com/users/[[+идентификатор пользователя]]
2. В плагине учтены моменты с динамической. Ко всем алиасам со значением users применяется работа данного плагина, а так же формируются вкладки.
3. В плагине учтена динамика для вкладок. (См. выше)

Т.е.

Тема с плейсхолдерами конечно мне понятна, но как это технически организовывается? Добавляются ли значения в плагин или нет? Мне нужен просто готовый плагин с готовым вызовом, как это делается! Я ж говорю, дубина я совсем, если давать мне все по кусочкам, умею только разбирать и собираться обратно пока :(

Заранее спасибо!
Andrey
27 мая 2017, 23:51
0
просто понимаете какое дело, я как уже писал вышел практически полностью не шарю в пхп и даже написать плагин для меня было бы довольно таки сложно, поэтому если вам не трудно, не могли бы вы поделиться рабочим примером и с хотя бы небольшим описанием того, как на странице вывести феномом страницу пользователя! Я уже очень долго бьюсь, но так и не нашел решения, которое бы работало у меня… Благо хотя бы нашелся плагин который работает и вызывает страницу пользователя. Вот я прям очень хочу под него интегрировать виртуальные вкладки. Просто пока не один из перечисленных примеров не помог, а может и написан с мааааленькой ошибкой, которую я не найду, поскольку нифига не шарю в пхп :(
Andrey
27 мая 2017, 14:57
0
та ушел бы, если бы мозгов хватило :D

А то что вы предлагаете уже пробовал выше, говорю ж не работает :(
Andrey
27 мая 2017, 12:59
0
та не, мне бы сбахать, чтобы все динамично было…
Чтобы не создавать дохрена ресурсов и не привязывать перехват алиасов к конкретному ресурсу по его индентификатору!

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

И тем не менее, спасибо!
Andrey
27 мая 2017, 02:22
0
Приветствую! Уже прошло как много месяцев пользуюсь вашим плагином! Только он работает, а куча других примеров просто отказывается! Реально помогло! Но вот стукнула мне задача кое что еще сделать…
В этой теме: modx.pro/help/12183/ — я описал проблему, там человек пытается мне помочь, но через свой пример, а самая боль в том, что его пример у меня не работает хоть ты убейся! Может вы поможете интегрировать его пример в ваш! Заранее спасибо!
Andrey
27 мая 2017, 02:09
0
нашел ошибку у себя в том плагине, который вы предложили, но тем не менее чет ничего не работает :(

Выглядит он как вы описали:
<?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) {
                    	//...
                    	$modx->sendForward(1226);
                    }
					
					//Подразделы
                    elseif (count($chunks) == 3) {
                    	switch ($chunks[2]) {
                    			
                    		//Сообщения пользователя
                    		case 'posts':
                    				//...
                    				$modx->sendForward(1226);
                    			break;
                    				
                    		//Комментарии пользователя
                    		case 'comments':
                    				//...
                    				$modx->sendForward(1226);
                    			break;
                    			
                    		//Избранное пользователя	
                    		case 'favorites':
                    				//...
                    				$modx->sendForward(1226);
                    			break;
                    	}
                    }
						
					$modx->sendForward(1226);
				}

			}
					
			break;
				
		
	}
}
	
//иначе редиректим
При чем не работает даже страница пользователя
Andrey
26 мая 2017, 23:40
0
кокейси, вот собственно как я понял он должен выглядеть вот так:
<?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':
                    				//...
                    				$resource = $modx->getObject('modResource', array(   
                                    	'alias' => 'users'
                                    ));   
                                    $modx->sendForward($resource->get('id'));
                    			break;
                    				
                    		//Комментарии пользователя
                    		case 'comments':
                    				//...
                    				$resource = $modx->getObject('modResource', array(   
                                    	'alias' => 'users'
                                    ));   
                                    $modx->sendForward($resource->get('id'));
                    			break;
                    			
                    		//Избранное пользователя	
                    		case 'favorites':
                    				//...
                    				$resource = $modx->getObject('modResource', array(   
                                    	'alias' => 'users'
                                    ));   
                                    $modx->sendForward($resource->get('id'));
                    			break;
                    	}
                    }
						
					$resource = $modx->getObject('modResource', array(   
                    	'alias' => 'users'
                        ));   
                    $modx->sendForward($resource->get('id'));
				}

			}
					
			break;
				
		
	}
}
но один фиг, это ломает мой вызов и перестает работать страница пользователя, т.е. выдает 404 и по ID и по Username
конечно может я что то не так делаю в плане адресной строки:

вызывают так (мой username — K.STARK)
http://cwonline.ru/users/K.STARK
http://cwonline.ru/users/k.stark
http://cwonline.ru/users/kstark
не робит по всякому! Я уже запутался и вас запутал, и забадал! Вот думаю, может вы вышлите мне готовый вариант как у вас сделано и я попробую у себя интегрировать? Просто тот плагин что был до этого у меня для тсраницы пользователя был достаточно просто для понимания, ваще без заморочек. Поставил, плейсхолдеры с префикосм нафигачил и дело с концом! А тут… чет туплю сильно… но очень хочу разобраться!

Хоть плюсиками вас поддержу! :D
Andrey
26 мая 2017, 23:16
0
итак вот собственно сам плагин:

<?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) {
							
					}
						
					$resource = $modx->getObject('modResource', array(   
                    	'alias' => 'users'
                    ));   
                    $modx->sendForward($resource->get('id'));
				}

			}
					
			break;
				
		
	}
}

//Подразделы
elseif (count($chunks) == 3) {
	switch ($chunks[2]) {
			
		//Сообщения пользователя
		case 'posts':
				//...
				$resource = $modx->getObject('modResource', array(   
                    	'alias' => 'users'
                    ));   
                $modx->sendForward($resource->get('id'));
			break;
				
		//Комментарии пользователя
		case 'comments':
				//...
				$resource = $modx->getObject('modResource', array(   
                    	'alias' => 'users'
                    ));   
                $modx->sendForward($resource->get('id'));
			break;
			
		//Избранное пользователя	
		case 'favorites':
				//...
				$resource = $modx->getObject('modResource', array(   
                    	'alias' => 'users'
                    ));   
                $modx->sendForward($resource->get('id'));
			break;
	}
}
и либо я чет не понял, но теперь на страницы пользователя вообще не заходит, потому как я стер свой плагин вот этот, скоторым хотя бы страница пользователя отображалась:

switch ($chunks[0]) {
  // на всякий случай проверяем, что у нас есть корневой ресурс для пользователей, страница 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
26 мая 2017, 22:54
0
:D
Блин! А что именно допилить надо?
И кстати все что вы выше написали у меня установлено и включено, все же кое что у меня на феноме работает :D
Andrey
26 мая 2017, 22:48
0
та мне без разницы че надо получить, мне просто рабочий готовый вариант нужен, уже пол года ищу решение :D

Вот вы говорите [[+value]]! Да действительно, я чет тупанул, т.к. для [[*alias]] значение будет одно, потому как стоит символ "*" но вот как тогда должен выглядеть вызов, чтобы сработало то условие, которое мне нужно, а еще лучше расскажите подробнее как бы мне сделать, чтобы заработало это, вроде бы оно легче и быстрее:
{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'}