system komentowania poszczególnych akapitów

Jestem bardzo zainteresowany pojawiającym się trendem systemów komentarzy do akapitu (zwanych również "systemami adnotacji"), takich jak te zaimplementowane przez medium.com i qz.com i patrzę na pomysł stworzenia takiego dla siebie.

Pytanie: wydaje się, że są one realizowane głównie za pomocą javascript, który przebiega przez akapity html tekstu jednoznacznie identyfikowane przez atrybut id (lub, w przypadku Medium, atrybut name). Czy to znaczy, że ich CMS faktycznie sklep każdy akapit jako osobny wpis w bazie danych? Wydaje mi się to zbyt skomplikowane, ale poza tym, jak radzą sobie z tym, że akapit może być usunięty, edytowany lub przenoszony w całym tekście? W jaki sposób unikalny identyfikator zostanie zachowany, jeśli autor zmieni akapit? W jaki sposób ten unikalny identyfikator jest logicznie skonstruowany? (post_id + position_in_post)?

Dziękuję za spostrzeżenia...

Author: pixeline, 2013-10-20

6 answers

Nie mogę rozmawiać ze średnią stroną, ale jako jeden z twórców Quartz mogę dać wgląd w to, jak qz.com adnotacje działają.

Kod adnotacji jest niestandardowym kodem php i jest niezależny od CMS do publikowania artykułów (WordPress VIP). Rzeczywiście przechowujemy odniesienie do każdego akapitu jako wiersz w bazie danych, aby śledzić wszelkie aktualizacje treści artykułu. Nazywamy to wątkiem adnotacji, a gdy użytkownik zapisze adnotację, threadId zostanie zapisany wraz z adnotacja.

Nie mamy unikalnego identyfikatora przechowywanego po stronie WordPressa dla każdego akapitu, zamiast tego przechowujemy względną pozycję akapitów w tym artykule (nodeIndex "3" i nodeSelector "p" == trzeci znacznik p w treści danego artykułu), a javascript określa, gdzie dokładnie umieścić blok adnotacji. Poszliśmy tą drogą, aby uniknąć cięższych dostosowań po stronie wordpress, choć w zależności od Twojego CMS może być łatwiejsze rozwiązanie tego bezpośrednio w kodzie CMS i dodać unikalne identyfikatory w html przed wysłaniem do klienta.

Za każdym razem, gdy publikowana jest aktualizacja artykułu, każdy akapit w zaktualizowanym artykule jest porównywany z tym, co wcześniej było przechowywane w wątkach adnotacji dla tego artykułu. Jeśli pozycja i tekst akapitu nie pasują do siebie, próbuje znaleźć akapit, który jest najbliżej dopasowania i zaktualizować wiersz dla tego wątku, a nowe wątki są tworzone i usuwane w stosownych przypadkach. Wszystko to jest obsługiwane po stronie serwera ilekroć zmiany są publikowane w artykule.

Kilka alternatywnych implikacji, na które warto również spojrzeć, to adnotacje tekstowe Gawkera Kinja (obecnie używane na Jalopniku) i adnotacje słowo w słowo rapgenius.com.

 13
Author: Sam Williams,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-04 01:26:45

