Избавление от внешних ссылок - Дизайн и модификация Invision Power Board

Перейти к содержимому

 

Правила раздела

Здесь обсуждаются вопросы по настройке и администрированию форумов IPB 3.x.
Пожалуйста, не оффтопьте, если зашли сюда случайно, и обратите внимание на соседние разделы.
Установка, настройка и обслуживание форумов IPB 2.x.
Оформление форумов, включая верстку скинов.
Размещение рекламы на форумах.
SEO оптимизация форума.
Техническая поддержка наших скинов и модов.

СвернутьПрикрепленные теги

go.php nofollow

  • 2 Страниц +
  • 1
  • 2

Избавление от внешних ссылок работа с BB-кодом [URL] в 3.3

#1 Пользователь не на сайте   Alien2001 ответил: »

 
 
  • Member
  • **
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 92
  • Регистрация: 26-Июль 12
  • Репутация: 10
  • IPB version:3.3.x
 

Отправлено 21 Октябрь 2013 - 19:49

Возникла необходимость избавиться от внешних ссылок путем редиректа вида www.forum.ru/out/http://yandex.ru

Просмотрев разные варианты, решил пойти по пути правки файла /admin/sources/classes/bbcode/custom/defaults.php, отвечающего за работу с кодом URL.
В самом конце файла идет проверка на внешние ссылки, добавление nofollow и external. Там же вставил такие строчки:
if ($extlink == 1 ) {
		
 if ($this->settings['htaccess_mod_rewrite'] == 1) 	$option = "{$this->settings['board_url']}/out/$option";
 else $option = "{$this->settings['board_url']}?/out/$option";
		}


Подобное решение, как казалось, позволило сохранить в базе "чистые" урлы на случай, если редирект нужно будет выключить, а с другой стороны позволяет применить систему сразу ко всему сообществу, включая блоги и комментарии.

