Kalendarove exporty

Uz delsi dobu me stve, ze mi Facebook dava do kalendaroveho exportu i eventy, na ktere me nekdo jen pozve, ale ja neodkliknu, ze na ne pujdu. Nasynchronizuje se mi to pak do mobilu a otravuje to.

Zkusil jsem se teda dneska na Facebooku najit, jestli to jde nekde nastavit. Na strance eventu v nastaveni (ozubene kolecko vpravo nahore) jsem zaskrtnul “Hide Suggested Events” a pro jistotu i “Hide Declined Events”.

Po odebrani kalendare z Google calendar a opetovnem pridani, jsem ovsem eventy, na ktere nejdu, videl porad! V exportu od Facebooku uz ale nebyly. Google asi silne cachuje, takze jsem za URL exportu pridal vymysleny parametr “&t=2”, coz uz Google povazoval za novy kalendar.

Podobny problem jsem resil s Doodle, kde se mi zobrazovaly vsechny navrzene casy eventu. Stacilo odebrat starou metodu exportu pres ics soubor a nastavit propojeni pres Google API.

WordPress plugin s Nette formularem

WordPress je skvely nastroj, pokud potrebuji udelat rychle web s publikaci clanku a nekolika strankami, ktere se meni jednou za cas. Opruz obvykle nastava ve chvili, kdy je potreba udelat neco na miru. Existuje spoustu pluginu, ale ne vzdy najdu vyhovujici.

Pri programovani v Nette jsem si zvyknul na jednoduchost formularu a jejich pohodlnou validaci. Rozhodl jsem se je tedy pouzit i ve WordPressu.

Zkusim jednoduse popsat, jak vytvorit formular pomoci Nette na pluginu, ktery bude zobrazen na frontendu. Predpokladam zakladni znalost tvorby WordPress pluginu.

Napr. do adresare _libs/ si dame minified verzi Nette. Potom v php souboru s pluginem pripravim funkci, ktera bude vytvaret formular:

function createNetteForm() {
    include_once $_SERVER['DOCUMENT_ROOT'] . '/_libs/nette.min.php';

    $form = new NetteFormsForm;
    $form->addText('title', 'Jméno')
        ->setRequired('Zadejte prosím jméno');
    $form->addText('email', 'E-mail:')
        ->addRule(NetteApplicationUIForm::FILLED, 'Zadejte prosím email')
        ->addRule(NetteApplicationUIForm::EMAIL, 'email nemá správný formát');
    $form->addTextArea('pozn', 'Poznámka');
    $form->addSubmit('send', 'Odeslat');
    
    return $form;
}

Dale vytvorime funkci pro zobrazeni:

add_shortcode('nette-form', 'myplugin_nette_form');
function myplugin_nette_form() {
    return createNetteForm();
}

Ve wordpress strance, kde chceme mit formular, potom vlozime pouzity shortcode: [nette-form]

A nakonec funkce na zpracovani odeslanych dat:

function nette_form_post() {
    $form = createNetteForm();
    
    if ($form->isSuccess()) {
        $data = $form->getValues();
        
        // ulozit data atd. 

        wp_redirect('/');
        exit;
    }
}
add_action('init','nette_form_post');

Tato funkce je diky akci typu init volana pri kazdem nacteni stranky s pluginem, takze je dulezite vzdy kontrolovat, jestli formular byl odeslan a az potom delat nejake ukladani dat.
Po ulozeni je dobre uzivatele nekam presmerovat, aby nemohl reloadnout stranku a odeslat tak data znovu.

Sikovne je take pridat Nette javascript pro validace, treba do pouzivane template:

<script type="text/javascript" src="<?php bloginfo('template_url'); ?>/js/netteForms.js"></script>

Překlad wordpress pluginu

Pokud narazíte na WP plugin, který chcete svým uživatelům dopřát v rodném jazyce, můžete ho přeložit.

O tom, jak se to dělá, se samozřejmě dočtete na WordPress Codexu zde. To se vám bude hodit, pokud fráze v kódu nejsou obalené překladovou funkcí.

Další problém může být, když původní autor zapomene některou z frází zahrnout do pot souboru, ze kterého vyrábíte překlad. Pak se hodí příkaz
xgettext —keyword=__ —keyword=_e plugin.php
který vyhledá všechny fráze k překladu.

Narazil jsem na to, že se mi utilitku xgettext nedařilo na Max OS X najít (resp. pořád mi terminal nabízel xgettext.pl, ale ten neuměl přepínač —keywords). Je totiž součástí gettext. Pokud jste si ho nainstalovali pomocí homebrew hledejte v /usr/local/Cellar/gettext/<VERZE>/bin/./xgettext