Setings page pre šablónu

Zvolené téma obsahuje celkem 7 odpovědí. Do diskuze (3 účastníci) se naposledy zapojil uživatel  Lukenzi a poslední změna je stará 11 let, 6 měsíců.

Aktuálně je na stránce zobrazeno 8 příspěvků - 1. až 8. (z celkem 8)
  • Autor
    Příspěvky
  • #1113

    fautor
    Participant

    Prosím Vás, mohli by ste tu dať nejaký návod pre vytvorenie úplne jednoduchej setings page pre šablónu?

    Iba s tým aby bola pridaná do hlavného menu a kľudne i prázdna, obsah si už naplním, resp s nejakých jednoduchým formulárom.

    Skúšal som to už asi podľa 10 návodov zo zahraničných stránok, no nikdy mi to nešlo, vždy mi vyhodilo nejakú chybu a pod.

    Buď tie návody neboli robené pre aktuálnu verziu WP, alebo som už z toho debil ja.

    Ďakujem

    #8982

    fautor
    Participant

    Problém som vyriešil, som si zle prečítal jednu časť návodu.
    Len prosím vás, ako by som mohol urobiť vyhodenie hlášky po uložení nastavení, niečo v zmysle “Nastavenia boli uložené”?
    Lebo teraz len sa reloadne stránka. Nastavenia sú nové, ale aby to i používateľ vedel.
    Ďakujem

    Formulár a ukladanie mám urobené takto:

    <form method="post" action="options.php">
    <?php settings_fields( 'jedalnicek' ); ?>
    OBSAH FORMULÁRU
    <p class="submit">
    <input type="submit" class="button-primary" value="<?php _e('Uložiť zmeny') ?>" />
    </p>
    </form>
    #8983

    fautor
    Participant

    Opravené, zabudol zaregistrovať premenné.

    #8984

    fautor
    Participant

    Tak predsa len budem potrebovať vašu pomoc.

    Ešte stále mi nefunguje tá hláška o uložení a taktiež by som sa chcel spýtať, či je možné nejako nastaviť, aby nastavenia šablóny mohol upravovať i niekto s nižšou rolou ako administrátor (editor).

    Ďakujem

    #8985

    roboti006
    Participant

    Možná je to blbost, ale co tak do souboru options.php zadat podmínku jestli se nastavení uložila, a když jo, tak uložit něco do sessions (nebo get do adresy, nevím) a k formuláři zadat další podmínku která by kontrolovala přítomnost těchto věcí, a na základě toho zobrazila hlášku?

    Jsem začátečník, a ještě jsem ani neuvažoval o vlastní settings stránce. :)

    #8986

    Lukenzi
    Participant

    Tyhle věci se ale většinou rozmýšlejí ještě před programováním, opravdu netuším jak máte řešeno samotné ukládání dat nebo jejich kontrolu. Ale asi nejjednodušší způsob je tento:

    Do formuláře bych doplnil

    <input type="hidden" name="odeslano" value="ok" />

    Do místa kde se má vypisovat hláška bych vložil i samotné ověřování vstupních dat i ukládání

    <?php
    if(isset($_POST)){
    // funkce CheckData() zkontroluje vyplnění a správnost dat
    // pokud je vše vpořádku vrátí true pokud vrátí false
    
        if(CheckData()){
        // funkce SaveData() uloží data, v případě úspěchu vrátí true nebo v případě neúspěchu vrátí false a podle toho se zobrazí hláška
    
            if(SaveData()){
    echo '<div class="update fade">Nastavení bylo uloženo</div>';
    }else{
    echo '<div class="error fade">Nastavení se nepodařilo uložit!</div>';
    }
    }else{
    echo '<div class="error fade">Nebyla vyplněná všechna povinná pole</div>';
    }
    }
    ?>

    Mimochodem, každý formulář v administraci by měl být zabezpečen proti CSRF a ten váš není (i když tady to není nic kritického).
    Takže do formuláře ještě patří (viz wp_nonce_field)

    <?php wp_nonce_field('akce','nazev'); ?>

    a ve funkcích CheckData() a SaveData() by měla být kontrola

    if(wp_verify_nonce('akce','nazev')){ ... }else{ wp_die('nepovolený přístup'); }

    #8987

    fautor
    Participant

    Fuu, toto je už vyšší level, ktorému nerozumiem moc. O zabezpečení som ani nevedel, že treba riešiť. Len to celokm nechápem. Formulár mám takto:

    <h2>Jedálniček</h2>
    <hr>
    <form method="post" action="options.php">
    <?php settings_fields( 'jedalnicek' ); ?>
    <h3>Pondelok</h3>
    Dátum: <input type="text" name="datum1" value="<?php echo get_option('datum1'); ?>" />
    Desiata: <input type="text" name="desiata1" value="<?php echo get_option('desiata1'); ?>" />
    Obed: <input type="text" name="obed1" value="<?php echo get_option('obed1'); ?>" />
    Olovrant: <input type="text" name="olovrant1" value="<?php echo get_option('olovrant1'); ?>" />
    
    OSTATNE DNI ROVNAKYM STYLOM
    <p class="submit">
    <input type="submit" class="button-primary" value="<?php _e('Uložiť zmeny') ?>" />
    </p>
    </form>
    #8988

    Lukenzi
    Participant

    Váš kód pouze zobrazí formulář s předvyplněnými daty načtené z databáze nic víc, mimoto data pošle do souboru options.php což je nám k ničemu. Data musí být poslána do vytvořené stránky vaší šablony (kde bude další kód který data zpracuje, ve vašem případě by stačilo poslat je do stejné stránky kterou zobrazujete formulář).

    tedy místo

    <form method="post" action="options.php">

    by mělo být (za předpokladu, že vaše vytvořená stránka s nastavením má id “nastaveni-sablony”

    <form method="post" action="theme.php?page=nastaveni-sablony">

    Dále by na této stránce mělo být ověření jestli se už formulář odeslal nebo ne. Pokud ano, data z formuláře se musí nejdříve ošetřit zda neobsahují něco co nechceme a nakonec uložit do databáze funkcí update_option. A táto funkce nám právě řekne zda se uložení povedlo nebo ne (vrátí hodnotu “false” pokud dojde k chybě). Jestliže se uložení z nějakého důvodu nepovede pak by jsme měli zobrazit chybovou hlášku.

    Jen tak mezi námi…tato funkce se většinou povede vždy, protože i když neexistuje klíč jehož hodnotu chceme uložit, funkce nám jej automaticky vytvoří pomocí funkce add_option a hodnotu do něj vloží. Nenapadá mně situace kdy by to jít nemělo, ale co kdyby…

    Celé řešení možná vypadá složitě, ale nic na tom není je to jen prostě trocha programování.

    Co se týče bezpečnosti, tak ta je vždy na prvním místě a je důležitější než samotná funkčnost a většina lidí tohle podceňuje. Váše funkce nic extra nedělá takže tady by jsme se neměli čeho bát, ale už jsem se setkal s “úpravami” které si sahali do databáze aniž by byli nějak ošetřené například proti SQL injection a pro potencionálního útočníka by pak nebyl vůbec žádný problém například smazat celou databázi. Ochrana proti CSRF je taky velice důležitá, pokud by proti tomuto útoku nebyla zabezpečena administrace můžete si (za určitých podmínek) například pouze navštívením jiné internetové stránky smazat svůj administrátorský účet.

    Pokud na to nespěcháte, můžete mi vaší šablonu s infem poslat na mejl lukenzi@gmail.com a já se na to v průběhu večera podívám.

Aktuálně je na stránce zobrazeno 8 příspěvků - 1. až 8. (z celkem 8)

Pokud chcete odpovědět na toto téma, musíte se nejdříve přihlásit.

WordPress – novinky, návody a zajímavosti