FastComments.com

Add Comments to GoHighLevel Sites


Sa FastComments lako možemo dodati komentare u realnom vremenu na bilo koji sajt napravljen pomoću GoHighLevel.

Imajte na umu da ovaj tutorijal zahteva FastComments nalog. Preporučuje se da se prvo registrujete, pa se potom vratite ovde. Možete kreirati nalog ovde.

Prijavljivanje unapred će osigurati da su generisani isječci koda već vezani za vaš nalog.

GoHighLevel sajtovi za članstvo i ostali sajtovi

Ovaj tutorijal je podeljen u dve kategorije: sajtovi za članstvo i obični GoHighLevel sajtovi.

Počinјemo sa uputstvima za sajtove za članstvo.


Korak 1: Uredi kurs Internal Link


Prvo ćemo izmeniti podešavanja za naš kurs.

Da biste to uradili, otvorite kurs i kliknite na Edit Details.

Uredi detalje kursa
Uredi detalje kursa

Korak 2: Otvori napredna podešavanja Internal Link


Zatim treba da otvorimo Advanced podešavanja:

Otvorite napredna podešavanja
Otvorite napredna podešavanja

Dodaćemo naš kod u sekciju Tracking Code. Idite u tu sekciju i kliknite Footer Code.


Korak 3: Kopiraj kod Internal Link

Sada ćemo generisati vaš prilagođeni FastComments kod. Koristite čarobnjak ispod da konfigurišete kako želite da FastComments radi na vašem GoHighLevel sajtu:

FastComments Configuration Wizard

Choose the type of commenting experience you want
How should the widget be placed on your pages?
Comma-separated URL patterns (leave empty for all pages)
Your FastComments tenant ID (use "demo" for testing)

Različite vrste polja za komentare

Možete podesiti liniju TYPE = 'commenting' da promenite koji se proizvod koristi (na primer, možete je promeniti u live za streaming chat ili collab za collab chat).

Postavljanje polja za komentare tamo gde želite

Recimo da želite postaviti polja za komentare na određene delove stranice, a ne na podrazumevane lokacije. Promenite ovu liniju:

const TARGET_ELEMENT_ID = ''; // set to use target div mode

U:

const TARGET_ELEMENT_ID = 'fc_box'; // set to use target div mode

Zatim u GHL editoru kliknite na dugme "code" i dodajte gde želite da komentari budu prikazani:

GoHighLevel FastComments Div
Copy Copy
1
2<div
3 id="fc_box"
4 type="commenting"
5 urlid="custom-chat-id"
6></div>
7

Različita vrsta polja za komentare po stranici

Recimo da želite da korisnici označavaju i diskutuju delove teksta, ili da umesto toga koriste streaming chat UI.

Prvo sledite korake iz odeljka "Postavljanje polja za komentare tamo gde želite".

Primetite da u tom malom snippetu stoji type="commenting".

Ako želite, na primer, da omogućite collab chat, promenite type u type="collab".

Prikazivati samo na određenim stranicama

Ako ne podesite TARGET_ELEMENT_ID, umesto toga možete konfigurisati promenljivu VALID_PATTERNS, da odredite na kojim URL rutama treba da se prikazuju komentari. Po podrazumevanju prikazivaće se na stranicama koje u URL-u sadrže /post.

Konfigurisanje Collab chata

Možete reći collab chatu da doda kolaborativnu funkcionalnost samo oko HTML-a unutar određenog područja; na primer, recimo da dodate footer kod iznad, a zatim ubacite ovaj div u sadržaj posta/stranice da biste omogućili collab chat:

Collab chat sa određenim sadržajem
Copy Copy
1
2<div
3 id="fc_box"
4 type="collab"
5 urlid="custom-chat-id"
6><p>This content will have collab chat!</p></div>
7

Tada će paragraf unutar <div> elementa imati omogućen collab chat, a ništa drugo na stranici neće. Ako ne stavite nikakav sadržaj u <div> tada će collab chat biti omogućen na celom sadržaju posta.


Korak 4: Nalepi kod Internal Link

Sada kada smo kopirali naš isječak koda, nalepite ga u odeljak Footer Code kako je prikazano:

Nalepite kod
Nalepite kod

Uspeh članskog sajta Internal Link

