Прямое имя пользователя (без /users/)

3698
Nikitka:
А как можно сделать чтоб адрес выглядел не как сейчас например /users/nikitka просто http://instantcms.ru/nikitka
открываем /core/cms.php

находим обработку компонента по умолчанию (строка 1565)

Код PHP:
//если компонент не существует, считаем что это content
            $this->uri = 'content/'.$this->uri;
            $this->is_content = true;
            return 'content';
заменяем его на это

Код PHP:
if (intval($component)>0){
				$this->uri='users/'.$this->uri;
				return 'users';
				exit;
			}
			
			$useractions='wall-add,wall-delete,karma,city,hobby,search.html,awardslist.html,delaward, restoreprofile,delmsg,files,latest,positive,rating,invites,online,all,login,logout';
			if (strstr($useractions,$component)!==false){
				$this->uri='users/'.$this->uri;
				return 'users';
				exit;
			}
							
			$inDB = cmsDatabase::getInstance();
			$q="SELECT id from cms_users WHERE login like '".mysql_real_escape_string($component)."'";
			$result = $inDB->query($q) ;
			if (($result)&&($inDB->num_rows($result))){
				 $this->uri='users/'.$this->uri;
				return 'users';
			}	
			else{	
			
            //если компонент не существует, считаем что это content
            $this->uri = 'content/'.$this->uri;
            $this->is_content = true;
            return 'content';
			}
Для правильной обработки загрузки пользовательских данных необходимо в /core/cms.php после строки
1490 - $found = false;
дописать
Код PHP:
//tarzan: обработка загрузки пользовательских данных
		if ((strstr($uri,'users')!== false)&&($_SERVER['REQUEST_METHOD']!='GET')){
			return $uri;
			exit;
		}
для "заворачивания" со страниц users в краткую форму - дописываем в
url_rewrite.php
в начало (перед первым правилом)

Код PHP:
		$rules[] = array(
                    'source'  => '/^users\/(.+)$/i',
                    'target'  => '/{1}',
                    'action'  => 'redirect-301'
                 );		
		return $rules;		 

	
Внимание! Во избежание конфликта логинов пользователей с названиями компонентов, необходимо в списке запрещенных логинов пользователей (Компоненты-Регистрация вкладка Форма) дополнить список запрещенных имен названиями компонентов системы:
arhive
autoawards
banners
blogs
board
catalog
clubs
comments
content
faq
forms
forum
photos
price
registration
rssfeed
search
statistics
users
Так же, необходимо будет помнить, что не следует в дальнейшем создавать разделы материалов или статьи с URLами
wall-add,wall-delete,karma,city,hobby,search.html,awardslist.html,delaward, restoreprofile,delmsg,files,latest,positive,rating,invites,online,all
- их не будет "видно"
Быстрый Lightbox | Субдомен имени пользователя (user.instantcms.ru)
Комментарии (52)
͡﴾͡๏̯͡๏﴿ 13 октября 2011 в 01:05 +2
Отлично!А как быть с  ПС Ведь приндексированные страницы уже имеют в адресе этот USERS !Может как то редиректить с  http://instantcms.ru/users/nikitka  на http://instantcms.ru/nikitka
Все равно спасибо и плю Вам!Буду пробовать что с этого получиться )
Protomoto 13 октября 2011 в 01:08 +2
работает и старый адрес тоже, т.е. поисковики разницу не заметят
͡﴾͡๏̯͡๏﴿ 13 октября 2011 в 01:21 0
Вроде все работает!Спасибо большое!Только вот один вопрос-не отразится ли это изменение на каких нибудь других функциях сайта?
Protomoto 13 октября 2011 в 01:28 0

как в анекдоте

admin: предупреждение за мат

для заворачивания можно дописать в url_rewrie.php
$rules[] = array(
                    'source'  => '/^users\/(.+)$/i',
                    'target'  => '/{1}',
                    'action'  => 'redirect-301'
                 );

НО будет проблема с вложенными страницами (users/1/messages.html) - нужно еще с регекспом поколдовать

Эдька 13 октября 2011 в 11:37 +1
анекдот прикольный)))))))))))))))))
͡﴾͡๏̯͡๏﴿ 13 октября 2011 в 01:31 0
Перестали работать статьи-ведет на 404  ошибку!Я создал статью  которая имела адрес www.мой сайт/igra   после изменений в cms.php  эта ссылка стала недействительна!Все остальное вроде в норме!Есть идеи по этому поводу?
Protomoto 13 октября 2011 в 01:43 0
а есть пользователь игра?... сейчас подправлю код
͡﴾͡๏̯͡๏﴿ 13 октября 2011 в 01:46 0
не такого пользователяя!Просто не одна статья не работает!
Protomoto 13 октября 2011 в 01:54 +1
Изменил код, смотри в тексте
͡﴾͡๏̯͡๏﴿ 13 октября 2011 в 02:00 0
tarzan поправил Ваш код-все работает!Буду тестить дальше и спасибо большое за проявленное внимание к моей просьбе!
                                        +++++++
