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>
Super tip, díky.
Akorát máš chybu v názvu funkce (dives_frontend_add místo myplugin-nette-form) a ve funkci createNetteForm chybí několik obrácených lomítek v cestě ke třídám Nette.
Diky za upozornění, jméno funkce jsem opravil. Obrácená lomítka nechávám na pozornosti implementujícího programátora (a verzi použitého PHP;).
Jasně. Názvy tříd se v Nette občas měnily 🙂