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

+26
4.74K

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

Nikitka
открываем /core/cms.php

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

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

  1. if (intval($component)>0){
  2. $this->uri='users/'.$this->uri;
  3. return 'users';
  4. }
  5.  
  6. $useractions='wall-add,wall-delete,karma,city,hobby,search.html,awardslist.html,delaward, restoreprofile,delmsg,files,latest,positive,rating,invites,online,all,login,logout';
  7. if (strstr($useractions,$component)!==false){
  8. $this->uri='users/'.$this->uri;
  9. return 'users';
  10. }
  11.  
  12. $inDB = cmsDatabase::getInstance();
  13. $q="SELECT id from cms_users WHERE login like '".mysql_real_escape_string($component)."'";
  14. $result = $inDB->query($q) ;
  15. if (($result)&&($inDB->num_rows($result))){
  16. $this->uri='users/'.$this->uri;
  17. return 'users';
  18. }
  19. else{
  20.  
  21. //если компонент не существует, считаем что это content
  22. $this->uri = 'content/'.$this->uri;
  23. $this->is_content = true;
  24. return 'content';
  25. }
  26.  
Для правильной обработки загрузки пользовательских данных необходимо в /core/cms.php после строки
1490 — $found = false;
дописать
  1. //tarzan: обработка загрузки пользовательских данных
  2. if ((strstr($uri,'users')!== false)&&($_SERVER['REQUEST_METHOD']!='GET')){
  3. return $uri;
  4. }
для "заворачивания" со страниц users в краткую форму — дописываем в
url_rewrite.php
в начало (перед первым правилом)

  1.  
  2.  
  3. $rules[] = array(
  4. 'source' => '/^users\/(.+)$/i',
  5. 'target' => '/{1}',
  6. 'action' => 'redirect-301'
  7. );
  8. return $rules;
  9.  
  10.  
Внимание! Во избежание конфликта логинов пользователей с названиями компонентов, необходимо в списке запрещенных логинов пользователей (Компоненты-Регистрация вкладка Форма) дополнить список запрещенных имен названиями компонентов системы:
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
— их не будет "видно"
+2
nikitka nikitka 13 лет назад #
Отлично!А как быть с ПС Ведь приндексированные страницы уже имеют в адресе этот USERS !Может как то редиректить с http://instantcms.ru/users/nikitka на http://instantcms.ru/nikitka
Все равно спасибо и плю Вам!Буду пробовать что с этого получиться )
+2
Protomoto Protomoto 13 лет назад #
работает и старый адрес тоже, т.е. поисковики разницу не заметят
0
nikitka nikitka 13 лет назад #
Вроде все работает!Спасибо большое!Только вот один вопрос-не отразится ли это изменение на каких нибудь других функциях сайта?
0
Protomoto Protomoto 13 лет назад #

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

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

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

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

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

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

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

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

На текущий момент обновлена статья: теперь фото, файлы, записи стены, аватары загружаются нормально
Остается пока не решенной проблема скачивания загруженных файлов
+1
artlab artlab 13 лет назад #
очень хотелось бы услышать по этому поводу мнение разработчиков.На сколько это реально,как грузят сервер редиректы,
насколько это безопастно и т. п.
0
Protomoto Protomoto 13 лет назад #
От себя могу сказать, что для правильной интеграции такого механизма в 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. Либо включать статьи/материалы в рядовые компоненты, а не "если ничего из вышеописанного - значит это статья". Таким правом наделять обработку запросов компонентом Пользователи
0
Korvin Korvin 13 лет назад #
Такая же проблема, как у Nikitka - выдает белую страницу при переходе на любое из поле, где раньше был /users

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

Но вид ссылок остался - т.к. теперь не перенаправляет.
_______________________________________________________
Если нашли решение, подскажите, пожалуйста! Буду благодарен!
0
Protomoto Protomoto 13 лет назад #
Korvin, давайте в аську 159543202 или скайп kakoetytimyasvobodnoe
0
Protomoto Protomoto 13 лет назад #
В результате длительного разбора полета выяснилось, что при работе с custom_rewrite.php происходят глюки. Поэтому правила нужно дописывать в начало основного url_rewrite.php
0
Виктор Кел Виктор Кел 13 лет назад #
Клёво !!! МОЛОДЕЦ !!!
С таким раскладом приятней url выглядит .
СПАСИБО!!!!!!
0
Виктор Кел Виктор Кел 13 лет назад #
Интересная штука происходит :), не получается выйти с сайта и войти на сайт под своим логином и паролем , а так все прекрасно работает.
tarzan вы не в курсе из за чего так происходит ?
0
Korvin Korvin 13 лет назад #
ура!!! (сори за неуместную эмоцию) - оказывается не у одного меня эта проблема.

