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 danhosek
Jindřich Máca:29.3.2016 22:35

Ahoj,
díky tomu, že tam máš Route::FILTER_STRICT => true, což znamená, že to bere pouze explicitně uvedené routy a nic jiného (pak to pokračuje dál), by tohle mělo stačit. :) Ostatně, proč to nevyzkoušíš sám? ;)

 
Odpovědět
29.3.2016 22:35
Avatar
danhosek
Člen
Avatar
danhosek:18.10.2016 17:51

Ahoj, jak mohu v ContactPresenter nastavit formuláři id nebo class? abych docílil tohodle? <form id="formular" class="formular">?? nebo lze definovat v latte element div? Abych mohl mít něco podobného?

<div class="formular">
    {define title}Kontaktní formulář{/define}
    {define description}Kontaktní formulář.{/define}
    {block content}
    <p>Kontaktujte nás odesláním formuláře níže.</p>
    {* Formulář pro kontakt. *}

                {control contactForm}
</div>

hledal jsem v dokumentacích a forech ale nic jsem nenašel. Všede se řeší pouze set atrubute u inputů.
Děkuji.

 
Odpovědět
18.10.2016 17:51
Avatar
danhosek
Člen
Avatar
Odpovídá na danhosek
danhosek:18.10.2016 17:58

nebo v latte {define title}Kontaktní formulář{/define} -> h1.. můžu tomu naspisu nastavit id nebo class?

 
Odpovědět
18.10.2016 17:58
Avatar
Jindřich Máca
Tvůrce
Avatar
Odpovídá na danhosek
Jindřich Máca:19.10.2016 23:26

No nazdar! :D

Pokud chceš v HTML přiřadit elementu, jako např. div, id nebo class, je to v pohodě. Ale to samotné použití div v uvedeném příkladu Latte šablony je špatné ve všech směrech. Ta šablona definuje 3 nezávislé bloky, konkrétně title, description a content, jejichž obsah se dosadí do celkové šablony layoutu. Pokud to takhle obalíš tím div, tak jeho první část se vůbec nepoužije a ta druhá </div> se vloží do bloku content a ve výsledné HTML struktuře nadělá kompletní paseku.

Tohle bylo spíš varování s vysvětlením, aby jsi Ty, ani nikdo jiný, tohle v kódu nedělal a teď k odpovědi na otázku. Formuláři se class dá nastavit poměrně jednoduše pomocí parametru:

{control contactForm, class => 'formular'}

Zato id mu automaticky generuje Nette a to bys nejlépe měnit vůbec neměl. Naopak by ses tomu měl podřídit, jelikož se podle toho provádí např. i mapování odeslaných hodnot. Zkrátka Nette formuláře mají vždy vlastní generované id a neměl by jsi to měnit, pokud přesně nevíš, co děláš. ;)

A k té druhé otázce ohledně nastavení id nebo class u definice bloku. Ne, tady se to přímo nijak nastavit nedá, jak už jsem psal, ten obsah toho bloku se celý vezme a vloží na příslušné místo do celkového layoutu. Ten blok samotný ale není reprezentovaný žádným HTML elementem, takže mu logicky nejdou přiřadit žádné HTML vlastnosti. :)

Obecně, pokud by jsi chtěl měnit třídu u nadřazeného elementu daného bloku, musel by jsi to udělat jedině nějakou volitelnou hodnotou, mimo ten blok, která by se dosazovala na správné místo v šabloně nadřazené.

Doufám, že to takhle vysvětlené dává smysl a že v tom najdeš odpovědi, které jsi hledal, když tak se hold budeš muset ptát dále.

 
Odpovědět
19.10.2016 23:26
Avatar
danhosek
Člen
Avatar
Odpovídá na Jindřich Máca
danhosek:20.10.2016 0:46

děkuji za odpověď, je to přesně to co jsem potřeboval..
jinak, když jsem čekal na odpověď, zkoušel jsem různá řešení a zkusil toto:

<div class="kontaktni_formular">
    {define title}Kontaktní formulář{/define}
    {define description}Kontaktní formulář.{/define}
    {block content}
    <p>Kontaktujte nás odesláním formuláře níže.</p>
    {* Formulář pro kontakt. *}
      <div id="form-main">
        <div id="form-div">
            <div class="container">

                {control contactForm}
            </div>
        </div>
    </div>
