LOGOUT / OK1ZXS

LionWiki-blog - jednoduché CMS pro blog a wiki

Před pár měsíci jsem hledal co nejjednodušší systém pro tvorbu blogu, který by se obešel bez databáze a pokud možno uměl nejen blogové příspěvky ale i statické stránky mimo blog. Neměl jsem žádné přehnané požadavky - oželím WYSIWYG editor, články netřeba členit do kategorií, není nutné plánovat jejich zveřejnění - WordPress je v takovém případě zbytečný kanon na vrabce.

Dlouho jsem si nemohl nic vybrat, vše co jsem nacházel, bylo zbytečně složité - ani ne ve smyslu instalace, správy či používání, ale spíše z hlediska zbytečné komplexnosti kódu a nároků na server. Nejvíce mě zaujala wiki Oddmuse, která umí s pomocí blogovacího pluginu přesně to, co jsem chtěl. Vše se zapisuje v prohlížeči do obyčejného pole typu <textarea> ve značkovacím jazyce Markdown a generuje jako blog z nějž je možné odkazovat a tvořit i běžné wikistránky. Celá Oddmuse je ovšem psána v Perlu a veškerá konfigurace se děje uživatelskou redefinicí patřičných procedur. Neexistuje tu třeba nic jako HTML šablona pro vzhled: Chcete aby se výsledné HTML generovalo trochu jinak? Musíte si přepsat proceduru, respektive v konfiguračním souboru napsat proceduru vlastní a původní jí přetížit. Perl mám rád, ale tohle jsem po chvíli vzdal.

Tato několikadenní zkušenost mě však přivedla na myšlenku, napsat pro LionWiki, kterou dlouhé roky používám, podobný plugin. Tak se i stalo - plugin vznikl a byl odladěn za necelé dva týdny, nasazen na několik webů/blogů a nakonec zveřejněn na mém GitHub profilu. Je tam i celkem dlouhé README, následující řádky budou pokusem o jeho českou verzi.

Změny proti původní LionWiki

Fork LionWiki jsem provedl z verze 3.2.9, která je už sedm let stará a neběží na PHP7, nicméně na svém serveru zatím provozuju pouze PHP5, takže jsem neměl potřebu upgradovat. Je to převážně proto, že některé z níže popsaných změn jsem dělal v průběhu všech těch roků, kdy LionWiki používám a znamenalo by to je promítat do (odlišného) kódu nových verzí. Až v budoucnu na server PHP7 konečně nainstaluju, bude zapotřebí vše přenést do novější verze, zatím to ale hned tak neočekávejte

Změněné soubory proti originální distribuci:

  • index.php
  • config.php
  • plugins/
    • wkp_Blog.php (nový soubor)
    • wkp_Comments.php
    • Comments/template.html
    • wkp_Blog.php

wkp_Blog.php

To hlavní se odehrává v pluginu wkp_Blog.php. Je navázán na dvě události samotné wiki - uložení stránky a generování stránky - a během nich prování svoji činnost. Běžné wikistránky a blogové příspěvky od sebe odlišuje název souboru, v němž jsou uloženy, respektive URL a název stránky: pokud je název stránky ve formátu RRRRMMDD-HHMM_Nazev_stranky, pak se jedná o příspěvek na blogu. Vše ostatní je běžná wikistránka.

Když uložíte nový blogový příspěvek, stanou se tři věci:

  1. Na stránce specifikované v globální proměnné $START_PAGE je vytvořena titulní strana blogu obsahující posledních $BLOG_COUNT příspěvků. Jejich seznam je seřazen od nejnovějších (nahoře) po nejstarší (dole) a obsahuje titulek, datum publikace (převzato z názvu stránky, nikoliv ze skutečného data a času souboru), odkaz na příspěvek a podle hodnoty $BLOG_FULL buď perex nebo plný text příspěvku. Pod tímto seznamem je odkaz směřující do archivu všech příspěvků.
  2. Na stránce specifikované v $BLOG_ARCHIVE je vytvořen seznam všech dosud publikovaných příspěvků, který je řazen stejně jako titulní strana blogu a obsahuje stejné informace, jen není omezen počtem a vždy je v něm pouze perex článku.
  3. Je vytvořen soubor var/blog-rss.xml, v němž je posledních $BLOG_RSS příspěvků na blogu. I zde je vždy pouze perex, nikdy plné znění článku.

Při návštěvě stránky, respektive jejím renderování do HTML pro návštěvníka se generují jednoduché statistiky do adresáře var/stats:

  • V souboru RRRRMMDD-HHMM_Nazev_stranky.hits.txt se o jedna navyšuje celkové počítadlo návštěv stránky. Není zde žádné omezení na IP adresu či počet návštěv za den, jde skutečně pouze o celkový počet návštěv.
  • Do souboru RRRRMMDD-HHMM_Nazev_stranky.visits.txt se uloží datum a IP adresa návštěvníka. Každá IP adresa se ukládá pouze jednou za den, jde tedy o primitivní indikátor počtu unikátních přístupů ke stránce.