͡﴾͡๏̯͡๏﴿ 13 октября 2011 в 02:08 0
ПРИ ДОБАВЛЕНИИ  
    $rules[] = array(
                    'source'  => '/^users\/(.+)$/i',
                    'target'  => '/{1}',
                    'action'  => 'redirect-301'
                 );

ССЫЛКИ ТИПА http://instantcms.ru/users/nikitka  ; ВЕДУТ ПРОСТО НА БЕЛУЮ СТРАНИЧКУ!F КАК ЖЕ БЫТЬ ?ВЕДЬ ВО ВСЕМ ДВИЖКЕ  ПЕРЕЧЕНЬ ПОЛЬЗОВАТЕЛЕЙ ДА И В ЛЮБОМ МЕСТЕ ГДЕ ЕСТЬ ССЫЛКА НА СТРАНИЧКУ ПОЛЬЗОВАТЕЛЯ ДВИЖЕК ФОРМИРУЕТ ИМЕННО С "USERS"КаК УКАЗАТЬ ЧТОБ ССЫЛКА ФОРМИРОВАЛАСЬ ТИПА http://instantcms.ru/nikitka  ?
Protomoto 13 октября 2011 в 08:37 0
а у меня нормально пересылает сайт http://instantcms.ru/users/nikitka -> http://instantcms.ru/nikitka
Давай в частном порядке, через сообщения. Линк сайта, код url_rewrite.php
Сергей Игоревич 13 октября 2011 в 09:47 0
Всё думаю как сделать с $username.example.com переправлять на блог пользователя...
Protomoto 13 октября 2011 в 10:07 +1
есть такое решение, сейчас опубликую
Protomoto 13 октября 2011 в 10:28 0
http://instantcms.ru/blogs/modifikaci-fiksy-instanta/subdomen-imeni-polzovatelja-user-instantcms-ru.html

так перенаправлять в профиль
в блог - нужно немножко доработать
переделать запрос на получение названия блога и изменить соответственно перенаправление
ssh2k 13 октября 2011 в 13:02 0
Спасибо, что реализовали, но хотелось бы это что бы было в дефолтном релизе если такое возможно.вопрос наверно больше к разработчикам как и поддомены очень интересны.
Крылов Сергей 13 октября 2011 в 23:55 0
Всё работает замечательно.

Но, во время тестирования, заметил, что удалить запись со стены пользователя не получается - 404 ошибка.
Protomoto 14 октября 2011 в 11:15 0
Да, уважаемые коллеги, писал на для себя, писал ответ на вопрос КАК, показал куда копать, но код не тестировал на 100%.
Посему, если будут баги - пишите, будем исправлять

