FastComments.com

Динамічне додавання та заміна ниток коментарів

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

Динамічне додавання та заміна ниток коментарів Internal Link

Це все робиться шляхом налаштування urlId та пов'язаних параметрів і виклику update() на екземплярах віджетів, щоб замінити їх на інший потік коментарів.

Нижче наведено інтерактивний приклад (натисніть run у верхньому лівому куті), який дозволяє додавати та замінювати потоки коментарів на вимогу. Ми також могли б видалити їх, викликавши instance.destroy замість update.

Додавання та заміна потоків коментарів
Copy CopyRun External Link
1
2 <script src="https://cdn.fastcomments.com/js/embed-v2.min.js"></script>
3
4 <div id="fastcomments-widgets"></div>
5 <div class="demo-form">
6 <section>
7 <h3>Додати або замінити продукт/потік коментарів</h3>
8 <label>
9 Назва продукту
10 <input type="text" name="name" />
11 </label>
12 <label>
13 ID продукту
14 <input type="text" name="id" />
15 </label>
16 <label>
17 URL продукту
18 <input type="url" name="url" />
19 </label>
20 <label>
21 Замінює продукт (id)
22 <input type="text" name="replaces_id" />
23 </label>
24 <button type="button">Додати/Замінити</button>
25 </section>
26 </div>
27 <script>
28 (function () {
29 const target = document.getElementById('fastcomments-widgets');
30 const tenantId = "demo"; // ВСТАВТЕ СВІЙ TENANT ID ТУТ
31
32 function setHeading(heading, {name, productID}) {
33 heading.innerHTML = `${name} (${productID})`;
34 }
35
36 function addWidget({name, productID, productURL}) {
37 const outer = document.createElement('div');
38 const heading = document.createElement('h5');
39 setHeading(heading, {name, productID});
40 const inner = document.createElement('div');
41 inner.append(heading);
42 outer.append(inner);
43 const widgetTarget = document.createElement('div');
44 outer.append(widgetTarget);
45 target.append(outer);
46 window.FastCommentsUI(widgetTarget, {
47 "tenantId": tenantId,
48 "pageTitle": name, // для листів зі сповіщеннями та панелі модерації
49 "url": productURL, // для листів зі сповіщеннями та панелі модерації
50 "urlId": productID,
51 "showLiveRightAway": true
52 });
53 }
54
55 function switchProduct(oldId, {name, productID, productURL}) {
56 for (const instanceWrapped of fcUIInstances) {
57 if (instanceWrapped.targetElement) {
58 const config = instanceWrapped.config;
59 if (config.urlId === oldId) {
60 const heading = instanceWrapped.targetElement.parentNode.querySelector('h5');
61 setHeading(heading, {name, productID});
62 config.pageTitle = name;
63 config.urlId = productID;
64 config.url = productURL;
65 instanceWrapped.instance.update(config);
66 return;
67 }
68 }
69 }
70 alert(`Продукт ${oldId} для заміни не знайдено!`);
71 }
72
73 // додамо кілька віджетів
74 addWidget({name: "Product A", productID: 'product-id-a', productURL: 'https://example.com/a'});
75 addWidget({name: "Product B", productID: 'product-id-b', productURL: 'https://example.com/b'});
76
77 const form = document.querySelector('.demo-form');
78 form.querySelector('button').addEventListener('click', function() {
79 const name = form.querySelector('input[name=name]').value;
80 const productID = form.querySelector('input[name=id]').value;
81 const productURL = form.querySelector('input[name=url]').value;
82 const replaces_id = form.querySelector('input[name=replaces_id]').value;
83
84 if (replaces_id) {
85 switchProduct(replaces_id, {
86 name,
87 productID,
88 productURL,
89 });
90 } else {
91 addWidget({name, productID, productURL});
92 }
93 });
94 })();
95 </script>
96 <style>
97 #fastcomments-widgets {
98 display: flex;
99 }
100 #fastcomments-widgets > div {
101 width: 100%;
102 }
103
104 .demo-form section label {
105 display: block;
106 margin-bottom: 20px;
107 }
108 </style>
109

Це схоже на те, як працює пагінація.

З React та пов'язаними бібліотеками ми можемо просто оновити конфігурацію, і бібліотека (React, Angular, Vue) сама подбає про оновлення віджета. З VanillaJS нам доводиться керувати цим самостійно, як показано вище.

Не соромтеся ставити будь-які запитання нижче, і ми зробимо все можливе, щоб допомогти!