To je to! Sada biste trebali imati omogućeno komentarisanje uživo na vašem GoHighLevel kursu.

Uspešno
Uspešno

Ako ste naišli na grešku permission denied, ili želite da prilagodite FastComments, nastavite čitati.

Prilagođavanje članskog sajta Internal Link


FastComments je dizajniran da se prilagodi vašem sajtu.

Ako želite da dodate prilagođeni stil, ili podesite konfiguraciju, Pogledajte našu dokumentaciju o prilagođavanju da saznate kako.


Korak 1: Dodaj element za prilagođeni kod Internal Link

Prvo ćemo otvoriti editor za stranicu našeg sajta na kojoj želimo da dodamo komentare.

Otvorite editor
Otvorite editor

Sada pronađite mesto na stranici gde želite da dodate komentare. Pomaknite miša prema kraju tog područja. Pojaviće se ikona +:

Dodajte sekciju
Dodajte sekciju

Ako kliknemo na nju, pita nas koliko kolona nova sekcija treba da ima. Izabraćemo 1 COLUMN:

Dodajte kolonu
Dodajte kolonu

Sada, ako pomerite miša preko novog reda sa jednom kolonom videćete opciju da dodate element. Kliknite na nju:

Dodajte element
Dodajte element

Skrolujte nadole i izaberite CUSTOM JS/HTML:

Izaberite CUSTOM JS/HTML
Izaberite CUSTOM JS/HTML

Sada izaberite naš novi element i kliknite Open Code Editor sa leve strane:

Otvorite editor koda
Otvorite editor koda

Korak 2: Kopiraj i nalepi kod Internal Link

Vreme je da kopiramo naš kod. Kopirajte sledeći kod:

