Запретить ссылки на определенные сайты
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды
Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение
).
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды
Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение
-
katherine
- phpBB 1.2.1
- Сообщения: 27
- Стаж: 16 лет 2 месяца
- Благодарил (а): 12 раз
Re: Запретить ссылки на определенные сайты
MIT, а вы еще не подскажите, как в вашем коде задать условие, чтобы предупреждение не показывалось при написании личного сообщения?
-
MIT
- Former team member
- Сообщения: 2500
- Стаж: 17 лет 6 месяцев
- Откуда: 56°20′02″ с. ш. 36°42′45″ в. д.
- Благодарил (а): 3 раза
- Поблагодарили: 351 раз
Re: Запретить ссылки на определенные сайты
Ув. тов. Shredder рассказал какое условие надо добавить (
if (isset($post_id))). Не проверял, но думаю что работать будет верно.-
katherine
- phpBB 1.2.1
- Сообщения: 27
- Стаж: 16 лет 2 месяца
- Благодарил (а): 12 раз
Re: Запретить ссылки на определенные сайты
MIT, я пробовала, но почему-то не получается. Вот так предупреждение перестает работать:
Код: Выделить всё
if (isset($post_id))
{
if (preg_match("/.*(site\.com|site\.ru|site\.org).*/i",$this->message)>0)
{
$this->warn_msg[] = $user->lang['LANG_WARNING'];
return $this->warn_msg;
}
}-
MIT
- Former team member
- Сообщения: 2500
- Стаж: 17 лет 6 месяцев
- Откуда: 56°20′02″ с. ш. 36°42′45″ в. д.
- Благодарил (а): 3 раза
- Поблагодарили: 351 раз
Re: Запретить ссылки на определенные сайты
Попробуй тогда условие
Код: Выделить всё
if (in_array($this->mode, array('post', 'reply', 'quote', 'edit')) -
katherine
- phpBB 1.2.1
- Сообщения: 27
- Стаж: 16 лет 2 месяца
- Благодарил (а): 12 раз
Re: Запретить ссылки на определенные сайты
Не работает
. Выдает ошибку «Parse error: syntax error, unexpected '{' in /path/to/forum/includes/message_parser.php on line 1120»
Код: Выделить всё
if (in_array($this->mode, array('post', 'reply', 'quote', 'edit'))
{ //строчка 1120
if (preg_match("/.*(dropbox\.com|savepic\.ru|site4\.com).*/i",$this->message)>0)
{
$this->warn_msg[] = $user->lang['LANG_WARNING'];
return $this->warn_msg;
}
}-
Shredder
- Former team member
- Сообщения: 2266
- Стаж: 17 лет 9 месяцев
- Благодарил (а): 283 раза
- Поблагодарили: 584 раза
Re: Запретить ссылки на определенные сайты
Не может быть! (с)katherine писал(а):предупреждение перестает работать
Почему же у меня тогда всё работает?.. (вопрос риторический)
Добавлено спустя 6 минут 54 секунды:
Не работать может только в одном случае: если редактируешь старый пост, не производя в нём при этом никаких изменений. Но это, по-моему, не критично.
-
Nekstati
- Поддержка

- Сообщения: 3365
- Стаж: 17 лет 6 месяцев
- Благодарил (а): 37 раз
- Поблагодарили: 1454 раза
Re: Запретить ссылки на определенные сайты
Работает. Вставляйте скрипт в overall_header.html перед строкойвладимир1983 писал(а):На сабсильвер можно поправить? а то не работает.
// ]]>.
Можно. Используйте такой скрипт:katherine писал(а):если человек, например, вставил в сообщение 10 фотографий, то приходится сначала ждать пока они все полностью загрузятся, и только потом заменятся на ссылку «Читайте правила». А нельзя сделать, чтобы уже на выводе сообщения всё преобразовывалось?
Код: Выделить всё
// Catch DOMReady event
var alreadyrunflag = 0; // flag to indicate whether target function has already been run
if (document.addEventListener) // Firefox, Opera, Chrome
{
document.addEventListener('DOMContentLoaded', function(){alreadyrunflag = 1; block_links()}, false);
}
else if (document.all && !window.opera) // IE
{
document.write('<script type="text/javascript" id="contentloadtag" defer="defer" src="javascript:void(0)"><\/script>');
var contentloadtag = document.getElementById('contentloadtag');
contentloadtag.onreadystatechange = function()
{
if (this.readyState == 'complete')
{
alreadyrunflag = 1;
block_links();
}
}
}
if (/Safari/i.test(navigator.userAgent)) // Safari
{
var _timer = setInterval(function()
{
if (/loaded|complete/.test(document.readyState))
{
clearInterval(_timer);
block_links();
}
}, 10);
}
window.onload = function() // Other browsers
{
setTimeout('if (!alreadyrunflag) block_links()', 0);
}
function block_links()
{
sitename = /savepic.ru|ipicture.ru|radikal.ru/gi;
for (i = 0; i < document.getElementsByTagName('A').length; i++)
{
link = document.getElementsByTagName('A')[i];
if (link.href.search(sitename) >= 0 || link.innerHTML.search(sitename) >= 0)
{
link.href = '.\/rules\/';
link.innerHTML = 'Читайте правила форума';
}
}
for (j = 0; j < document.getElementsByTagName('img').length; j++)
{
img = document.getElementsByTagName('img')[j];
if (img.src.search(sitename) >= 0)
{
replacement = '<a href=".\/rules\/">Читайте правила форума<\/a>';
if (img.outerHTML) // IE, Opera, Chrome, Safari
{
img.outerHTML = replacement;
}
else // Firefox
{
var range = document.createRange();
range.setStartBefore(img);
var docFrag = range.createContextualFragment(replacement);
img.parentNode.replaceChild(docFrag, img);
}
}
}
}window.onload = block_links;), а затем открыть overall_footer.html и вставить перед закрывающим тэгом </body> такие строчки:
Код: Выделить всё
<script type="text/javascript">
setTimeout('block_links()', 0);
</script>-
katherine
- phpBB 1.2.1
- Сообщения: 27
- Стаж: 16 лет 2 месяца
- Благодарил (а): 12 раз
Re: Запретить ссылки на определенные сайты
Попробовала. Всё равно предупреждение показывается в личных сообщениях.MIT писал(а):Попробуй тогда условие
Не знаю, странно. Кстати, пробовала вставить ваш код полностью, чтобы запретить все картинки со сторонних сайтов — тоже не работает, никакого предупреждения не показывается. Но вот если удалить условие if (isset($post_id)) — предупреждение работает, и в ЛС в том числе..Shredder писал(а):Почему же у меня тогда всё работает?.. (вопрос риторический)
А у вас какая версия форума?
-
katherine
- phpBB 1.2.1
- Сообщения: 27
- Стаж: 16 лет 2 месяца
- Благодарил (а): 12 раз
-
katherine
- phpBB 1.2.1
- Сообщения: 27
- Стаж: 16 лет 2 месяца
- Благодарил (а): 12 раз
Re: Запретить ссылки на определенные сайты
Есть небольшая проблема — невозможно опубликовать картинку не только со сторонних сайтов, но и с нашего сайта тоже (который находится в другой папке)Shredder писал(а):Это выдаёт такое же предупреждение и не даёт разместить сообщение, с той лишь разницей, что отрезает ссылки на картинки с вообще любых сайтов.
-
Shredder
- Former team member
- Сообщения: 2266
- Стаж: 17 лет 9 месяцев
- Благодарил (а): 283 раза
- Поблагодарили: 584 раза
Re: Запретить ссылки на определенные сайты
katherine
Заменить на:
Где вместо слов
Добавлено спустя 15 минут 46 секунд:
Кстати, чтобы заработало разрешение картинок в личных сообщениях, перед кодом надо было добавить
То есть, полный рабочий код для вашего случая должен быть такой (не забудьте указать свои домен и зону):
Код: Выделить всё
if (preg_match('#.(?:gif|jpg|jpe|png|bmp)#iu', $match))Код: Выделить всё
if (!preg_match('#(?:домен\.зона)#iu', $match) && preg_match('#.(?:gif|jpg|jpe|png|bmp)#iu', $match))домен и зона - имя вашего домена (без www) и зона (ru, com, net и т.д. - смотря, какая у вас), соответственно.Добавлено спустя 15 минут 46 секунд:
Кстати, чтобы заработало разрешение картинок в личных сообщениях, перед кодом надо было добавить
global $post_id;То есть, полный рабочий код для вашего случая должен быть такой (не забудьте указать свои домен и зону):
Код: Выделить всё
global $post_id;
if (isset($post_id))
{
preg_match_all('#' . get_preg_expression('url') . '|' . get_preg_expression('www_url') . '#iu', $this->message, $matches);
foreach ($matches[0] as $match)
{
if (!preg_match('#(?:домен\.зона)#iu', $match) && preg_match('#\.(?:gif|jpg|jpe|png|bmp)#iu', $match))
{
$this->warn_msg[] = $user->lang['LANG_WARNING'];
return (!$update_this_message) ? $return_message : $this->warn_msg;
}
}
}-
katherine
- phpBB 1.2.1
- Сообщения: 27
- Стаж: 16 лет 2 месяца
- Благодарил (а): 12 раз
Re: Запретить ссылки на определенные сайты
А вы не подскажите, как в этот код прописать еще несколько сайтов, ссылки с которых разрешены?Shredder писал(а):if (!preg_match('#(?:домен\.зона)#iu', $match) && preg_match('#.(?:gif|jpg|jpe|png|bmp)#iu', $match))

