Jak na české formátování čísel ve WordPressu

Rubrika: WordPress

WordPress je výborný publikační systém, a to nemám na mysli jen systém samotný, ale i češtinu, která je pro WordPress k dispozici. Bohužel zde máme jednu maličkost, která k dokonalosti chybí. A tou je formátování čísel, které i při použití češtiny odpovídá anglickým konvencím, tedy desetinná místa odděluje tečka a tisíce odděluje čárka. V češtině to ale má být jinak, desetinným oddělovačem má být čárka, kdežto oddělovačem tisíců má být mezera. (pro hnidopichy, moc dobře vím, že oddělovačem tisíců by neměla být normální, ale tenká mezera, to se ovšem na webu realizuje ještě hůře než normální mezera)

Ono se to snadno napíše, krásná teorie, pokud si ale myslíte, že jen tak vlezete do zdrojáků češtiny pro WordPress a položky si opravíte, okamžitě se vystavíte problému. Totiž webové stránky (stejně jako drtivá většina aplikací pracujících s textem) odstavce zalamují do jednotlivých řádků podle mezer. Což je v pořádku právě do té doby, než Vám mezery začnou oddělovat tisíce v číslech. Protože řádek uprostřed čísla zalomit nechcete. Číslo potřebujete držet pohromadě. Řešení se nazývá tvrdá mezera a tím se řítíme do největších hlubin trapné chyby, se kterou se musíme poprat. (doplnění informace o tenké mezeře z předchozího odstavce: tenká mezera reperezentovaná entitou   je totiž v HTML zlomitelná přes řádek, tak proto ji nemůžeme použít pro formátování čísel)

Ne, chyba se nenachází v češtině pro WordPress. Nenachází se ani ve WordPressu samotném. Je skryta ještě níže, přímo v samotném PHP. Totiž, WordPress naprosto správně pro formátování čísel používá nativní funkci PHP, která se jmenuje number_format(). Potíž je v tom, že tato funkce neumí pracovat s tvrdými mezerami, a to ani s řetězcem   ani s pevnou mezerou zapsanou jako ASCII znak o hodnotě 160. Pokud ji předhodíte, že má použít pro oddělení tisíců tvrdou mezeru, ve výsledku místo ní dostanete čtvereček. To je naprosto nepoužitelné.

A naprosto trapné na celé situaci je, že problém s touto funkcí je reportovaný do PHP již mnoho let (viz velmi dlouhý log u popisu této funkce), netrápí jenom Čechy, ale i mnohé početnější národy používající stejné formátování, jmenujem třeba Francii nebo Rusko. A nikdo s tím nic nedělá.

Rozhodl jsem se, že se se situací nesmířím. Na svém webu chci mít čísla naformátovaná správně česky. Asi bych uměl najít zmíněnou funkci ve zdrojácích PHP a zkompilovat si vlastní modifikaci, bohužel PHP u svého web-hostera nevyměním, takže situaci musím vyřešit o úroveň výše, ve WordPressu. Nejedná se však o situaci, kterou by šlo vyřešit plug-inem, ale musel jsem sáhnout napřímo do střev samotného WordPressu. To ve výsledku znamená, že s každým upgradem WordPressu, byť tím nejmenším, to musím udělat znova.

Vlevo u seznamu souborů ke stažení vidíte, že to vše funguje správně. Velikost souborů má desetinnou část oddělenou čárkou a u počtu stažení je vždy oddělovačem tisíců nedělitelná mezera, takže se nestane, že by se číslo rozdělilo na více řádků. Tak to má být.

Pokud chcete, aby i na Vašem webu byla čísla správně česky naformátována, můžete si stáhnout následující archiv. V něm najdete tři soubory, které nahrajte (do příslušných adresářů) Vaší instalace WordPressu přes ty původní. Pozor: soubory v tomto archivu jsou v této chvíli pro WordPress verze 2.9.2 a pokud máte jinou verzi WordPressu, tak to nedělejte, WordPress by mohl přestat fungovat. Modifikace je určena jen pro verzi 2.9.2, pro žádnou jinou.

Dobrá zpráva na závěr: tento problém jsem již před časem nahlásil vývojovému týmu WordPressu a lze předpokládat, že nějakým způsobem se s ní popasují a v budoucnu bude možné, aby oficiální čeština měla korektní formátování čísel tak, jak má být. Zatím se řeší, jakým způsobem toto zařídit, jestli tak, jak jsem to udělal já, nebo nějakým filtrem, ale to je méně podstatné; nyní je milestone nastavený na verzi 3.0, tzn. vývojový tým by to chtěl mít v této verzi již vyřešené (ale na druhé straně si můžete v logu všimnout, že už se oprava plánovala pro verzi 2.9 a pak se to zrušilo). Tak držme palce, že řešení popsané a nabídnuté ke stažení v tomto článku je pouze dočasným workaroundem.

Plugin TopList.cz umí odfiltrovat administrátory webu

Rubrika: WordPress