(disclaimer: I ' m a factlink dev.)

Pracuję dla firmy, która próbuje zezwolić na komentowanie dowolnych stron za pomocą akapitu (lub frazy). Zasadniczo masz dwie opcje, aby zidentyfikować kotwicę komentarza.

  1. Zapamiętaj strukturę strony (np. ścieżkę od katalogu głównego do akapitu) i następnym razem umieść komentarze w tej samej pozycji.
  2. Określ treść akapitu i umieść komentarze w pobliżu identycznej lub podobnej treści obok czas.

Oba systemy mają swoje wady, ale musisz wybrać opcję 2, jeśli chcesz mieć solidny system. Identyfikacja strukturalna jest krucha w obliczu zmieniającej się struktury. Szczególnie nieistotne zmiany, takie jak tematyka lub precyzyjne użyte znaczniki html, mogą znacząco wpłynąć na"ścieżkę". Kiedy tak się dzieje, naprawdę nie możesz tego naprawić-chyba że sprawdzisz zawartość, np. opcja (2).

Sam opisuje co sprowadza się do treści po stronie serwera-w jego odpowiedź . Dopasowywanie zawartości po stronie klienta jest tym, czego używają factlink i (IIRC) hipoteza. Większość przeglądarek obsługuje niestandardowe, ale szybkie wyszukiwanie w treści strony za pomocą window.find lub TextRange.findText. Alternatywnie, możesz chodzić po DOM, który jest wolniejszy, ale daje elastyczność implementacji (np.) dopasowania rozmytego.

Może się wydawać, że dopasowanie po stronie klienta jest przesadne lub złożone, ale tak naprawdę jest prostsze: jest to bardzo solidny sposób na oddziel zarządzanie treścią od komentowania. Żadna z nich nie jest naprawdę prosta, więc oddzielenie tych obaw może być wygraną.
 5
Author: Eamon Nerbonne,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:16:59

Stworzyłem skrzypce na tych samych liniach, aby zademonstrować moc JQuery podczas sesji treningowej.

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

Może pomóc jako punkt wyjścia wraz ze szczegółowymi i przydatnymi spostrzeżeniami sama. Otrzymasz wartość textfield w funkcji Jquery, gdzie można wysłać go do swojego CMS za pomocą ajax / API.

PS: funkcja nie jest gotowa do produkcji. To tylko punkt wyjścia. Odrobina poprawek sprawi, że użyteczny.

 4
Author: fotuzlab,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-08 10:25:00

Niedawno opublikował post Jak to zrobić z WordPress budynku na istniejącej wtyczki.

Jak qz.com przypisuję identyfikatory akapitów klientowi, a następnie dostarczam te informacje do WordPressa, aby przechowywać je jako meta komentarza, gdy tworzony jest nowy komentarz. Użyłem hashowania tekstu akapitu, aby utworzyć id, co oznacza, że kolejność akapitów jest nieistotna, ale oznacza to, że jeśli akapit jest edytowany, wszelkie powiązane komentarze zostaną osierocone.

Na początku I myślałem, że to problem, ale myśląc o tym, jeśli czytelnik komentuje akapit, a następnie edytowanie tego tekstu wydaje się trochę podstępne.

Kod jest swobodnie dostępny na Githubie, jeśli masz ochotę go rozwidlić i ulepszyć.

 3
Author: Chris Knowles,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-15 02:12:39

Istnieje jeszcze jedna wtyczka wordpress o nazwie "commentpress", która istnieje od dawna. Używam starej wersji tej wtyczki dla mojego bloga i działa bardzo dobrze.

Możesz komentować według linii lub akapitów, a ergonomia to naprawdę myślenie!

Demo tutaj:
http://futureofthebook.org/
a cały kod jest na GitHubie:
https://github.com/IFBook/commentpress-core

Po krótkim spojrzeniu na kod, wydaje się, że używają drugie podejście jak @Eamon Nerbonne wyjaśnia na swoją odpowiedź . Analizują każdy akapit, aby utworzyć podpis na podstawie pierwszego znaku każdego słowa. tutaj jest funkcja do tego.

 2
Author: ManUtopiK,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:53:24

Na wypadek, gdyby ktoś tu zaglądał, zaimplementowałem taką funkcjonalność medium jak aplikacja Django. Jest open source i można go znaleźć jako pakiet na Pypi oraz na github .

Użyłem jednej z moich innych aplikacji, blogowanie aby przydzielić unikalne identyfikatory akapitów do każdego obiektu zawartości (obecnie patrzymy tylko na tagi <p>) i puts używa dodatkowych wewnętrznych meta danych w backendzie, przechowując je w DB (MySQL obecnie, ale to, co zrobiliśmy, to JSON ed Blob, ta metoda jest bardziej natywnie odpowiednia dla DBs zorientowanych na dokument). Frontend jest głównie oparty na jQuery z REST API podłączającym backend do frontendu.

Wziąłem wskazówki z tego postu, ale potem odrzuciłem tworzenie jakiejś wartości digest z akapitu, ponieważ treść Może zmienić. Chciałem zachować adnotacje tak długo, jak akapit nie był całkowicie napisany. W kompletnej nadpisanej sprawie podałem do odbioru adnotacje w osieroconym wiadrze.

Więcej w tych tutorialach

Starsza wersja tego samego działa na tych stronach samouczków, to była pierwsza wersja. (Ale nie będziesz mógł publikować postów bez logowania, ale zawsze możesz zalogować się za pomocą kont społecznościowych, aby to sprawdzić: -))

 2
Author: Anshul,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-24 09:52:17