Подтвердить что ты не робот

Система комментариев для каждого абзаца

Меня очень интересует возникающая тенденция систем комментариев с комментариями (также называемых "системами аннотаций" ), таких как те, которые реализованы medium.com и qz.com, и я смотрю на идею разработки одного для себя.

Вопрос: похоже, они в основном реализованы через javascript, который проходит через текстовые html-абзацы, однозначно идентифицированные атрибутом id (или, в случае Medium, атрибутом name). Означает ли это, что их CMS фактически хранит каждый абзац в качестве отдельной записи в базе данных? Слишком сложно для меня, но в остальном, как они справляются с тем, что абзац можно удалить, отредактировать или переместить в общем тексте? Как сохранить уникальный идентификатор, если автор изменит этот абзац? Как этот уникальный идентификатор логически структурирован? (post_id + position_in_post)?

Спасибо за ваши идеи...

4b9b3361

Ответ 1

Я не могу говорить со средней стороной, но, как один из разработчиков для Quartz, я могу дать представление о том, как работают аннотации qz.com.

Код аннотации - это настраиваемый PHP-код и не зависит от CMS для публикации статей (wordpress VIP). Мы действительно храним ссылку на каждый абзац в виде строки в базе данных, чтобы отслеживать любые обновления содержимого статьи. Мы называем это потоком аннотаций, и когда пользователь сохраняет аннотацию, файл threadId сохраняется вместе с аннотацией.

У нас нет уникального идентификатора, хранящегося на стороне wordpress для каждого абзаца, вместо этого мы сохраняем относительное положение абзацев в этой статье (nodeIndex "3" и nodeSelector "p" == третий p-тег в теле контента для данной статьи), а javascript определяет, где именно разместить блок аннотации. Мы пошли по этому пути, чтобы избежать более тяжелых настроек на стороне wordpress, хотя в зависимости от вашей CMS может быть проще обратиться к этому непосредственно в коде CMS и добавить уникальные идентификаторы в html перед отправкой клиенту.

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

Несколько альтернативных последствий, на которые стоит обратить внимание, - это текстовые аннотации Gawker Kinja (в настоящее время используются на Jalopnik) и дословные аннотации rapgenius.com.

Ответ 2

(отказ от ответственности: я factlink dev.)

Я работаю в компании, пытающейся разрешить компиляцию по абзацу (или по фразе) на произвольных сайтах. По сути, у вас есть два варианта определения якоря комментария.

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

Обе системы имеют свои недостатки, но вам очень нужно пойти с вариантом 2, если вам нужна надежная система. Структурная идентификация является хрупкой перед лицом меняющейся структуры. Особенно неулокальные изменения, такие как тезинг или точные html-теги, могут существенно повлиять на "путь". Когда это произойдет, вы действительно не сможете это исправить - если вы не проверите содержимое, то есть вариант (2).

Сэм описывает, что сводится к серверному контенту, основанному на его ответе. Чистое совпадение на основе контента на стороне клиента - это factlink и (IIRC) гипотеза. Большинство браузеров поддерживают нестандартный, но быстрый поиск подстроки в содержимом страницы, используя window.find или TextRange.findText. В качестве альтернативы вы можете пройти DOM, который медленнее, но дает вам гибкость в реализации (например,) нечеткого соответствия.

Может показаться, что совпадение на стороне клиента является чрезмерным или сложным, но на самом деле это проще: это очень надежный способ отделить ваше управление контентом от комментариев. Ни один из них не является простым, поэтому развязка этих проблем может быть победой.

Ответ 3

Я создал скрипку на тех же строках, чтобы продемонстрировать мощь JQuery во время тренировки.

http://fiddle.jshell.net/fotuzlab/Lwhu5/

Может помочь в качестве отправной точки вместе с подробными и полезными сведениями Сэма. Вы получаете значение текстового поля в функции JQuery, где вы можете отправить его на свою CMS с помощью ajax/API.

PS: функция не готова к производству. Это означало только отправную точку. Небольшая настройка сделает ее пригодной для использования.

Ответ 4

Недавно я опубликовал сообщение о том, как это сделать с созданием WordPress на существующем плагине.

Как и qz.com, я назначаю идентификаторы абзаца на клиенте, а затем предоставляю эту информацию в WordPress для хранения в качестве метаданных комментариев при создании нового комментария. Я использовал хэширование текста абзаца для создания идентификатора, что означает, что порядок абзацев неважен, но означает, что если отредактирован абзац, любые связанные комментарии становятся сиротами.

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

Код свободно доступен на GitHub, если вы чувствуете, что его разворачиваете и улучшаете.

Ответ 5

Существует еще один плагин wordpress, называемый "commentpress", который существует с давних времен. Я использую старую версию этого плагина для своего блога, и он работает очень хорошо.

Вы можете прокомментировать строки или абзацы, и эргономика действительно думает!

Демонстрация здесь:
http://futureofthebook.org/
и весь код находится на github:
https://github.com/IFBook/commentpress-core

После быстрого просмотра кода кажется, что они используют второй подход, например, @Eamon Nerbonne объясняет его ответ. Они анализируют каждый абзац, чтобы сделать подпись на основе первого char каждого слова. Здесь - это функция для этого.

Ответ 6

В случае, если кто-то заглянет сюда, я применил среду, такую ​​как функциональность, как приложение Django. Он является открытым исходным кодом и может быть найден как пакет на Pypi и github.

Я использовал одно из моих других приложений blogging, чтобы выделять уникальные идентификаторы абзацев для каждого объекта контента (в настоящее время мы смотрим только на <p>), и puts использует некоторые дополнительные внутренние метаданные в бэкэнд, сохраняя его в БД (в настоящее время MySQL, но мы сделали это JSON ed Blob, этот метод более подходит для ориентированных на документ DB). Интерфейс в основном jQuery управляется с помощью REST API, подключающего бэкэнд с интерфейсом.

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

Подробнее в этих учебниках

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