Před časem jsem vyrobil plugin TopList.cz pro systém WordPress, díky němuž lze snadno integrovat tuto populární českou statistickou službu do blogu založeného právě na známém blogovacím systému. Když ale člověk obecně zařadí takovou službu na své stránky, zjistí nemilou záležitost: do statistik se mu začnou započítávat i jeho vlastní návštěvy: když publikujete článeček a chcete se podívat na náhled, jak bude vypadat, šup, a už je tam započítaný hit. Ale to není dobré, mě vůbec nezajímá, jak na své stránky chodím já. Chci vědět, jak na ně chodí jiní.

TopList.cz neumí žádné filtrování na straně statistického serveru (např. na základě IP adresy), to ale nevadí, protože stejně je nejlepší zajistit filtrování na straně publikačního systému. Zjednodušeně tak, že pokud je přihlášen uživatel s dostatenčnými oprávněními, tak se prostě kód pro statistickou službu vůbec negeneruje. A přesně toto jsem pro svůj plugin TopList.cz doprogramoval, což znamená, že na světě je nová verze pluginu, a to s číslem 3.1.

Volba se nazývá Protokolování administrátorů a zcela záměrně je ve výchozím stavu povolena, to znamená že i návštěvy administrátorů jsou stále započítávány do statistiky TopListu — takto je nastavení shodné v rámci zpětné kompatibility (např. aktualizací pluginu ze starší verze se nezmění jeho chování). Protokolování ale můžete zakázat a potom každý uživatel s úrovní vyšší, než je specifikovaná, bude odfiltrován: pokud je k webu přihlášen, pak se kód pro statistickou službu negeneruje a tudíž jeho pohyb po webových stránkách není do statistiky započítán. Pokud byste chtěli vědět, jakou úroveň má který typ uživatele, podrobný popis najdete na webových stránkách WordPressu (anglicky).

Administrace pluginu TopList.cz včetně filtrace administrátorů
Administrace pluginu TopList.cz včetně filtrace administrátorů

To, že se negeneruje statistický kód ovšem znamená také to, že pokud jste si na své stránky umístili viditelnou ikonu TopListu, pak ta se vůbec nezobrazí. Bohužel to tak je, TopList neumožňuje zobrazit ikonu aniž by byla započítána statistická data. Takže na to upozorňuji, pokud volbu Protokolování administrátorů zakážete, pak se adminům nebude ikona zobrazovat. Všem ostatním se zobrazovat bude — jak anonymním návštěvníkům Vašeho webu, tak registrovaným uživatelů, kteří mají úroveň nižší než určenou.

Aktualizace pluginu se Vám sama nabídne v administraci WordPressu, tedy pochopitelně pokud používáte WordPress ve verzi alespoň 2.8, jelikož plugin již ve starších verzích tohoto publikačního systému nefunguje. Případně si jej můžete stáhnout přes prolink z mých stránek.

Plug-in TopList.cz aktualizován pro WordPress 2.8

Rubrika: WordPress

Nová verze publikačního systému WordPress 2.8 přinesla úplně nový přístup k tzv. widgetům, tedy malým aplikacím pro blogy, které se typicky umisťují do postranních panelů. Systém je sice zpětně kompatibilní s předchozími verzemi (takže předchozí verze widgetů nadále fungují), nový návrh je ale čistší, objektově orientovaný atd.

Takže jsem samozřejmě svůj plug-in TopList.cz pro integraci této populární české (a slovenské) statistiky přeprogramoval pro novou verzi WordPressu. Na první pohled si asi žádné změny nevšimnete (možná akorát, že v konfiguraci widgetů se u TopList.cz začalo zobrazovat i Vaše ID pro tento statistický server), ale vniřnosti jsou úplně nové.

Nová verze plug-inu se Vám nabídne automaticky k aktualizaci, tedy pokud používáte nový WordPress 2.8. Jestliže naopak setrváváte u starší verze WordPressu, pak zůstanete i u starší verze mého plug-inu, tuto novou verzi Vám publikační systém zatají, dokud neprovedete upgrade celého WordPressu.

TopList.cz

Můj plug-in TopList.cz za tři měsíce překonal 303 stažení, čímž přestal být poslední mezi nabízenými soubory (tuto neslavnou pozici zaujaly propozice pro Mordheimový turnaj z května roku 2003, což chápu, že takový soubor se už asi moc nestahuje). Uvidíme, jak bude dál stoupat pořadím. Akorát furt nerozumím té popularitě mého jiného downloadu, počasí pro Google Desktop, okolo 7 000 stažení každý měsíc, nějak se mi nechce věřit, že by to fakt bylo tak populární, ovšem jak počítadlo stažení tak statistika webu u mého providera takové číslo reportuje, tak asi jo…

Využijte slevu 20% na UltraEdit

Rubrika: Počítače

