NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze – Lekce 8 - Jednoduchý redakční systém v Nette - Dokončení administrace

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
Jindřich Máca
Tvůrce
Avatar
Odpovídá na pepapavlik
Jindřich Máca:21.7.2015 20:29

Ahoj,

to je způsobené tím, že v článku http://www.itnetwork.cz/…administrace je vypsané pouze rozšíření třídy ArticlePresenter tj. pouze přidané metody. Není tam tedy vidět kýžený začátek souboru, kde je samozřejmě třeba doplnit nově použité třídy. V přiloženém archivu už jsou ale pak uvedeny. :)

Uznávám, že je to matoucí a neúplné, takže to ve zmíněném článku napravím. ;)

 
Odpovědět
21.7.2015 20:29
Avatar
Supercaptain
Člen
Avatar
Supercaptain:22.8.2015 14:56

ahoj, setkal se nekdo u kontaktniho formulare s touto chybou?

Method Nette\Utils\Html::__toS­tring() must not throw an exception

Nevite cim by to mohlo byt? Kdyz necham jenom addText s emailem tak to funguje pokud pridam addTextArea zacne to blbnout.

 
Odpovědět
22.8.2015 14:56
Avatar
Jindřich Máca
Tvůrce
Avatar
Odpovídá na Supercaptain
Jindřich Máca:6.9.2015 15:46

Ahoj, to bude pravděpodobně tím, že u addTextArea() potom nemůžeš volat setType('email'), protože TextArea žádný takový typ nemá. :-D Zkoušel jsi to i bez toho? :-)

 
Odpovědět
6.9.2015 15:46
Avatar
Supercaptain
Člen
Avatar
Odpovídá na Jindřich Máca
Supercaptain:6.9.2015 18:25

Kod jsem mel "zkopirovany z tutorialu z této stranky".

Opravdu jsem u addTextArea nepřidaval type email :-). Co jsem tim myslel ukazu na nasledujícím kodu....

Měl jsem nasledujici kod

$form = new Form;
                $form->addText('email', 'Vaše emailová adresa')->setType('email')->setRequired();
                $form->addText('y', 'Zadejte aktuální rok')->setRequired()
                        ->addRule(Form::EQUAL, 'Chybně vyplněný antispam.', date("Y"));

A prave kdyz jsem tohle pridal zacalo to blbnout.

$form->addTextArea('message', 'Zpráva')->setRequired()
                   ->addRule(Form::MIN_LENGTH, 'Zpráva musí být minimálně %d znaků dlouhá.', 10);

Nevim proc tomu tak je. Stahnul jsem si ten presenter ze zdrojaku a jede to v pořadku.

 
Odpovědět
6.9.2015 18:25
Avatar
Jindřich Máca
Tvůrce
Avatar
Odpovídá na Supercaptain
Jindřich Máca:6.9.2015 19:40

Aha, tak to jsem špatně pochopil. :-D Každopádně nevím, proč Ti to takhle blbne. Začal bych asi promazáním cache a případně potom zkusil od té výjimky dohledat její příčinu. Ovšem občas jsou ty výjimky nic neříkající... :-/

Editováno 6.9.2015 19:42
 
Odpovědět
6.9.2015 19:40
Avatar
Milan Gallas
Tvůrce
Avatar
Milan Gallas:5.10.2015 18:14

Ten řádek v routeFactory mě fakt potrápil

