Nofollow для всех, кроме Администратора [Решено]

Друзья, требуется ваша помощь. Недавно решил попробовать Livestreet. До этого делал не сложные сайты и разбираюсь в HTML гораздо лучше, чем в PHP.

Установил ЛайвСтрит, закрыл ссылки тегом nofollow, но вот беда, хочу убрать nofollow для админских постов. Пересмотрел много сообщений на данном форуме. Наткнулся на пост В топку noindex

В комментариях к нему один из участников предлагает следующее решение проблемы:
Text.class.php
168 строка добавьте
if (BLOG_URL_NO_INDEX && !$this->oUserCurrent->isAdministrator()) {

и топики созданные админом не будут проходить через MakeNoindex.

Попробовал так сделать. Не выходит. Думаю потому, что ответ уже устарел, ведь дан он был в 2009 году. Возможно сейчас эту строку нужно добавлять в другое место. Проблема в том, что я не знаю, куда именно. Поэтому решил задать вопрос снова: подскажите, как можно убрать nofollow из постов Администратора?

Моя версия LiveStreet — 0.5.1

РЕШЕНИЕ ДАННОЙ ЗАДАЧИ
Благодарность beauty_free и ort за то, что отозвались и помогли в решении проблемы.

Итак, в файле Text.class.php (/engine/modules/text.Text.class.php) находим строку (у меня строка 79)
if (Config::Get('view.noindex') and isset($this->oJevix->tagsRules['a'])) {
    $this->oJevix->cfgSetTagParamDefault('a','rel','nofollow',true);
}

Заменяем на
$oUserCurrent = $this->User_GetUserCurrent();
if (Config::Get('view.noindex') and isset($this->oJevix->tagsRules['a']) and (!$oUserCurrent or !$oUserCurrent->isAdministrator())) {
    $this->oJevix->cfgSetTagParamDefault('a','rel','nofollow',true);
}

Результат: ссылки с администраторских постов становятся do-follow. (В уже созданных постах ничего не изменится, нужно пересохранять старые посты)

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

avatar
А вы создавали/редактировали топик или просто обновляли страницу с прежним топиком?
avatar
Забыл это уточнить. Да. Редактировал и заново сохранял.

Сейчас снова попробовал вставить в строку 168. Моя 168 строка выглядит вот так (никаких модификаций файла не проводил):
if (preg_match_all("@(<object\s.*>)@Ui",$sText,$aMatch)) {

Вставляю код и получается
if (BLOG_URL_NO_INDEX && !$this->oUserCurrent->isAdministrator()) {
		if (preg_match_all("@(<object\s.*>)@Ui",$sText,$aMatch)) {

Выскакивает ошибка:
Parse error: syntax error, unexpected T_PUBLIC in /engine/modules/text/Text.class.php on line 178
avatar
Условие if которое открыли похоже не закрыли

if (BLOG_URL_NO_INDEX && !$this->oUserCurrent->isAdministrator()) {
    if (preg_match_all("@(<object\s.*>)@Ui",$sText,$aMatch)) {
        /* Остальной код */
    }
}
avatar
Да. Забыл это сделать. Исправил. Но все равно при сохранении теперь происходит другая ошибка:
Notice: Use of undefined constant BLOG_URL_NO_INDEX — assumed 'BLOG_URL_NO_INDEX' in /engine/modules/text/Text.class.php on line 169

Notice: Undefined property: ModuleText::$oUserCurrent in /engine/modules/text/Text.class.php on line 169

Fatal error: Call to a member function isAdministrator() on a non-object in /engine/modules/text/Text.class.php on line 169
Насколько я понимаю, в первой строке говорится про не объявленную константу…
avatar
Абсолютно верно
class ModuleText extends Module {
    const BLOG_URL_NO_INDEX = true;


И обратимся к методу модуля что бы взять текущего пользователя

if (BLOG_URL_NO_INDEX && !$this->User_GetUserCurrent()->isAdministrator()) {
    if (preg_match_all("@(<object\s.*>)@Ui",$sText,$aMatch)) {
        /* Остальной код */
    }
}
avatar
Только я проглядел строчку в которую вы добавляете. Нужно изменить 79 строку

if (Config::Get('view.noindex') and isset($this->oJevix->tagsRules['a'])) {
    $this->oJevix->cfgSetTagParamDefault('a','rel','nofollow',true);
}


на


if (Config::Get('view.noindex') and isset($this->oJevix->tagsRules['a']) and !$this->User_GetUserCurrent()->isAdministrator()) {
    $this->oJevix->cfgSetTagParamDefault('a','rel','nofollow',true);
}


И если я ни в чем не ошибся должно работать.
Все остальное можно забыть)
avatar
Спасибо! Работает замечательно. Сейчас сделаю в посте резюме.
avatar
если пользователь не авторизован, и где то будет парсинг — вывалится ошибка
avatar
Извиняюсь.

$oUserCurrent = $this->User_GetUserCurrent();
if (Config::Get('view.noindex') and isset($this->oJevix->tagsRules['a']) and ($oUserCurrent and !$oUserCurrent->isAdministrator())) {
    $this->oJevix->cfgSetTagParamDefault('a','rel','nofollow',true);
}
avatar
теперь для всех гостей ссылки будут открыты при парсинге :)
avatar
Спасибо за уточнения. Не могли бы Вы подсказать, как код должен выглядеть, чтобы все работало хорошо?
avatar
Я надеялся что гости писать не будут, но ведь существуют плагины. Еще одна попытка :)

if ($oUserCurrent=$this->User_GetUserCurrent() and $oUserCurrent->isAdministrator()) {
} else if (Config::Get('view.noindex') and isset($this->oJevix->tagsRules['a'])) {
$this->oJevix->cfgSetTagParamDefault('a','rel','nofollow',true);
}

Я не могу придумать более лаконичного способа, Максим помоги :)
avatar
$oUserCurrent = $this->User_GetUserCurrent();
if (Config::Get('view.noindex') and isset($this->oJevix->tagsRules['a']) and (!$oUserCurrent or !$oUserCurrent->isAdministrator())) {
    $this->oJevix->cfgSetTagParamDefault('a','rel','nofollow',true);
}
avatar
Такой способ я даже не представлял.
Благодарен, буду знать.
avatar
В уже созданных постах ничего не изменится, нужно пересохранять старые посты)
то есть через «редактироние» и «опубликовать»
oUserCurrent->isAdministrator()

а можно написать определенный ник или перечень ников?
avatar

$aUsersLogin = array('cheru','Duelist');
$oUserCurrent = $this->User_GetUserCurrent();
if (Config::Get('view.noindex') and isset($this->oJevix->tagsRules['a']) and 
    (!$oUserCurrent or 
    !in_array($oUserCurrent->getLogin(),$aUsersLogin) or 
    !$oUserCurrent->isAdministrator())
    ) {
    $this->oJevix->cfgSetTagParamDefault('a','rel','nofollow',true);
}
avatar
спасибо.Я заметил, что при публикации от чужого имени (есть такой плагин) ссылки в статье также доступны для индексации
avatar
почему то не работает на 1.0.3 ((
avatar
А для 2.0 решение есть?
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.