Добавляем ссылку на пользователя.

Добавим в комментариях к записи возможность оставить ссылку на профиль любого пользователя.



1. В файле /classes/modules/sys_text/Test.class.php



В строке (51):

		$this->oJevix->cfgAllowTags(array('cut','a', 'img', 'i', 'b', 'u', 's', 'video', 'em',  'strong', 'nobr', 'li', 'ol', 'ul', 'sup', 'abbr', 'sub', 'acronym', 'h4', 'h5', 'h6', 'br', 'hr', 'pre', 'code', 'object', 'param', 'embed'));


добавляем в конце:


, 'user'


В этот же файл добавляем:


/**
	 * Парсинг текста на предмет ников
	 *
	 * @param string $sText
	 * @return string
	 */	
	
	public function UserParser($sText) {	
		/**
		 * линки на юзеров 
		 */
		$sResult = preg_replace('!<user>(.*?)</user>!si', '•<a href="/profile/$1">$1</a>', $sText);
		$sResult = preg_replace('!<user>(.*?)</user>!si', '•<a href="/profile/$1">$1</a>', $sResult);

			return $sResult;
		}


Добавляем в функцию:

public function Parser($sText) {


Вот это:

$sResult=$this->UserParser($sResult);


Я не силен в regexp, поэтому знающих людей прошу внести поправки если надо. Есть сомнения, что фильтровать надо слегка по другому.

2. Далее, в файле /templates/skin/habr/actions/ActionBlog/Comment.tpl, после (4):




<div class="panel_topic_form" style="background: #eaecea; ">


Добавляем:


<a href="#" onclick="voidPutUser('form_comment_text'); return false;" class="button"><img src="{$DIR_STATIC_SKIN}/img/link.gif" width="20" height="20"  title="Ссылка на пользователя"></a>

Мне надо было реализовать линковку пользователей только в комментариях. Если надо сделать тоже самое при создании статьи, надо охватить файлы /templates/skin/habr/actions/ActionPage/add.tpl и /templates/skin/habr/actions/ActionTopic/add.tpl. Все тоже самое, что и в этом пункте, проделываем и с ними.

3. Далее, в файле /templates/skin/habr/js/panel.js добавляем:




function voidPutUser(context)
{       if (url=prompt('Введите ник пользователя',''))
        {
        var m=document.getElementById(context);
        if(m){
               m.focus();

             if ((clientVer >= 4) && is_ie && is_win)
             {
               sel = document.selection.createRange();

               sel.text = "<user>"+url+sel.text+'</user>';
             } else
             {
               mozWrap(m, "<user>"+url,'</user>');
             }
             m.focus();
             }
         }
}


После этих маневров, в комментариях появляется кнопка «Ссылка на пользователя», в открывшемся окне которой надо ввести ник на пользователя. В текстовое поле добавится линк на профиль введенного юзера. CSS и иконку править под свой вкус.

12 комментариев

avatar
Надеюсь, я ничего не упустил )
avatar
интересно а в новой версии будет работать? new.livestreet.ru
avatar
Чего не знаю, того не знаю. Думаю, что да. Особо капитальных изменений в вышеуказанном коде нет.
avatar
Хочу поинтересоваться — а какой смысл в такой примочке?
avatar
Да просто удобно. Быстро дать ссылку на профиль другого пользователя.
avatar
Перенесите это дело в Tips & tricks плиз.
  • Carw
  • +1
avatar
Перенес.
avatar
Обязательно внести в основную версию!
avatar
Здесь не хватает проверки существования пользователя на случай опечаток в никах
avatar
в версии 0.3 не работает. не могу пока разобраться с panel.js (
avatar
может лучше прикрутить комменту к юзеру?=)
avatar
Спасибо, все заработало.
В качестве пиктограммы взял человечка из ЖЖ. Чуть фотошопа и он встал идеально.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.