Alien2001 Posted October 21, 2013 Share Posted October 21, 2013 Возникла необходимость избавиться от внешних ссылок путем редиректа вида 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 Link to comment Share on other sites More sharing options...
Bot Posted October 21, 2013 Share Posted October 21, 2013 Обратите внимание По указанному вами в профиле "Board url" находится не IP.Board, либо модифицированный пиратский скрипт с удаленными копирайтами. Если вы указали неверный URL, пожауйста, поправьте его, потому что он скорее всего потребуется при диагностике вашей проблемы. Нелицензионные скрипты не приветствуются, т.к. зачастую именно некорректное "нуление" и является причиной проблем в них. Link to comment Share on other sites More sharing options...
siv1987 Posted October 21, 2013 Share Posted October 21, 2013 Подобное решение, как казалось, позволило сохранить в базе "чистые" урлы Если в базе чистые урлы, естественно при обратном вызове они будут конвертироваться с добавлением приставкой. Редактирования сообщений как раз и есть отображаемая информация.Можно попробовать такой костыль 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 Link to comment Share on other sites More sharing options...
Alien2001 Posted October 21, 2013 Author Share Posted October 21, 2013 Спасибо огромное. Я как раз сообразил, что в WYSIWYG-редакторе как раз тоже нужно парсить, он же WYSIWYG :rolleyes: Сидел думал, какое бы условие придумать, чтобы понять, что мы не в посте, а в редактировании. Однако, do при редактировании поста отдает значение 'editBoxShow', а не 'edit_post', в комментах в блогах - editentry и showEdit. А нет другого способа определить, что вызов идет из редактора? Link to comment Share on other sites More sharing options...
siv1987 Posted October 21, 2013 Share Posted October 21, 2013 AND ! in_array($this->request['do'], array('edit_post', 'editBoxShow', 'editentry', 'showEdit')) Link to comment Share on other sites More sharing options...
Dmitriy427 Posted October 21, 2013 Share Posted October 21, 2013 Дубль, сорри. Пока писал условие уже ответили... Link to comment Share on other sites More sharing options...
Alien2001 Posted October 21, 2013 Author Share Posted October 21, 2013 Ну, это понятно, спасибо. Я просто опасаюсь, что выловил не все события, где может идти парсинг ссылок. По идее ведь редактор во всех случаях один (обычный или усеченный), нет ли возможности выявить, что именно из него вызван парсинг? Link to comment Share on other sites More sharing options...
siv1987 Posted October 21, 2013 Share Posted October 21, 2013 Ну добавьте тогда в форме редактора какую нибудь переменную, которую будете проверять. Сам редактор ничего не отправляет, чем можно было бы его однозначно опознать (по крайней мере я не заметил). Link to comment Share on other sites More sharing options...
Alien2001 Posted October 21, 2013 Author Share Posted October 21, 2013 Спасибо, попробую. Link to comment Share on other sites More sharing options...
siv1987 Posted October 21, 2013 Share Posted October 21, 2013 Ну добавьте тогда в форме редактора какую нибудь переменную, которую будете проверять. Сам редактор ничего не отправляет, чем можно было бы его однозначно опознать (по крайней мере я не заметил).Нет, не так. Контент вызывает не редактор, а событие (do) который вызывает редактор вместе с контеном. Значит этот вариант работать не будет. Ну в общем самый простой способ остается по прежнему проверка do, либо найти единое место через которое проходит текст при полном редактирование или быстром и сделать там замену. Link to comment Share on other sites More sharing options...
siv1987 Posted October 21, 2013 Share Posted October 21, 2013 Кстати, вот одна явная переменная которая присутствует и при запросе быстрого редактирования и при запросе полно редактирования $this->request['mod_options'] if( $extlink AND ! array_key_exists('mod_options', $this->request) ) Link to comment Share on other sites More sharing options...
Dmitriy427 Posted October 21, 2013 Share Posted October 21, 2013 Кстати, вот одна явная переменная которая присутствует и при запросе быстрого редактирования и при запросе полно редактирования $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. Да и в блогах не вижу. Link to comment Share on other sites More sharing options...
siv1987 Posted October 21, 2013 Share Posted October 21, 2013 Значит не судьба у ТСа :) Link to comment Share on other sites More sharing options...
Alien2001 Posted October 22, 2013 Author Share Posted October 22, 2013 Спасибо. Я упрямый - решение будет найдено обязательно Link to comment Share on other sites More sharing options...
Dmitriy427 Posted October 22, 2013 Share Posted October 22, 2013 У Вас есть решение:if( $extlink AND ! in_array( $this->request['do'], array('edit', 'edit_post', 'editBoxShow', 'editentry', 'showEdit') )Если вдруг обнаружится ещё какой то ключ, просто добавите его в массив.Сомневаюсь, что найдете что то лучше. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now