Автоматическая переделка контекстных слов в сылку

Главные вкладки

Аватар пользователя moonman moonman 6 декабря 2006 в 21:33

Возможно ли на Друпале сделать автоматическую переделку контестных слов в сылку на страницы, где такие слова тоже встречаются (как в википедии)?

Т.е. вводится контент, постится и мы видим, что некоторые слова становятся ссылками.
Например слово: [url=http://www.5435435.ru/sitemenu]Друпал[/url] само стало ссылкой в обычном тексте и автоматически зоздалась ссылка на страницу где слово Друпал встречается...
Думаю не нужно объяснять что это очень хорошо скажется на поиске вашего сайта - больше народу попрёт с поисковиков :~)

Как сделать? Возможно?

Комментарии

Аватар пользователя Dan Dan 7 декабря 2006 в 7:36

"...(как в википедии)...автоматически зоздалась ссылка на страницу где слово Друпал встречается..."
А если слово Друпал встречается на сотне страниц?
В википедии ссылка создаётся на страницу "Друпал" (она единственная).
Модуля не знаю, вопрос интересный.
(...через фильт ввода что-ли такую штуку делать надо или как...)

Аватар пользователя moonman moonman 7 декабря 2006 в 13:15

Пытался сделать самостоятельно через функцию preg_replace()
Но как выяснилось у Друпала так всё закручено-заверчено с кодировкой, что сделать даже такую элементарную замену не представилось возможным Sad
Возможно менять только либо циферки, либо английский алфавит.
Вот такая хрень....

Аватар пользователя rapitosov@drupal.org rapitosov@drupal.org 7 декабря 2006 в 13:30

Специально для таких случаев существует функция mb_ereg_replace() из расширения mbstring для PHP.
---
http://drupal5.ru - информация для друпателей
качественные ответы только на качественные вопросы

Аватар пользователя moonman moonman 7 декабря 2006 в 13:54

Без разницы.

Вот смотри как выглядит на Друпале "слово" в юникоде:

&*#1089;&*#1083;&*#1086;&*#1074;&*#1086;

И попробуй замени его на что-то другое :-))))))))))))))

Аватар пользователя axel axel 7 декабря 2006 в 14:04

Drupal тут почти непричём, это особенности работы PHP. Однако при включении mbstring или использовании функций с префиксом mb* можно более-менее сносно работать с юникодом. И слово в юникоде тогда будет выглядеть в виде человекопонятной строки. К сожалению функции для перловых регвыражений (PCRE) под mbstring не доступны, доступны только регвыражения POSIX, что несколько ограничивает полёт фантазии Smile

--
Администратор сайта «Drupal — Россия»
на вопросы по Drupal отвечаю только на форумах, не пишите в почту и приватом!

Аватар пользователя rapitosov@drupal.org rapitosov@drupal.org 7 декабря 2006 в 14:50

Попробуйте. Прогоните текст через функцию Друпала decode_entities(), а уже после этого через мультибайтовый ereg.
---
http://drupal5.ru - информация для друпателей
качественные ответы только на качественные вопросы

Аватар пользователя dyp@drupal.org dyp@drupal.org 7 декабря 2006 в 14:25

Я бы упростил задачу делая ссылки не на страницы, а на термины, например словаря tags в котором у нас будут лежать ключевики, которыми мы будем метить, ноды. Будет логичнее и проще.

Аватар пользователя moonman moonman 7 декабря 2006 в 17:17

Поставил я вобщем себе энтот модуль:
http://drupal.org/project/wordfilter

Рулит нормально.
Можно самому набрать любые слова и сделать замену на ссылки при посте статей как душе угодно Smile

Самый простой вариант:
Это сделать дамп таблицы wordfilter
Внести изменения и снова залить. так быстрее.

Если кто выдумает чё-нить поприкольнее - плиз пишите сюды Wink

Аватар пользователя moonman moonman 7 декабря 2006 в 17:41