На текущий момент обновлена статья: теперь фото, файлы, записи стены, аватары загружаются нормально
Остается пока не решенной проблема скачивания загруженных файлов
◦ Ӎɑƙҫиӎ ◦ Ᵽɑɗиớӊớβ 14 октября 2011 в 00:35 +1
очень хотелось бы услышать по этому поводу мнение разработчиков.На сколько это реально,как грузят сервер редиректы,
насколько это безопастно и т. п.
Protomoto 14 октября 2011 в 11:28 0
От себя могу сказать, что для правильной интеграции такого механизма в CMS необходима значительная переработка компонента Пользователи - сейчас в работе компонента используется три "правила" обращения к данным пользователя:
1. Когда первым в строке запроса идет логин пользователя (собственно, профиль http://instantcms.ru/users/nikitka)
2. Когда первым в строке запроса идет ID пользователя (http://instantcms.ru/users/1/messages.html)
3. Когда первым в строке идет операция или раздел (http://instantcms.ru/users/rating/)

таким образом, проблематично однозначно определять принадлежность запроса к компоненту Пользователи - приходится накладывать ограничения, что описаны в конце статьи.
Насколько я понимаю, Instant был изначально спроектирован, с ориентацией на статьи/материалы, теперь же идет декларация социальности движка. Поэтому, следует что-то делать:
1. Либо переделывать компонент пользователей
2. Либо включать статьи/материалы в рядовые компоненты, а не "если ничего из вышеописанного - значит это статья". Таким правом наделять обработку запросов компонентом Пользователи
Korvin 19 октября 2011 в 01:31 0
Такая же проблема, как у Nikitka - выдает белую страницу при переходе на любое из поле, где раньше был /users

Пока что убрал строчку 'action'  => 'redirect-301'

Но вид ссылок остался - т.к. теперь не перенаправляет.
_______________________________________________________
Если нашли решение, подскажите, пожалуйста! Буду благодарен!
Protomoto 19 октября 2011 в 09:32 0
Korvin, давайте в аську 159543202 или скайп kakoetytimyasvobodnoe
Protomoto 19 октября 2011 в 17:08 0
В результате длительного разбора полета выяснилось, что при работе с custom_rewrite.php происходят глюки. Поэтому правила нужно дописывать в начало основного url_rewrite.php
Виктор Кел 25 октября 2011 в 23:47 0
Клёво !!! МОЛОДЕЦ !!!
С таким раскладом приятней url выглядит .
СПАСИБО!!!!!!
Виктор Кел 26 октября 2011 в 01:18 0
Интересная штука происходит :), не получается выйти с сайта и войти на сайт под своим логином и паролем , а так все прекрасно работает.
tarzan вы не в курсе из за чего так происходит ?
Korvin 26 октября 2011 в 02:16 0
ура!!! (сори за неуместную эмоцию) - оказывается не у одного меня эта проблема.

Очень хотелось бы её решить! Могу предоставить доступ по фтп на свой сайт для поиска решения!
Виктор Кел 26 октября 2011 в 16:59 +1
я избавился от этого таким способом :
в место этого
Код PHP:
<?
function custom_rewrite_rules(){
		$rules[] = array(
                    'source'  => '/^users\/(.+)$/i',
                    'target'  => '/{1}',
                    'action'  => 'redirect-301'
                 );		
		return $rules;		 
}				 
?>	
поставил это

Код PHP:
	$rules[] = array(
                    'source'  => '/^users\/(.+)$/i',
                    'target'  => '/{1}',
                    'action'  => 'redirect-301'
                 );	
получилось вот так

Код PHP:
  function rewrite_rules(){     
             
        //
        // Вход / Выход
        //
            
              

	$rules[] = array(
                    'source'  => '/^users\/(.+)$/i',
                    'target'  => '/{1}',
                    'action'  => 'redirect-301'
                 );	
	


        $rules[] = array(
                            'source'  => '/^admin$/i',
                            'target'  => '/admin/index.php',
                            'action'  => 'redirect'
                         );

        $rules[] = array(
протестировал на всех браузерах , пока работает всё :)
Protomoto 26 октября 2011 в 17:08 0
Виктор, замечательно что Вы нашли время исправить. Я обязательно внесу ваши исправления в статью, только не могу найти ни одного отличия... подскажите что было исправлено?... а, господи, я ж оставил функцию для customrewrite...
Protomoto 26 октября 2011 в 17:11 0
...ну написано же в начале url_rewrite.php про custom_rewrite_rules() где и зачем его использовать... неужели вот так тупо берем и копируем не глядя?
Виктор Кел 26 октября 2011 в 17:29 0
приношу вам уважаемый tarzan свои извинения ! :)
nedoriko 12 декабря 2011 в 14:48 0
Тарзан, действительно просто тупо копируем не глядя. Спасибо Виктор, вроде все работает.
Виктор Кел 26 октября 2011 в 17:39 +1
вот попалось нашёл , что на странице " ЛЮДИ" (users) , когда переходишь на вторую или третью страницы перекидывает на страницу ошибки , той по которая показывает , что этой страницы не найдено , и плюс к этому при нажатии на кнопку "позитивные" и "рейтинг" тоже самое .
tarzan , буду благодарен за подсказку , как исправить это .
Korvin 28 октября 2011 в 15:10 0
Виктор, решение нашли?
Виктор Кел 29 октября 2011 в 12:42 0
Пока не было времени поиграться с этим , когда найду решение сразу же размещу его здесь и напишу тебе в личку ...
Korvin 29 октября 2011 в 23:13 0
:)
Sich 8 ноября 2011 в 19:55 0
Ребят работает или с ошибками?
nedoriko 12 декабря 2011 в 15:13 0
работает. вход, рега обычная (через логинзу не пробовал)но ошибки что описал Виктор в сообщении от 26 октября 2011 в 17:39 существуют.
Sich 8 ноября 2011 в 19:56 0
Ребят работает или с ошибками?
Виктор Кел 9 ноября 2011 в 23:48 0
не знаю как у всех , а у меня как описано чуть выше, и не хватает времени покопаться ...
YuGiN 22 ноября 2011 в 23:32 0
Будет работать не ккоректно. у меня вот ник. admin. т.е. если обычный юзер будет ко мне в профиль биться то он будет переходить на админку. не айс
Виктор Кел 26 ноября 2011 в 20:17 0
да,штука интересная , но, - значит придётся пока обойтись ...
nedoriko 10 декабря 2011 в 14:51 0
чтото у меня не пошло. сайт отключает напрочь и выдает ошибку 500
nedoriko 16 декабря 2011 в 01:04 0
нашел выход из положения.
для "заворачивания" со страниц users в краткую форму - дописываем в url_rewrite.php в начало (перед первым правилом) Код PHP:
ну и собственно сам код


так вот. если этот код не прописывать а все остальное сделать, то работает нормалек. ну или почти нормалек.тоесть эта ошибка
вот попалось нашёл , что на странице " ЛЮДИ" (users) , когда переходишь на вторую или третью страницы перекидывает на страницу ошибки , той по которая показывает , что этой страницы не найдено , и плюс к этому при нажатии на кнопку "позитивные" и "рейтинг" тоже самое .
больше не ошибка.
на профиль пользователя можно попасть как по ссылке .ru/users/test так и по .ru/test
этот вариант можно использовать в качестве красивой ссылке для привличения из вне
͡﴾͡๏̯͡๏﴿ 16 декабря 2011 в 04:21 0
Именно так и у меня сейчас работает -на двух вариантах!
moHAX 20 декабря 2011 в 11:16 0
нормального решения пока никто не нашел? Самому придется кумекать =))
vitalson9 6 февраля 2012 в 19:02 0
народ а когда как админ в свою учотку пытаешся зайти редиректит в админку как быть с этим?
DrCluster 13 февраля 2012 в 21:42 +1
Решил проблему при постраничном переходе по пользователям.
Для этого, вместо предложенного кода, в файле cms.php вставляем этот:

