Перейти к публикации

Автоматическая замена текста на ссылку


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

Есть ли возможность сделать так чтоб определённые слова в новости автоматически заменялись на ссылки? Пример:

"Компания Blizzard тра-та-та трум-пум-пум"

чтоб слово Bllizzard автоматически становилось ссылкой на _blizard.com

Ссылка на сообщение
Поделиться на других сайтах

Мне кажется тебе стоит более подробно расписать по каким критериям слово будет становиться линком :rolleyes: , например ко всем английским словам будет добавляться домен .com или просто ими будут заменяться слова из заранее отведнного списка ?

Ссылка на сообщение
Поделиться на других сайтах

В файле engine\inc\parse.class.php находим

source = preg_replace( "#\[url\](\S.+?)\[/url\]#ie"	, "\$this->build_url(array('html' => '\\1', 'show' => '\\1'))", $source );
и перед ним вставляем:
$source=preg_replace( "#(^|\s|>)((http://|https://|ftp://)\w+[^<\s\[\]]+)#i"  , "\\1[leech]\\2[/leech]", $source );

$source=preg_replace( "#(^|\s|>)((magnet:\?)\w+[^<\s\[\]]+)#i"  , "\\1[url]\\2[/url]", $source );
Если хотим, чтобы ссылки обрамлялись не leech (актуально для версий меньше 5.7 - там нет этого тега), а простым url, то первую строку кода меняем на
$source=preg_replace( "#(^|\s|>)((http://|https://|ftp://)\w+[^<\s\[\]]+)#i"  , "\\1[url]\\2[/url]", $source );

Изменено пользователем ReviX
Ссылка на сообщение
Поделиться на других сайтах

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

Ссылка на сообщение
Поделиться на других сайтах

Snake абсолютно точно написал что именно я хочу.

Нужна база, вней слова которые в тексте автоматически заменяются на ссылки.

ReviX, обьясни подробнее что ты написал?

Ссылка на сообщение
Поделиться на других сайтах

Нет, это не то )) Я имел ввиду следующее..

Мне часто приходится вставлять ссылки на одни и те же сайты.

Пример:

 Так, например, компания "Акелла", на днях, заключила договор
Вот слово Акелла я делаю ссылкой на сайт компании, и так каждий раз когда добавляю новость.. Мне нужно чтоб это слово само становилось ссылкой, чтоб следующий код
[url="http://www.akella.com/"]Акелла[/url]

автоматически вставлялся..

Для этого я так понял надо создать что-то типа базы содержащие все слова которые будут автоматически заменятся?

Изменено пользователем Vano
Ссылка на сообщение
Поделиться на других сайтах

всё правильно.

Есть же в DLE фильтр слов - чем не база :rolleyes:

Ээээх, а я уж было поверил :) На новости фильтр не действует, в коментариях получается, а в новости нет :( разви что чучуть переделать фильтр чтоб он и на новости действовал ) Кто скажет как?

Изменено пользователем Vano
Ссылка на сообщение
Поделиться на других сайтах

ого :blink:

в файле <engine/inc/addnews.php>

было

	$full_story = $parse->process($_POST['full_story']);

	$full_story = $db->safesql($parse->BB_Parse($full_story));
сделайте
	$full_story = $parse->process($_POST['full_story']);

	$full_story = $db->safesql($parse->BB_Parse($full_story));

$full_story = word_filter($full_story);

сделайте и проверьте, а то я же по теории говорю =)

Ссылка на сообщение
Поделиться на других сайтах

lifestar, к сожалению нет ((

во-первых нету таких строк идущих подряд.

Вот фрагмент с того места:


}


$full_story = $parse->process($_POST['full_story']);

$short_story = $parse->process($_POST['short_story']);

$title = $parse->process($_POST['title']);


if ($config['allow_admin_wysiwyg'] == "yes" OR $allow_br != '1'){

$full_story = $db->safesql($parse->BB_Parse($full_story));

$short_story = $db->safesql($parse->BB_Parse($short_story));

} else {

$full_story = $db->safesql($parse->BB_Parse($full_story, false));

$short_story = $db->safesql($parse->BB_Parse($short_story, false));

}


Во втрорых если вставить код сюда

if ($config['allow_admin_wysiwyg'] == "yes" OR $allow_br != '1'){

$full_story = $db->safesql($parse->BB_Parse($full_story));

$short_story = $db->safesql($parse->BB_Parse($short_story));

$full_story = word_filter($full_story);

} else {

То ошибку не высвечивает, но работать, не работает (

Изменено пользователем Vano
Ссылка на сообщение
Поделиться на других сайтах

ну естественно )) я уже сделал пару слов которые в тесте использую, но пока работаю они только в коментариях :(

Ссылка на сообщение
Поделиться на других сайтах

Вот функция замены...

function word_filter($source) {


	@setlocale(LC_CTYPE, array("ru_RU.CP1251", "ru_SU.CP1251", "ru_RU.KOI8-r", "ru_RU", "russian", "ru_SU", "ru"));


	$all_words = file(ENGINE_DIR.'/data/wordfilter.db.php');


if (count($all_words)) {

	foreach($all_words as $word_line)

	{

		$word_arr = explode("|", $word_line);


		$find[] = "#(".$word_arr[1].")#i";

		$replace[] = $word_arr[2];


	}


	$source = preg_replace($find,$replace,$source);

}

	return $source;

}

Работать должно где угодно, в комментах и новостях

Ссылка на сообщение
Поделиться на других сайтах

Что то нето вы написали... Т.к. это стандартная функиция dle 6, которая работает только в комментариях.

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

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

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

×
×
  • Создать...