Ну чё, ставишь энтот мудуль (указанный мной выше).
Его фанкция менять бэдвордс (плохие слова) на другие - какие хочешь.
Вот.
В админке ставишь замену обычно употребляемым словам на твоём сайте по такому типу, например:
Меняем слово "скрипт" на -> [*url=http://www.drupal.ru*]скрипт[*/url*]
(лучше это делать в дампе - в админке замахаешься, т.к. там всего одно поле даётся).
В результате получается следующее:
юзер постит текст типа такой:
"Я сделал самый супер-пупер лучший скрипт форума....." ну и т.д.

В итоге получаем, что автоматически слово "скрипт" переделывается в ссылку, гна котороую очень приятным образом реагируют поисковые машины.

Хотелось бы конечно как-то более прикольнее реализовать формулу добавления слов в БД....

Аватар пользователя dyp@drupal.org dyp@drupal.org 7 декабря 2006 в 18:11

1. А где можно прочесть о том как поисковики реагируют на внутренние ссылки?
2. Как он будет реагировать если ключевое слово уже ссылка?

Аватар пользователя Dan Dan 7 декабря 2006 в 19:25

...ага, значит всё-таки через фильтр сделано...
Я думаю надо писать свой модуль.
Будет брать из словаря термины и искать их в тексте, при нахождении - переделывать в ссылки. При редактировании терма адрес можно заносить в синонимы. При отсутствии ссылки (в синомах) открывать стандартную страницу термина.
Как идея?

Аватар пользователя Dan Dan 7 декабря 2006 в 21:37

пока не могу.
если желание останется (у вас) и никто не напишет - попробую на следующей неделе.

Аватар пользователя dyp@drupal.org dyp@drupal.org 7 декабря 2006 в 21:58

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

Аватар пользователя moonman moonman 7 декабря 2006 в 22:28

А на друпал.орг может кто кинет идейку. может быть это уже есть на какой-либо стадии разработки....
или подскажут чего путнего....

Аватар пользователя emzi emzi 8 декабря 2006 в 12:13

что для поисковых систем важен также ключ title в ссылке. желательно, чтобы он совпадал или был похож на название или описание той страницы, куда ведет ссылка

Аватар пользователя moonman moonman 8 декабря 2006 в 13:19

emzi

Я лично сделал это следующими образом:

В файле: modules/bbcode-filter.inc

Ставим этот код:

 
// Links without a protocol, with a protocol and with good looking text
    '#\[url(?::\w+)?\]www\.([\w:;&,%+~!=@\/\.\-\#\?]+?)\[/url(?::\w+)?\]#si' => '<a href="http://www.\\1" class="bb-url">\\1</a>',
    '#\[url(?::\w+)?\]([\w:;&,%+~!=@\/\.\-\#\?]+?)\[/url(?::\w+)?\]#si'   => '<a href="\\1" class="bb-url">\\1</a>',
    '#\[url=www\.([\w:;&,%+~!=@\/\.\-\#\?]+?)\](.*?)\[/url(?::\w+)?\]#si' => '<a href="http://www.\\1" class="bb-url" title="\\2">\\2</a>',
    '#\[url=([\w:;&,%+~!=@\/\.\-\#\?]+?)\](.*?)\[/url(?::\w+)?\]#si'      => '<a href="\\1" class="bb-url" title="\\2">\\2</a>',

Вместо этого:

 
// Links without a protocol, with a protocol and with good looking text
    '#\[url(?::\w+)?\]www\.([\w:;&,%+~!=@\/\.\-\#\?]+?)\[/url(?::\w+)?\]#si' => '<a href="http://www.\\1" class="bb-url">\\1</a>',
    '#\[url(?::\w+)?\]([\w:;&,%+~!=@\/\.\-\#\?]+?)\[/url(?::\w+)?\]#si'   => '<a href="\\1" class="bb-url">\\1</a>',
    '#\[url=www\.([\w:;&,%+~!=@\/\.\-\#\?]+?)\](.*?)\[/url(?::\w+)?\]#si' => '<a href="http://www.\\1" class="bb-url">\\2</a>',
    '#\[url=([\w:;&,%+~!=@\/\.\-\#\?]+?)\](.*?)\[/url(?::\w+)?\]#si'      => '<a href="\\1" class="bb-url">\\2</a>',

Теперь все ссылки на сайте будут иметь свой title

Аватар пользователя romantaran romantaran 8 декабря 2006 в 13:32

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

Аватар пользователя moonman moonman 8 декабря 2006 в 14:27

Кстати аналогично можно сделать и для картинок (как известно такие крупные поисковые машины как Гугль и Яхууу индексируют по Alt-у картинок)

В коде того же файла modules/bbcode-filter.inc:

    '#\[img(?::\w+)?\]([\w:;&,~%+!=@\/\.\-\#\?]+)\[/img(?::\w+)?\]#si' => '<img src="\\1" alt="" class="bb-image" />',
    '#\[img=(\d+)x(\d+)(?::\w+)?\]([\w:;&,~%+!=@\/\.\-\#\?]+)\[/img(?::\w+)?\]#si' => '<img width="\\1" height="\\2" alt="" src="\\3" class="bb-image" />',

проставляем alt="....................."