Однако появилось неожиданная проблема: при первичной отправке сообщения оно записывается в базу корректно (то есть там чистый урл _http://yandex.ru ), однако, если мы сообщение редактируем, оно по какой-то причине попадает в редактор уже с "грязным" урлом - _http://www.forum.ru/out/http://yandex.ru Это немного неожиданно, потому что вроде бы добавления касались именно отображаемой информации, html-кода.

Подскажите, пожалуйста, где копнуть, чтобы этого избежать.

Версия 3.3
0

#2 Пользователь не на сайте   Bot ответил: »

 
 
  • Почетный робот
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
 

Отправлено 21 Октябрь 2013 - 19:49

Обратите внимание

По указанному вами в профиле "Board url" находится не IP.Board, либо модифицированный пиратский скрипт с удаленными копирайтами. Если вы указали неверный URL, пожауйста, поправьте его, потому что он скорее всего потребуется при диагностике вашей проблемы. Нелицензионные скрипты не приветствуются, т.к. зачастую именно некорректное "нуление" и является причиной проблем в них.


0

#3 Пользователь на сайте   siv1987 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 8 723
  • Регистрация: 20-Март 09
  • Репутация: 2 270
  • IPB version:3.1.x
 

Отправлено 21 Октябрь 2013 - 21:28

Просмотреть сообщениеAlien2001 сказал(а):

Подобное решение, как казалось, позволило сохранить в базе "чистые" урлы

Если в базе чистые урлы, естественно при обратном вызове они будут конвертироваться с добавлением приставкой. Редактирования сообщений как раз и есть отображаемая информация.
Можно попробовать такой костыль

		if( $extlink AND $this->request['do'] != 'edit_post' )
		{
			if( $this->settings['htaccess_mod_rewrite'] == 1 )
				$option = "{$this->settings['board_url']}/out/{$option}";
			else
				$option = "{$this->settings['board_url']}?/out/{$option}";
		}

1

#4 Пользователь не на сайте   Alien2001 ответил: »

 
 
  • Member
  • **
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 92
  • Регистрация: 26-Июль 12
  • Репутация: 10
  • IPB version:3.3.x
 

Отправлено 21 Октябрь 2013 - 21:57

Спасибо огромное. Я как раз сообразил, что в WYSIWYG-редакторе как раз тоже нужно парсить, он же WYSIWYG :rolleyes: Сидел думал, какое бы условие придумать, чтобы понять, что мы не в посте, а в редактировании.

Однако, do при редактировании поста отдает значение 'editBoxShow', а не 'edit_post', в комментах в блогах - editentry и showEdit.

А нет другого способа определить, что вызов идет из редактора?
0

#5 Пользователь на сайте   siv1987 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 8 723
  • Регистрация: 20-Март 09
  • Репутация: 2 270
  • IPB version:3.1.x
 

Отправлено 21 Октябрь 2013 - 22:13

AND ! in_array($this->request['do'], array('edit_post', 'editBoxShow', 'editentry', 'showEdit'))

0

#6 Пользователь не на сайте   Dmitriy427 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Specialist
  • Сообщений: 574
  • Регистрация: 15-Октябрь 11
  • Репутация: 152
  • Откуда:Россия, Тула
  • IPB version:3.3.x
 

Отправлено 21 Октябрь 2013 - 22:21

Дубль, сорри. Пока писал условие уже ответили...
0

#7 Пользователь не на сайте   Alien2001 ответил: »

 
 
  • Member
  • **
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 92
  • Регистрация: 26-Июль 12
  • Репутация: 10
  • IPB version:3.3.x
 

Отправлено 21 Октябрь 2013 - 22:33

Ну, это понятно, спасибо.

Я просто опасаюсь, что выловил не все события, где может идти парсинг ссылок.
По идее ведь редактор во всех случаях один (обычный или усеченный), нет ли возможности выявить, что именно из него вызван парсинг?
0

#8 Пользователь на сайте   siv1987 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 8 723
  • Регистрация: 20-Март 09
  • Репутация: 2 270
  • IPB version:3.1.x
 

Отправлено 21 Октябрь 2013 - 22:39

Ну добавьте тогда в форме редактора какую нибудь переменную, которую будете проверять. Сам редактор ничего не отправляет, чем можно было бы его однозначно опознать (по крайней мере я не заметил).
0

#9 Пользователь не на сайте   Alien2001 ответил: »

 
 
  • Member
  • **
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 92
  • Регистрация: 26-Июль 12
  • Репутация: 10
  • IPB version:3.3.x
 

Отправлено 21 Октябрь 2013 - 22:42

Спасибо, попробую.
0

#10 Пользователь на сайте   siv1987 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 8 723
  • Регистрация: 20-Март 09
  • Репутация: 2 270
  • IPB version:3.1.x
 

Отправлено 21 Октябрь 2013 - 22:54

Просмотреть сообщениеsiv1987 сказал(а):

Ну добавьте тогда в форме редактора какую нибудь переменную, которую будете проверять. Сам редактор ничего не отправляет, чем можно было бы его однозначно опознать (по крайней мере я не заметил).

Нет, не так. Контент вызывает не редактор, а событие (do) который вызывает редактор вместе с контеном. Значит этот вариант работать не будет. Ну в общем самый простой способ остается по прежнему проверка do, либо найти единое место через которое проходит текст при полном редактирование или быстром и сделать там замену.
0

#11 Пользователь на сайте   siv1987 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 8 723
  • Регистрация: 20-Март 09
  • Репутация: 2 270
  • IPB version:3.1.x
 

Отправлено 21 Октябрь 2013 - 23:13

Кстати, вот одна явная переменная которая присутствует и при запросе быстрого редактирования и при запросе полно редактирования $this->request['mod_options']

if( $extlink AND ! array_key_exists('mod_options', $this->request) )

0

#12 Пользователь не на сайте   Dmitriy427 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Specialist
  • Сообщений: 574
  • Регистрация: 15-Октябрь 11
  • Репутация: 152
  • Откуда:Россия, Тула
  • IPB version:3.3.x
 

Отправлено 21 Октябрь 2013 - 23:36

Просмотреть сообщениеsiv1987 21 Октябрь 2013 - 23:13 сказал(а):

Кстати, вот одна явная переменная которая присутствует и при запросе быстрого редактирования и при запросе полно редактирования $this->request['mod_options']

if( $extlink AND ! isset($this->request['mod_options']) )


В контенте, например, нет этой переменной.
Array ( [/articles_html/_/novosti/escho-odna-novost?do] => edit [module] => [section] => [request_method] => get [do] => edit [_isDatabase] => novosti/escho-odna-novost [database] => 1 [record] => 12 [category] => 11 )

Ну и "$this->request['do'] == 'edit'", до кучи.

P.S. Да и в блогах не вижу.
0

#13 Пользователь на сайте   siv1987 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 8 723
  • Регистрация: 20-Март 09
  • Репутация: 2 270
  • IPB version:3.1.x
 

Отправлено 21 Октябрь 2013 - 23:58

Значит не судьба у ТСа :)
0

#14 Пользователь не на сайте   Alien2001 ответил: »

 
 
  • Member
  • **
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 92
  • Регистрация: 26-Июль 12
  • Репутация: 10
  • IPB version:3.3.x
 

Отправлено 22 Октябрь 2013 - 13:45

Спасибо. Я упрямый - решение будет найдено обязательно
0

#15 Пользователь не на сайте   Dmitriy427 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Specialist
  • Сообщений: 574
  • Регистрация: 15-Октябрь 11
  • Репутация: 152
  • Откуда:Россия, Тула
  • IPB version:3.3.x
 

Отправлено 22 Октябрь 2013 - 15:17

У Вас есть решение:
if( $extlink AND ! in_array( $this->request['do'], array('edit', 'edit_post', 'editBoxShow', 'editentry', 'showEdit') )
Если вдруг обнаружится ещё какой то ключ, просто добавите его в массив.
Сомневаюсь, что найдете что то лучше.
0

Сообщить об этой теме:


  • 2 Страниц +
  • 1
  • 2


Быстрый ответ

  

1 пользователей читают эту тему
0 зарегистрированных, 1 гостей, 0 скрытых


Контактная информация

Вопросы по работе сайта

+7 (917) 501-4765
C 10 до 20 в рабочие дни (время московское)

Техническая поддержка

Контактные данные специалистов

Дизайн форумов

IPB 3.x ¦ IPB 2.x

Бесплатные шаблоны

IPB 3.2 – 3.4 ¦ IPB 3.1 ¦ IPB 3.0 ¦ IPB 2.2 – 2.3 ¦ IPB 2.1 ¦ Клипарт
Лицензия на использование ¦ Ваша поддержка ¦ О проекте
Copyright © 2005-2016 IPBSkins.ru Team
При копировании материалов с сайта
прямая ссылка на источник обязательна