$router[] = new Route('[<action>/][<url>]', array(

Měl sem tam napsané

$router[] = new Route('[<action/>][<url>]', array(

a chybu jsem hledal asi hodinu :D :D
Ale spoň vím na co si dát příště pozor.

 
Odpovědět
5.10.2015 18:14
Avatar
danhosek
Člen
Avatar
danhosek:26.3.2016 17:44

ahoj prosím o pomoc s RouteFactory.php přidal jsem do projektu Reference (-např.) ale nevím, jak tuto podstránku přidat do route tak, aby mi fungovala i administrace referencí i článků.
Děkuji za pomoc.

 
Odpovědět
26.3.2016 17:44
Avatar
danhosek
Člen
Avatar
danhosek:26.3.2016 22:42

upravil jsem RouterFactory takto dle specifikací:

<?php

/*  _____ _______         _                      _
*ANOTACE
*/

namespace App;

use Nette\Application\Routers\Route;
use Nette\Application\Routers\RouteList;
/**
 * Routovací továrnička.
 * Řídí routování v celé aplikaci.
 * @package App
 */
class RouterFactory
{
        /**
         * Vytváří router pro aplikaci.
         * @return RouteList výsledný router pro aplikaci
         */
        public static function createRouter()
        {
                $router = new RouteList();
                $router[] = new Route('kontakt/', 'Core:Contact:default');
                $router[] = new Route('<action>/', array(
                        'presenter' => 'Core:Administration',
                        'action' => array(
                                // řetězec v URL => akce presenteru
                                Route::FILTER_TABLE => array(
                                        'administrace' => 'default',
                                        'prihlaseni' => 'login',
                                        'odhlasit' => 'logout',
                                        'registrace' => 'register'
                                ),
                                Route::FILTER_STRICT => true
                        )
                ));
        $router[] = new Route('reference/[<action>/][<url>]', array(
            'presenter' => 'Core:Reference',
            'action' => array(
                Route::VALUE => 'default',
                Route::FILTER_TABLE => array(
                    // řetězec v URL => akce presenteru
                    'reference' => 'list',
                    'editor' => 'editor',
                    'odstranit' => 'remove'
                ),
                Route::FILTER_STRICT => true
            ),
            'url' => null,
        ));
        $router[] = new Route('[<action>/][<url>]', array(
            'presenter' => 'Core:Article',
            'action' => array(
                Route::VALUE => 'default',
                Route::FILTER_TABLE => array(
                    // řetězec v URL => akce presenteru
                    'seznam-clanku' => 'list',
                    'editor' => 'editor',
                    'odstranit' => 'remove'
                ),
                Route::FILTER_STRICT => true
            ),
            'url' => null,
        ));
        $router[] = new Route('[<url>]', 'Core:Article:default');
        return $router;
    }
}

nyní je funkční přesměrování na výpis referencí i článků, ale reference se mi nevypisují
Ani administrace nefunguje. po pokusu uložit referenci s form action: /reference/editor/
jsem přesměrován na /chyba
Je vůbec možné upravit tento projekt tak, že jsem upravit article na reference a aby mi fungovala administrace k obojímu? Já si myslím, že je už problém pouze v RouterFactory, ale 100% si jistý nejsem. a lépe upravit router factory sám nedokážu.
Děkuji.

 
Odpovědět
26.3.2016 22:42
Avatar
Jindřich Máca
Tvůrce
Avatar
Odpovídá na danhosek
Jindřich Máca:28.3.2016 22:30

Ahoj,
vezmu tvůj komentář asi od konce. Co se týče psaní routování v Nette, není to úplně snadné. Doporučoval bych poctivě pročíst dokumentaci - https://doc.nette.org/cs/2.3/routing a potom se třeba ještě podívat na nějaké příklady např. http://zlml.cz/…te-prakticky. Obecný postup je pak následující:

  • Sepsat si všechny URL adresy, které má / může můj web obsahovat.
  • Seřadit adresy od nejkonkrétnějších po nejobecnější a to kvůli pořadí jejich zpracování.
  • Zkontrolovat, jestli se někde částečně nepřekrývají a pokud ano, je potřeba to napravit. Zkrátka každá URL adresa na webu musí být unikátní.
  • Vymyslet jak svůj seznam URL adres nejoptimálněji zapsat do routeru. K tomu je potřeba dobrá znalost všech jeho vlastností viz. odkazy výše uvedené.

Další Tvoje otázka byla, jestli je routování v projektu možné upravit Tvým specifickým způsobem. Určitě ano, ale budeš k tomu muset využít postup uvedený výše.

Abych Ti pomohl, dal jsem si tu práci a analyzoval jsem kód, který jsi uvedl, plus jsem v něm udělal pár úprav. ;) Vyložená chyba tam není, otázka zní, jestli to dělá to, co by jsi od toho očekával. Onu analýzu můžeš najít zde - http://www.itnetwork.cz/dev-lighter/703. Zkrátka zadaná adresa prochází seznam, přesně tak, jak jsem to očísloval a pokud se najde shoda, je zavolána akce presenteru s danými parametry.

Pokud je vše, jak má být, ještě bych ověřil pomocí laděnky (Tracy), že dané URL se opravdu mapují správně. Laděnka Ti při jejich zadání vypíše všechny podrobnosti. :)

Pokud vše souhlasí, chyba bude opravdu s největší pravděpodobností někde jinde, obzvlášť např. u toho odesílání formuláře bych ji nehledal v routeru. Bohužel, bez dalších zdrojových kódů projektu Ti nedokážu říct více.

Na závěr Ti popřeji hodně štěstí a pevné nervy! :D

 
Odpovědět
28.3.2016 22:30
Avatar
danhosek
Člen
Avatar
Odpovídá na Jindřich Máca
danhosek:29.3.2016 22:17

sepsal jsem si ty odkazy na webu a zjistil jsem problem u editoru článků a editoru referencí. Podle Url nelze zjistit, zda jde o referenci nebo článek:
/editor/ //Editor článku

/editor/ //uložení nového článku
editor/clanek1 //odkaz na editaci čánku + uložení změn článku
/odstranit/clanek1 //smazání článku
u reference ty odkazy vypadají stejně.
Mydlim, že tento problem by vyřešily změny v routovacím poly:
$router[] = new Route('[<acti­on>/][<url>]', array(
'presenter' => 'Core:Reference',
'action' => array(
Route::VALUE => 'default',
Route::FILTER_TABLE => array(
// řetězec v URL => akce presenteru
'reference' => 'list',
'editor_ref' => 'editor',
'odstranit_ref' => 'remove'
),
Route::FILTER_STRICT => true
),
'url' => null,
));
Stačilo by to? nebo by to nerozeznalo, zda jde o referenci nebo článek?

 
Odpovědět
29.3.2016 22:17
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 60.