v Blog, Web development

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>
Líbilo se? Tak to sdílej, dík:)Share on facebook
Facebook
Share on twitter
Twitter
Share on email
Email

Komentáře

Komentář

This site uses Akismet to reduce spam. Learn how your comment data is processed.

  1. 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.