Jak vylepšit komentáře redakčního systému Nucleus CMS
O vyšperkování komentářů podporou Gravatarů v redakčním systému Nucleus CMS jsem psal již dříve, nyní na přání čtenářů uveřejňuji návod jak jednoduše doplnit možnost reagovat na cizí komentář a jak reakci prolinkovat s komentářem původním.
Návod bych rozdělil do následujících tří kroků:
- doplnit číslování komentářů (včetně odkazu na vlastní komentář),
- přidat příkaz reagovat,
- nahradit značku reakce (ve tvaru [X]) v textu komentáře odkazem.
1. Číslování komentářů
Nejjednodušší z celé procedury je bod první. Postačí nainstalovat plugin NP_CommentCounter a do příslušné šablony (např. default/item) do okna Comment body (např. před jméno komentujícího) doplnit následující:
<div id="c<%CommentCounter%>" class="itemcomment id<%memberid%>"> [<a href="#c<%CommentCounter%>"><%CommentCounter%></a>] … </div>
2. Příkaz reagovat
Teď už to bude maličko složitější. Ještě předtím, než si šablonu (v našem případě default/item) uložíme, přidáme do okna Comment body (např. někam na konec) následující odkaz:
<a onclick="reaguj( <%CommentCounter%> )" href="#nucleus_cf">Reagovat</a>
Po kliknutí na uvedený link se zavolá JS funkce reaguj(), která může vypadat třeba nějak takto:
function reaguj(com_id) {
var elem = document.getElementById('nucleus_cf_body');
if (elem) {
elem.focus();
elem.value += '[' + (com_id) + '] ';
}
}
Funkci reaguj() je samozřejmě potřeba uložit do souboru JavaScriptu (např. script.js) a umístit do adresáře s vaším skinem (./skins/default) a dále výsledný souboru zaincludovat do hlavičky head.inc:
<!-- Global functions --> <script type="text/javascript" src="<%blogsetting(url)%>skins/default/script.js"></script>
3. Náhrada značky reakce odkazem
A konečně se dostávám k z mého pohledu nejobtížnější, ale naštěstí též finální fázi. Protože se mi bohužel nepodařilo najít žádný již existující plugin, který by vyhovoval mému záměru, byl jsem nucen snížit se k programování.
PHP je pro mě bohužel španělská vesnice a s regulárními výrazy na tom nejsem o moc lépe. Rozhodl jsem se proto inspirovat se u v PHP zběhlejších kolegů a otevřel si soubor s Texy!. Tam se to přece musí regulárními výrazy jen hemžit, říkal jsem si. Opak je pravdou. Přece jen se mi však nakonec podařilo najít příslušnou funkci a mohl jsem tedy dokončit svůj první plugin pro Nucleus CMS. Zde je výsledek mého zhruba dvouhodinového snažení:
function event_PreComment($data) {
$data['comment']['body'] = preg_replace('#\[[0-9]+\]#',
'<a href="#c~\\0~">\\0</a>:', $data['comment']['body']);
$data['comment']['body'] = str_replace(Array('~[', ']~'), '',
$data['comment']['body']);
}
Říkáte si, že jsem se zrovna moc nevytáhl? Myslíte, že by to šlo napsat lépe? Velmi pravděpodobně máte pravdu, ale já jsem vděčný i za toto skromné řešení. Hlavní pro mě je, že to funguje.
Kompletní plugin NP_CommentLinkAdd (© Pavel Jaroš) si můžete stáhnout zde a poté už vám stačí jej pouze uložit do souboru NP_CommentLinkAdd.php a nainstalovat.
Enjoy!






