Как мне справиться с автосвязью в содержимом вики-страниц? - PullRequest
4 голосов
/ 18 августа 2008

То, что я имею в виду под автоматическим связыванием, - это процесс, с помощью которого вики-ссылки, встроенные в содержимое страницы, преобразуются в гиперссылку на страницу (если она существует) или в ссылку для создания (если страница не существует). *

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

Как лучше всего справиться с этим процессом? Кажется, что мне нужно хранить кэшированный список каждой страницы на сайте, а не извлекать каждый раз указатель заголовков страниц. Или лучше проверить каждую ссылку отдельно, чтобы увидеть, существует ли она? Это может привести к большому количеству поисков в базе данных, если список не был кэширован. Будет ли это жизнеспособным для большого вики-сайта с тысячами страниц?

Ответы [ 6 ]

1 голос
/ 15 октября 2008

Я пытался сделать это один раз, и это был кошмар! Моим решением был неприятный цикл в процедуре SQL, и я не рекомендую его.

Одна вещь, которая доставляла мне проблемы, заключалась в том, чтобы решить, какую ссылку использовать в фразе из нескольких слов. Скажем, у вас был какой-то текст с надписью «Я использую переполнение стека», а в вашей вики было 3 страницы, которые назывались «стек», «переполнение» и «переполнение стека» .... с какой частью вашей фразы связано, где? Это случится!

1 голос
/ 22 августа 2008

В моей собственной вики-системе моя система кеширования довольно проста - когда страница обновляется, она проверяет ссылки, чтобы убедиться, что они действительны, и применяет правильное форматирование / расположение для тех, которые не являются. Кэшированная страница сохраняется как HTML-страница в корне моего кэша.

Страницы, помеченные как «не созданные» во время обновления страницы, вставляются в таблицу базы данных, которая содержит страницу, а затем в CSV-страницу страниц, которые ссылаются на нее.

Когда кто-то создает эту страницу, он запускает сканирование для просмотра каждой страницы ссылки и повторно кэширует страницу ссылки с правильной ссылкой и форматированием.

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

1 голос
/ 18 августа 2008

В моей собственной вики я проверяю все ссылки (без кэширования), но моя вики используется только несколькими людьми внутри страны. Вы должны сравнить такие вещи.

0 голосов
/ 01 сентября 2011

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

Как вы думаете, генерация автосвязанной вики-страницы занимает много времени. Однако при создании статической HTML-ситуации регенерирование автоматически привязанной вики-страницы происходит только тогда, когда вики-страница вновь добавляется или удаляется (другими словами, это не происходит при обновлении вики-страницы), а «регенерирование» может выполняться в фоновом режиме, поэтому обычно не важно, как это займет много времени. Пользователь увидит только сгенерированный статический HTML.

0 голосов
/ 18 февраля 2009

В личном проекте, который я сделал с помощью Sinatra ( текст ссылки ), после того как я запустил контент через Markdown, я делаю gsub для замены слов вики и других вещей (например, [[Вот моя ссылка]] и еще много чего) с надлежащими ссылками, при каждой проверке, существует ли страница, и создание ссылок или просмотр в зависимости.

Это не самое лучшее, но я не создавал это приложение с учетом кеширования / скорости. Это простой ресурс вики с низким ресурсом.

Если бы скорость была важнее, вы могли бы обернуть приложение во что-то, чтобы кэшировать его. Например, синатру можно обернуть с помощью кэширования в стойке.

0 голосов
/ 28 августа 2008

Моя идея заключается в том, чтобы запросить заголовки типа SELECT title FROM articles и просто проверить, есть ли каждая вики-ссылка в этом массиве строк. Если это ссылка на страницу, если нет, ссылка на страницу создания.

...