Перейти к публикации
View in the app

A better way to browse. Learn more.

Дизайн и модификация Invision Community

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

Опубликовано:

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

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

Сейчас на странице 0

  • Нет пользователей, просматривающих эту страницу.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.