</div>

<div class="kontak­tni_formular"> se opravdu nevipisoval, ale <div id="form-main">, <div id="form-div">, <div class="container"> , které jsou už v bloku {block content}, tak jsem na toto přišel metodou pokus omyl sám.(ten pokus/omyl slyšíš nerad co?):-D

 
Odpovědět
20.10.2016 0:46
Avatar
CZkiniCZ
Člen
Avatar
CZkiniCZ:5.1.2017 10:22

Ahoj. Jak by se dal mail odeslat více lidem když chci zadat adresáty přez formulář?

Odpovědět
5.1.2017 10:22
Age of the geek.
Avatar
Jan Říha
Člen
Avatar
Jan Říha:2.2.2017 20:30

Ahoj,
přes formulář ukládám článek do tabulky article:
INSERT INTO article (article_id, title, url, description, content)
VALUES ('', 'aaa', 'aaa', 'aaa', '<p>aaaaaa</p>')
vypíše se chyba:
General error: 1366 Incorrect integer value: '' for column 'article_id' at row 1.
Chápu, kde je chyba. Nevím, jak ji odstranit.

 
Odpovědět
2.2.2017 20:30
Avatar
Jindřich Máca
Tvůrce
Avatar
Odpovídá na Jan Říha
Jindřich Máca:2.2.2017 20:50

Ahoj,

tahle chyba spíš souvisí s SQL než s Nette jako takovým. Tvůj SQL kód:

INSERT INTO article (article_id, title, url, description, content)
VALUES ('', 'aaa', 'aaa', 'aaa', '<p>aaaaaa</p>');

Proč posíláš do hodnoty article_id, která je očividně celé číslo, prázdný textový řetězec? :D A pak ještě hned pod tím napíšeš toto:

Chápu, kde je chyba. Nevím, jak ji odstranit.

Tak to prostě nedělám a to SQL bude vypadat takto:

INSERT INTO article (title, url, description, content)
VALUES ('aaa', 'aaa', 'aaa', '<p>aaaaaa</p>');

Chyba odstraněna. ;)

Každopádně, pokud Ti tenhle kód nebude fungovat, tak máš špatně navrženou tu samotnou databázovou tabulku. Standardní postup při tvorbě SQL tabulek s indexem je, že se tento index nechává přiřazovat automaticky, tudíž se mu nastaví AUTO_INCREMENT a v INSERT dotazech se pak může právě úplně vynechat. :)

 
Odpovědět
2.2.2017 20:50
Avatar
Jan Říha
Člen
Avatar
Jan Říha:3.2.2017 18:12

Ahoj,
postupuji podle návodu Jednoduchý redakční systém v Nette. Dodělal jsem 8. díl - Dokončení administrace.
Na úvodní stránce vyberu Administrace, Editor článků, vyplním pole Titulek, URL, Popisek, Obsah a dám Uložit článek. Vyskočí mnou víše popisovaná chyba.

Předpokládám, že problém souvisí s metodou createComponen­tEditorForm(), skrytým polem article_id, které se metoda editorFormSucceeded snaží uložit do tabulky article jako prázdný text.
Doplnil jsem:
$form->addHidden('ar­ticle_id')->addRule(Form::IN­TEGER);
Opět nejde uložit. Nad formulářem vyskočí: Please enter a valid integer.
Tabulku article jsem zakládal podle create_article.sql.
Hostuji na wedos.
Honza

 
Odpovědět
3.2.2017 18:12
Avatar
Jindřich Máca
Tvůrce
Avatar
Odpovídá na Jan Říha
Jindřich Máca:3.2.2017 21:15

Chápu, takže to je chyba v kontextu toho formuláře. Každopádně to přidání pravidla k tomu skrytému poli není ve směs špatná myšlenka, ale v tomhle kontextu je to dost nepoužitelné, protože ten prázdný formulář tam to article_id nikdy nemá nastavené, tudíž to nemůže být číslo. :)

Takže, pokud se vrátíme k té původní chybě, tak já jsem teď stáhl místní archiv, rozchodil znovu lokálně, zopakoval Tebou uvedený postup a vše prošlo bez chyby. :D Takže jakou máš verzi PHP, popřípadě verzi databáze? A opravdu jsi v tom projektu vůbec nic neměnil?

 
Odpovědět
3.2.2017 21:15
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.