Statistiky se ukládají jak pro blogové příspěvky, tak pro ostatní wikistránky.

wkp_Comments.php a Comments/template.html

V pluginu wkp_Comments.php došlo k úprave CAPTCHA kódu. Původní slovníková metoda se mi nelíbila, místo toho jsem implementoval velmi primitivní číselnou. Prozatím mi funguje všude bez problémů, až fungovat přestane, bude nahrazena ověřováním proti některé online databázi spamových komentářů. Teplate pro komentáře byl upraven pro tuto novou CAPTCHA a zároveň jsem odstranil používání JavaScriptu, které jsem neshledával nezbytým.

Pro fungování blogu není třeba tyto dva upravené soubory používat, je funkční i s originálními komentáři.

index.php

V hlavním kódu LionWiki jsem se snažil příliš změn nedělat, nicméně ke třem drobným přeci jen došlo:

  • Pokud se někdo pokusí navštívit (a tedy i vytvořit) stránku s názvem microsoft-Dz, dostane HTTP chybu 404 a je následně přesměrován někam jinam, ve výchozí konfiguraci na wikipedii (ať se trochu vzdělá). V jisté době byla totiž přítomnost uvedeného řetězce v URL falešně vyhodnocována jako hacknutí stránky a webhostingoví provideři s tím měli problém. A jelikož na wiki principiálně každá stránka existuje (byť jako prázdná čekající na naplnění), musel jsem to řešit.
  • Změnil jsem způsob generování HTML kódu ze zápisu '''''TEXT''''', tj. textu, který má být formátován tučně i kurzívou zároveň. Původní implementace chytře využívala toho, že '''TEXT''' je zápis pro tučné písmo a ''TEXT'' pro kurzívu a dvojím průběhem tak dojde k aplikaci obojího, bohužel výsledkem byl nevalidní kód <strong><em>TEXT</strong></em>. Teď se to generuje najednou a je klid.
  • Přidal jsem novou syntaxi {code}CODE{/code}, která umožňuje zapisovat in-line kód pomocí HTML tagu <code>. Dosavadní blokový zápis pomocí dvou složených závorek se genereuje jako <pre> a to se ne vždy hodí.

config.php

Do výchozího souboru config.php bylo přidáno výchozí plnění nových globálních proměnných, nic víc

Nové globální proměnné:

  • $BLOG_ARCHIVE - název stránky, na niž se bude generovat archiv blogu
  • $BLOG_FULL - má $START_PAGE obsahovat celý příspěvek nebo jen perex?
  • $BLOG_COUNT - kolik příspěvků má být na $START_PAGE?
  • $BLOG_RSS - kolik příspěvků má být v blog-rss.xml?
  • $BLOG_MORE_TEXT - text odkazu na příspěvek (např. "Číst dále" nebo "...celý článek")
  • $BLOG_ARCHIVE_TEXT - Text před odkazem na archiv příspěvků vkládaný na konec $START_PAGE (např. "Starší články najdete ")
  • $BLOG_ARCHIVE_LINK - text samotného odkazu na archiv (i.e. "v archivu")

Poslední dvě proměnné spolu úzce souvisí, vygenerují se dohromady do LionWiki syntaxu jako '''Starší články najdete [v archivu|archiv].''' a vloží na konec $START_PAGE.

Závěrem

To je vše. Momentálně je plugin nasazen na třech webech. První z nich právě čtete, další dva jsou:

Na obou webech je využito i toho, že syntaxe LionWiki je mnohem jednodušší než HTML, takže například první blog je automaticky generován skriptem z obsahu Jirkova gopherového deníku, na webu druhém je v sekci World zase výstup z RSS agregátoru (a obsah až do letošního ledna byl vygenerován automaticky z bloggerové XML zálohy).

Nezbývá mi, než na závěr poděkovat Adamu Živnéřovi za tvorbu LionWiki samotné. Nevím, kolik lidí ji dnes používá, ale já u ní rozhodně zůstávám i nadále. Je to pěkný, funkční a k pochopení velmi jednoduchý software, na němž je radost něco stavět.

Komentáře: 1

[1] nula (01.04.2020, 19:42)
Dávám si do záložek...

Přidat komentář

Prosím dávejte vložené odkazy do hranatých závorek, např. [http://i-logout.cz]. Děkuji.

Jméno
E-mail
Váš komentář
Opište číslice z řetězce napravo *8*1*2*4*9*