UltraEditUltraEdit je bez diskuzí nejlepší programátorský editor k dispozici. Sice není zdarma, ale tak to na světě chodí, za kvalitu se platí. Ovšem v těchto dnech máte příležitost ušetřit. Společnost IDM, která UltraEdit vyvíjí, právě slaví 15 let své existence. A jako její dlouholetý zákazník jsem dostal mail, že v rámci této události nabízejí slevu 20%, pokud bych kupoval jakýkoliv jejich produkt. To znamená při koupi UltraEditu úsporu příjemných $10. Tak dobrou zprávu si nenechám jen pro sebe. Pokud se Vám UltraEdit líbí, nebo jakýkoliv jiný produkt od IDM, máte příležitost. Slevu je možné uplatnit na úplně všechny nákupy, včetně bundlů (zvýhodněné balíčky více produktů dohromady), takže např. zatímco standardně stojí samotné UEStudio $130, v této chvíli si díky slevě můžete koupit balíček UEStudio+UltraCompare za pouhých $120. Ale neváhejte, sleva platí jen do 15. června.

Tedy pro využití jděte na stránky http://www.ultraedit.com, vložte do nákupního košíku položky, které chcete koupit, a zadejte slevový kód IDM20. Platbu je možné provést standardními platebními kartami.

A pokud jste ještě UltraEdit nevyzkoušeli, rozhodně to udělejte, stojí za to.

Podporujeme i bratov Slovákov

Rubrika: WordPress

Na základě připomínek v komentářích jsem vytvořil novou verzi pluginu TopList.cz (i když teď už to asi není .cz, viz dále) pro blogovací systém WordPress, která obsahuje dvě nové funkce:

  • Je možné zvolit server, výchozí je toplist.cz, ale je také možné použít toplist.sk, takže bratři Slováci již také mohou vesele toplistovat skrze tento plug-in.
  • Je k dispozici volba, jestli má ikona s odkazem vést na domovskou stránku toplistu, a nebo na detailní statistiky o příslušném blogu, který ikonu zobrazuje.

Mimo to jsem v readme souboru připojil návod, jak zajistit centrování ikony v sidebaru, totiž:

  • Plugin zajistí zobrazení ikony TopListu, ale (záměrně) nezajistí jeho formátování (zarovnání vlevo/vpravo, případně vycentrování).  Pokud chcete mít obrázek v sidebaru vycentrovaný, přidejte do své šablony vzhledu – do souboru CSS s kaskádovým stylem:
    .widget_toplist_cz {text-align:center}

Tak, to je vše. Pokud máte plug-in již nainstalován (v předchozí verzi), tak se Vám automaticky nabídne jeho aktualizace v administraci Vašeho webu, jedním klikem upgradujete na novou verzi. Pokud ještě plug-in nemáte, samozřejmě si ho můžete stáhnout a instalovat podle postupu uvedeného v minulém článku.

Rozšířená konfigurace widgetu TopList
Rozšířená konfigurace widgetu TopList

Integrace TopList.cz do WordPressu

Rubrika: WordPress

Člověk rád sleduje statistiky, jak mu chodí na stránky uživatelé. Jedním z nejoblíbenějších služeb pro tento monitoring u nás je server toplist.cz. Nejedná se sice o super detailní službu poskytující milión dvě stě tisíc parametrů, jen pár základních, ale je to zdarma, a to je samozřejmě příjemná cena. Také jsem se rozhodl začít měřit statistiky pomocí této služby.

Standardně jdete na server TopList a tam si vygenerujete ID pro Váš web a pak také webový kód, který si zařadíte na stránku. Zde se ovšem setkáváme se třemi potenciálními problémy:

  1. Zařadit kód na stránku umí jen pokročilý uživatel. Ale třeba své stránky na WordPressu provozuje i obyčejný člověk, který umí výborně psát články, ale HTML nebo dokonce PHP je pro něj španělská vesnice. Když vygenerovaný kód vloží do článku, tak to nefunguje. A absolutně nemá šajnu o tom, kam jinam kód zařadit. Ale statistiku používat chce. Viz třeba zde.
  2. I když se v HTML vyznám, nabízí se u publikačních systémů (nejen u WordPressu) otázka, kam ten kód zařadit. Nejčastěji se ten kód připojí do šablony vzhledu. Jenže to znamená, že když chceme změnit šablonu, tak si buď vzpomeneme a kód zařadíme i do nové šablony (to je ale práce navíc), a nebo na to zapomeneme, a o monitorování přijdeme.
  3. Nejchytřejší uživatelé si nakopírují kód pro WordPress do widgetu Text, nicméně… Kód pro monitorování má určitou konfiguraci – např. vzhled ikony, která se Vám na webu zobrazuje, ale také které parametry chcete sledovat. Když se po čase rozhodnete tuto konfiguraci změnit, musíte opět jít na server toplist.cz, vygenerovat nový kód, najít ten starý na svém webu, zaměnit. Nebylo by lepší, kdybyste si mohli konfiguraci jen naklikat a žádný kód neřešit?

Jak z toho ven? Jednoduše! Naprogramoval jsem Plugin (zásuvný modul) pro WordPress. Nainstalujete si jej do svého WordPressu, v konfiguraci vyplníte ID pro TopList a hotovo! Nemusíte umět HTML, nemusíte přemýšlet, kam kód zařadit, nemusíte se bát, že se změnou šablony o monitorování přijdete. A konfiguraci provádíte přímo ve WordPressu, pouze nastavíte, co jak chcete, a je to.

Konfigurace TopList.cz pro WordPress
Konfigurace TopList.cz pro WordPress

(Pokračování textu…)