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>