Очень хотелось бы её решить! Могу предоставить доступ по фтп на свой сайт для поиска решения!
+1
Виктор Кел Виктор Кел 13 лет назад #
я избавился от этого таким способом :
в место этого
Код 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(
протестировал на всех браузерах , пока работает всё :)
0
Protomoto Protomoto 13 лет назад #
Виктор, замечательно что Вы нашли время исправить. Я обязательно внесу ваши исправления в статью, только не могу найти ни одного отличия... подскажите что было исправлено?... а, господи, я ж оставил функцию для customrewrite...
0
Protomoto Protomoto 13 лет назад #
...ну написано же в начале url_rewrite.php про custom_rewrite_rules() где и зачем его использовать... неужели вот так тупо берем и копируем не глядя?
0
Виктор Кел Виктор Кел 13 лет назад #
приношу вам уважаемый tarzan свои извинения ! :)
0
nedoriko nedoriko 12 лет назад #
Тарзан, действительно просто тупо копируем не глядя. Спасибо Виктор, вроде все работает.
+1
Виктор Кел Виктор Кел 13 лет назад #
вот попалось нашёл , что на странице " ЛЮДИ" (users) , когда переходишь на вторую или третью страницы перекидывает на страницу ошибки , той по которая показывает , что этой страницы не найдено , и плюс к этому при нажатии на кнопку "позитивные" и "рейтинг" тоже самое .
tarzan , буду благодарен за подсказку , как исправить это .
0
Korvin Korvin 13 лет назад #
Виктор, решение нашли?
0
Виктор Кел Виктор Кел 13 лет назад #
Пока не было времени поиграться с этим , когда найду решение сразу же размещу его здесь и напишу тебе в личку ...
0
Korvin Korvin 13 лет назад #
:)
0
Sich Sich 13 лет назад #
Ребят работает или с ошибками?
0
nedoriko nedoriko 12 лет назад #
работает. вход, рега обычная (через логинзу не пробовал)но ошибки что описал Виктор в сообщении от 26 октября 2011 в 17:39 существуют.
0
Sich Sich 13 лет назад #
Ребят работает или с ошибками?
0
Виктор Кел Виктор Кел 13 лет назад #
не знаю как у всех , а у меня как описано чуть выше, и не хватает времени покопаться ...
0
YuGiN YuGiN 12 лет назад #
Будет работать не ккоректно. у меня вот ник. admin. т.е. если обычный юзер будет ко мне в профиль биться то он будет переходить на админку. не айс
0
Виктор Кел Виктор Кел 12 лет назад #
да,штука интересная , но, - значит придётся пока обойтись ...
0
nedoriko nedoriko 12 лет назад #
чтото у меня не пошло. сайт отключает напрочь и выдает ошибку 500
0
nedoriko nedoriko 12 лет назад #
нашел выход из положения.
для "заворачивания" со страниц users в краткую форму - дописываем в url_rewrite.php в начало (перед первым правилом) Код PHP:
ну и собственно сам код


так вот. если этот код не прописывать а все остальное сделать, то работает нормалек. ну или почти нормалек.тоесть эта ошибка
вот попалось нашёл , что на странице " ЛЮДИ" (users) , когда переходишь на вторую или третью страницы перекидывает на страницу ошибки , той по которая показывает , что этой страницы не найдено , и плюс к этому при нажатии на кнопку "позитивные" и "рейтинг" тоже самое .
больше не ошибка.
на профиль пользователя можно попасть как по ссылке .ru/users/test так и по .ru/test
этот вариант можно использовать в качестве красивой ссылке для привличения из вне
0
nikitka nikitka 12 лет назад #
Именно так и у меня сейчас работает -на двух вариантах!
0
moHAX moHAX 12 лет назад #
нормального решения пока никто не нашел? Самому придется кумекать =))
0
vitalson9 vitalson9 12 лет назад #
народ а когда как админ в свою учотку пытаешся зайти редиректит в админку как быть с этим?
+1
DrCluster DrCluster 12 лет назад #
Решил проблему при постраничном переходе по пользователям.
Для этого, вместо предложенного кода, в файле 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';
}
0
iLoveNY iLoveNY 12 лет назад #
У меня после этого хака личные сообщение пользователей не удаляются. Ссылка site.ru/delmsg155(id сообщения).html ведет на страницу 404. В чем может быть проблема?
-1
letsgo letsgo 12 лет назад #
Вы сначала себя спросите, для чего вы его ставили себе. А потом когда ответ будет и проблема исчезнет.
0
iLoveNY iLoveNY 12 лет назад #
Ставил потому что, думал не к чему ссылкам этот хвост. Пусть и есть проблемы, но решаться же когда-нибудь. И если бояться багов, то вообще ненадо ничего менять на сайте и сидеть на дефолте. Как говариться: волков бояться в лес не ходить:)
0
DrCluster DrCluster 12 лет назад #
Попробуйте в коде в массив $useractions добавить ещё delmsg. Через запятую. Нет времени этим заниматься, но скорее всего это решит проблему.
0
fgvyguyu fgvyguyu 12 лет назад #
Не скачивались файлы у пользователей решил проблему также как и nedoriko. То есть не прописывал этот код
Код PHP:
  1. $rules[] = array(
  2. 'source' => '/^users\/(.+)$/i',
  3. 'target' => '/{1}',
  4. 'action' => 'redirect-301'
  5. );
  6. return $rules;
в url_rewrite.php

Еще от автора

Алфавитный указатель в статьях
Возникла необходимость навигации по статьям в категории через Алфавитный указатель (как в Универсальном каталоге) Реализовал.
FIX: Прозрачность PNG при ресайзе
Добрый день. Предлагаю исправление "забытой Богом" библиотеки /includes/graphic.inc.
Субдомен имени пользователя (user.instantcms.ru)
Продолжаем усоциаливать инстант Как сделать имена типа user.instantcms.ru Открываем core/cms.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.