K týmu nového Zdrojáku jsem se připojil zhruba po dvou měsících jeho existence. V té době zrovna usilovně pracovali na šabloně nového Zdrojáku a řešili import dat z původního systému.
Hlavním vývojářem byl tehdy Tomáš Kapler (tímto ho zdravím). Tomáš náš tým bohužel opustil nedlouho po mém příchodu. Zdroják mi spadl takříkajíc do klína a na několik měsíců se stal mým denním chlebem (místo mé původní práce).
S odstupem času jsem se rozhodl podělit o několik postřehů a poodhalit zdrojáky Zdrojáku.
Nejvíce jsme si samozřejmě užili hned na začátku, při importu původních dat. Na starém Zdrojáku vyšlo na 2800 zpráviček a zhruba 1000 článků. Do těchto článků bylo vloženo přibližně 600 souborů - většinou se jednalo o obrázky nebo zip soubory.
Na první pohled nebyla databáze nijak objemná. Zdálo se, že za týden nebudeme mít co řešit. Postupem času se ukázalo, že původní redakční systém (RS) procházel celou řadou nedokumentovaných změna. Tak například:
- řada vložených souborů nebyla v databázi vůbec dohledatelná
- některé soubory už neexistovali vůbec
- původní RS dovoloval duplicitní emaily uživatele
- formátování článků se v průběhu let pochopitelně měnilo
- uživatele měli několik druhů avatarů na různých místech
- některé perexové obrázky si Zdroják "půjčil" z jiného serveru
Importní skript byl napsán v PHP - jako 26 samostatně spustitelných souborů. Data jsme nakonec importovali zhruba měsíc.
Původní redakční systém byl postaven tak, aby hravě zvládal některé funkce, které jsou běžnému Wordpress cizí. Wordpress například neumí do procesu schvalování článku začlenit roli korektora článků. Rovněž nedokáže k jednomu článku přidat více spoluautorů. Tyhle osvědčené funkce jsme se ale rozhodli zachovat i za cenu větších úpravy systému.
Nakonec se vše obešlo bez jediného zásahu do jádra Wordpress a vzniklo něco, čemu říkáme redakční flow. Automatizovaný postup, při kterém autor článku uloží své dílo jako draft do systému. Jeho článek je pak buď vrácen k přepracování, nebo je schválen odeslán ke korekci a naplánován k publikování.
Z celého relativně komplikovaného kódu jsem se rozhodl vybrat několik zajímavých částí. Začnu změnou stavu článku:
add_action('transition_post_status', 'transitionPostStatus', 10, 3);
/**
* draft -> pending => clánek ke kontrole
* ? -> draft => vraceno zpet
* ? -> publish => publikovano hned
* ? -> future => bude publikovano v budoucnu
*/
function transitionPostStatus($new_status, $old_status, $post) {
// ošetří revizi článku
$post = (wp_is_post_revision($post->ID)) ? get_post($post->post_parent) : $post;
// ignoruj autosave
if (wp_is_post_autosave($post->ID)) return;
// autor zmeni stav z draft -> pending (ke schválení)
if ( $old_status === 'draft' && $new_status === 'pending' && $post->post_author == get_current_user_id()) {
// informuj šéfredaktora a všechny redaktory systému o novém článku
}
// add...
}
Některé věci jsme museli zakázat. Příkladem budiž znemožnění úprava článku, který byl poslán ke scvhálení:
add_action('pre_post_update', 'prePostUpdate');
function prePostUpdate($post_id) {
global $post;
if ($post->post_author == get_current_user_id() && ($post->post_status === 'pending' || $post->post_status === 'future')) {
wp_die('Nemůžete upravovat článek, který čeká na schválení')
}
// atd...
}
Občas bylo potřeba sáhnout trochu hlouběji. Do míst, kde se běžným způsobem nedostanete. Konkrétně se jednalo o změnu vzhledu divu pro odeslání nebo uložení článku. Potřebovali jsme zde přidat checkbox, signalizující zda článek prošel korekcí nebo ne:
$wp_meta_boxes[$current_screen->id]['side']['core']['submitdiv']['callback'] = 'modifySubmitDiv';
function modifySubmitDiv($post) {
if (current_user_can('edit_others_posts')) {
$nonce = wp_nonce_field(plugin_basename(__FILE__), 'nonce', false, false);
$korekce = PostMetaKorekce::getValue($post);
require_once 'checkboxKorekce.phtml'; // zobrazí formulář
return post_submit_meta_box($post);
}
}
Výsledek vypadá takto:
![Článek prošel korekcí](https://gist.github.com/OzzyCzech/43d9b5514a838ca81268/raw/6f18d53b06055a3a426e85c3c1d4435e4b1afb13/korekce.png Korekce "Článek prošel korekcí")
Zdroják pomáhá udržovat v chodu celkem 17 pluginů. Všechny pluginy jsme vybírali velmi pečlivě. Nebáli jsme se jich vyzkoušet několik s podobnou funkcionalitou. Cílem vždy bylo najít minimalistické řešení - tedy plugin, který neumí nic navíc.
- 404 Error logger - nám loguje nenalezené stránky
- Cipher - pomáhá vkládat zdrojové kódy do článku
- Co-Authors Plus - za nás řeší správu více autorů
- Members - řeší správu rolí v systému
- Simple 301 Redirects - přesměrovává ze starých URL na nové
- WordPress SEO - generuje sitemapy, přidává metadat pro sociální sítě, řeší formáty description atd.
Pro několik pluginů jsem sáhl do vlastních zdrojů:
- omSocialButtons - plugin pro automatické vkládání sociálních tlačítek do článků a stránek
- omPreformat - pomáhá vkládat správně naformátovaný zdrojový kód
- omRememberMe - abychom si pamatovali přihlášené uživatele
A některé jsme museli napsat:
- omSlimBox - pro zobrazování obrázků v Lightboxu
- omSocialLogin - na přihlášení uživatel prostřednictvím sociálních sítí
Wordpress nikdy nepatřil k nejrychlejším redakčním systémům. Protože své čtenáře nechceme trápit, byla rychlost webu jednou z hlavních priorit:
- Ukládání všech interních objektů dostal na starost mírně upravený memcached plugin.
- Všechny náročnější procesy, jako např. aktualizaci počtu sdílení článků, jsme přesunuli do cronu.
- Tam kde to dávalo smysl, ukládáme výsledky do cache.
- Nepoužívali jsme zbytečně pluginy, tam kde to šlo vyřešit jinak.
- Minimalizovali jsme množství requestů.
- Oddělili jsme komentáře od článku.
U každého projektu člověk postupem času dospěje do bodu prozření. Zjistí, že některé věci měl udělat jinak a jiné naopak nedělat vůbec.
Osobně považuji za největší chybu to, že jsme začali stavět vlastní šablonu nad defaultní šablonou Twenty Twelve. Tento postup nám ze startu uspořilo nějaký čas, ale v současnosti je tomu právě naopak. Komplikuje správu naší šablony a zejména vnáší neuvěřitelnou nepřehlednost do CSS.
Pravděpodobně bych znovu nepoužil plugin Co-Authors Plus. Tento plugin nás totiž mnohokrát vypekl. Navíc různé aktualizace a opravy jeden čas vycházeli až příliš často. Ale nakonec jsme se spolu sžili.
Měli jsem začít stavět design tak, aby byl responzivní hned od začátku. Pozdější úpravy často znamenali spoustu práce navíc.
Použili bych znovu Wordpress? Jednoznačně ano! Je to výborný systém. Dají se na něm postavit zajímavé a kvalitní weby. Je prověřen neuvěřitelným množství lidí a ve finále je vlastně jedno na čem svůj web postavíte.
Od znovu spuštění Zdrojáku uběhlo půl roku. Samozřejmě máme v plánu Zdroják nadále vylepšovat. Chystáme například tolik žádané preview komentářů. Musíme ještě zapracovat na vylepšení vyhledávání. Budeme dál upravovat a ladit vzhled webu.
Na závěr jsem si pro vás připravil statistiky našeho git repozitáře a hezké video:
http://www.youtube.com/watch?v=e0DKfVLgmO8
Pro generování statistik jsem použil nástroj git_stats s malou úpravou. Video jsem vytvořil pomocí vizualizačního nástroje Gource.