Перейти к содержимому
Русский язык для Invision Community 5

Избавление от внешних ссылок

Возникла необходимость избавиться от внешних ссылок путем редиректа вида 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

Рекомендованные сообщения

хотел проверять по вхождению в значении переменной слова edit, но выяснилось, что при сохранении используется значение EditSave

if( stripos($this->request['do'], 'edit') !== false )

Дмитрий, не понял, зачем нужен ключ edit_post. Он используется, как я заметил, при отображении списка других сообщений под окном редактирования на форумах. Разве он используется в редакторе?

Он используется при формировании массива $doCodes в /admin/applications/forums/modules_public/post/post.php, а уже он участвует в вызове функции showForm() котрая, в свою очередь, вызывает метод класса classPostForms для формирования кода формы редактирования...

 

На самом деле, я бы еще "reply_post", "reply_post_do" и "edit_post_do" в ваш массив добавил.

 

P.S. Плюс к тому, в /admin/applications/members/modules_public/messaging/send.php еще заглянуть не вредно.

  • Автор

if( stripos($this->request['do'], 'edit') !== false )

 

Да-да, почти так, у меня было, правда, не stripos, а stristr, но дело в том, после сохранения (при быстром редактировании) do становится равна editBoxSave, парсинг не срабатывает и "неэкранированная" ссылка попадает в кэш сообщений. Так что вариант с проверкой по массиву лучше.

 

Dmitriy427 , это модуль отправки личных сообщений, как я понимаю? Для моей задачи он некритичен, поскольку ЛС не индексируются.

Изменено пользователем Alien2001

Dmitriy427 , это модуль отправки личных сообщений, как я понимаю? Для моей задачи он некритичен, поскольку ЛС не индексируются.

Критичен или нет, он для вашей задачи, а ссылки в форму редактирования приватных сообщений будут возвращаться кривые.

  • Автор

Критичен или нет, он для вашей задачи, а ссылки в форму редактирования приватных сообщений будут возвращаться кривые.

 

Да... Это я не подумав сказал. :wacko:

Создайте аккаунт или войдите в него для комментирования

Аккаунт

Навигация

Поиск

Поиск

Настроить push-уведомления браузера

Chrome (Android)
  1. Нажмите на иконку замка рядом с адресной строкой.
  2. Нажмите Права доступа -> Уведомления.
  3. Измените свои настройки.
Chrome (компьютер)
  1. Нажмите на иконку замка в адресной строке.
  2. Выберите Настройки сайта.
  3. Найдите Уведомления и измените свои настройки.