Kod komentara sajta GoHighLevel
Copy Copy
1
2<script src="https://cdn.fastcomments.com/js/embed-v2.min.js"></script>
3<div id="fastcomments-widget"></div>
4<script>
5 (function () {
6 const tenantId = 'demo';
7 const SCRIPT_ID = 'fastcomments-embed';
8 const WIDGET_ID = 'fastcomments-widget';
9
10 let lastInstance;
11 let currentUrlId;
12 let rendered = false;
13
14 // Izmene History API-ja za podršku SPA
15 const oldPushState = history.pushState;
16 history.pushState = function pushState() {
17 const ret = oldPushState.apply(this, arguments);
18 window.dispatchEvent(new Event('pushstate'));
19 window.dispatchEvent(new Event('locationchange'));
20 return ret;
21 };
22
23 const oldReplaceState = history.replaceState;
24 history.replaceState = function replaceState() {
25 const ret = oldReplaceState.apply(this, arguments);
26 window.dispatchEvent(new Event('replacestate'));
27 window.dispatchEvent(new Event('locationchange'));
28 return ret;
29 };
30
31 window.addEventListener('popstate', () => {
32 window.dispatchEvent(new Event('locationchange'));
33 });
34
35 function getContainer() {
36 return document.getElementById(WIDGET_ID);
37 }
38
39 // Funkcija koja osigurava da je skripta učitana
40 function ensureScriptLoaded() {
41 return new Promise((resolve) => {
42 // Proveri da li tag skripte već postoji
43 let scriptTag = document.getElementById(SCRIPT_ID);
44
45 if (!scriptTag) {
46 console.log('FastComments: Script tag not found, adding dynamically...');
47 scriptTag = document.createElement('script');
48 scriptTag.id = SCRIPT_ID;
49 scriptTag.src = 'https://cdn.fastcomments.com/js/embed-v2.min.js';
50 scriptTag.async = true;
51
52 scriptTag.onload = () => {
53 console.log('FastComments: Script loaded successfully');
54 resolve();
55 };
56
57 scriptTag.onerror = () => {
58 console.error('FastComments: Failed to load script');
59 resolve(); // Resolve anyway to prevent hanging
60 };
61
62 document.head.appendChild(scriptTag);
63 } else if (window.FastCommentsUI) {
64 // Tag skripte postoji i već je učitan
65 console.log('FastComments: Script already loaded');
66 resolve();
67 } else {
68 // Tag skripte postoji ali još nije spreman
69 console.log('FastComments: Waiting for script to initialize...');
70 scriptTag.addEventListener('load', () => {
71 resolve();
72 });
73
74 // Rezervna provera u slučaju da se skripta već učitava
75 const checkInterval = setInterval(() => {
76 if (window.FastCommentsUI) {
77 clearInterval(checkInterval);
78 resolve();
79 }
80 }, 100);
81
82 // Istek vremena nakon 10 sekundi
83 setTimeout(() => {
84 clearInterval(checkInterval);
85 console.warn('FastComments: Script load timeout');
86 resolve();
87 }, 10000);
88 }
89 });
90 }
91
92 // Glavna funkcija za renderovanje
93 async function render() {
94 rendered = false;
95
96 // Osiguraj da je skripta učitana pre nego što nastavimo
97 await ensureScriptLoaded();
98
99 function tryNext() {
100 if (rendered) {
101 return;
102 }
103
104 const container = getContainer();
105
106 if (container) {
107 // Dodatna provera da li je FastCommentsUI dostupan
108 if (!window.FastCommentsUI) {
109 console.log('FastComments: not ready, waiting...');
110 setTimeout(tryNext, 300);
111 return;
112 }
113
114 console.log('FastComments: Target element found, initializing...');
115
116 // Dobavi trenutni URL kao urlId
117 const newUrlId = window.location.pathname;
118
119 // Proveri da li treba ponovo renderovati (urlId se promenio ili je prvo renderovanje)
120 if (currentUrlId !== newUrlId || !lastInstance) {
121 currentUrlId = newUrlId;
122
123 // Uništi prethodnu instancu ako postoji
124 if (lastInstance) {
125 lastInstance.destroy();
126 // Obriši sadržaj kontejnera
127 container.innerHTML = '';
128 }
129
130 // Pripremi konfiguraciju
131 const config = {
132 tenantId: tenantId,
133 urlId: newUrlId
134 };
135
136 console.log('FastComments: Using urlId:', newUrlId);
137
138 // Inicijalizuj FastComments
139 lastInstance = window.FastCommentsUI(container, config);
140 rendered = true;
141 } else {
142 console.log('FastComments: Already rendered with same urlId');
143 rendered = true;
144 }
145
146 // Prati da li je kontejner uklonjen ili se promenio URL
147 const interval = setInterval(function () {
148 const currentContainer = getContainer();
149 if (!currentContainer) {
150 console.log('FastComments: Container removed, will retry...');
151 rendered = false;
152 currentUrlId = null;
153 tryNext();
154 clearInterval(interval);
155 } else {
156 const newUrlId = window.location.pathname;
157 if (newUrlId !== currentUrlId) {
158 console.log('FastComments: URL changed, re-rendering...');
159 rendered = false;
160 tryNext();
161 clearInterval(interval);
162 }
163 }
164 }, 1000);
165 } else {
166 console.log('FastComments: Target element not found, waiting...');
167 setTimeout(tryNext, 300);
168 }
169 }
170
171 tryNext();
172 }
173
174 // Početno renderovanje kada je DOM spreman
175 if (document.readyState === 'loading') {
176 document.addEventListener('DOMContentLoaded', render);
177 } else {
178 render();
179 }
180
181 // Ponovo renderuj pri promeni lokacije (za SPA)
182 window.addEventListener('locationchange', function () {
183 console.log('FastComments: Location changed, updating...');
184 render();
185 });
186 })();
187</script>
188

Zalepite to u prozor editora koji smo otvorili:

Zalepi kod
Zalepi kod

Sada možemo kliknuti na Yes, Save u donjem desnom uglu tog prozora.

Na vrhu stranice sada kliknite na Save, a zatim na Preview.


Uspeh sajta Internal Link

To je to! Sada bi trebalo da imate omogućeno komentarisanje uživo na vašem GoHighLevel sajtu.

Uspeh
Uspeh

Ako ste naišli na grešku 'permission denied', ili želite da prilagodite FastComments, nastavite sa čitanjem.


Prilagođavanje sajta Internal Link


FastComments je dizajniran da se prilagodi vašem sajtu.

Ako želite da dodate prilagođeni stil ili da podesite konfiguraciju, Pogledajte našu dokumentaciju za prilagođavanje da saznate kako.



Zaključno

Ako iz bilo kog razloga navedeni koraci ili kod ne funkcionišu, molimo vas da nas obavestite.