if (intval($component)>0){
$this->uri='users/'.$this->uri;
return 'users';
exit;
}
//DrCluster: ссылки теперь работают и при обычном просмотре юзеров, и при рейтинговом
$vzryv = explode(".",$component);
$useractions='wall-add,wall-delete,karma,city,hobby,search.html,awardslist.html,delaward,restoreprofile,delmsg,files,invites,online,all,login,logout,positive.html,rating.html';
if (strstr($useractions,$component)!==false || preg_match("|latest([0-9]+)|",$vzryv[0])!==0 || preg_match("|positive([0-9]+)|",$vzryv[0])!==0 || preg_match("|rating([0-9]+)|",$vzryv[0])!==0){
$this->uri='users/'.$this->uri;
return 'users';
exit;
}



$inDB = cmsDatabase::getInstance();
$q="SELECT id from cms_users WHERE login like '".mysql_real_escape_string($component)."'";
$result = $inDB->query($q) ;
if (($result)&&($inDB->num_rows($result))){
$this->uri='users/'.$this->uri;
return 'users';
}
else{

//если компонент не существует, считаем что это content
$this->uri = 'content/'.$this->uri;
$this->is_content = true;
return 'content';
}
iLoveNY 22 июня 2012 в 02:23 0
У меня после этого хака личные сообщение пользователей не удаляются. Ссылка site.ru/delmsg155(id сообщения).html ведет на страницу 404. В чем может быть проблема?
letsgo 22 июня 2012 в 03:31 -1
Вы сначала себя спросите, для чего вы его ставили себе. А потом когда ответ будет и проблема исчезнет.
iLoveNY 22 июня 2012 в 09:48 0
Ставил потому что, думал не к чему ссылкам этот хвост. Пусть и есть проблемы, но решаться же когда-нибудь. И если бояться багов, то вообще ненадо ничего менять на сайте и сидеть на дефолте. Как говариться: волков бояться в лес не ходить:)
DrCluster 9 июля 2012 в 05:21 0
Попробуйте в коде в массив $useractions добавить ещё delmsg. Через запятую. Нет времени этим заниматься, но скорее всего это решит проблему.
fgvyguyu 26 августа 2012 в 13:45 0
Не скачивались файлы у пользователей решил проблему также как и nedoriko. То есть не прописывал этот код
Код PHP:
  1. $rules[] = array(
  2. 'source' => '/^users\/(.+)$/i',
  3. 'target' => '/{1}',
  4. 'action' => 'redirect-301'
  5. );
  6. return $rules;
в url_rewrite.php