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 6 - Jednoduchý redakční systém v Nette - Výpis článku

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
danhosek
Člen
Avatar
Odpovídá na Jindřich Máca
danhosek:16.10.2016 12:40

:-D mno...:-D
tedy jsem snad správně odsadil ale stále je problem:

Found sections 'options', 'lazy' in configuration, but corresponding extensions are missing.

parameters:

    dbname: 'XXXXX' # název databáze

# Konfigurace databázové služby dále přístupné pomocí DI v rámci celé aplikace.
database:
    dsn: 'mysql:host=wm87.wedos.net; port=3306; XXXXX'
    user: 'XXXX'
    password: 'XXXX'

options:
lazy: yes

options a lazy jsem zkusil odsazené i neodsazené (vím, zběsilé zkjoušení všeliakých možností :-D)
je to problem odsazení, nebo muže to být třeba špatným portem? nevim, kde ho zjistit, tak tento port mi dala podpora, stím že si není jistý :-D

 
Odpovědět
16.10.2016 12:40
Avatar
danhosek
Člen
Avatar
Odpovídá na danhosek
danhosek:16.10.2016 12:46

už to mám, jen pozdě a příspěvek již nešel odstranit:-D mno jen správně odsadit, děkuji moc, a doufám, že jsi se alespon dobře pobavil na večer :o)

 
Odpovědět
16.10.2016 12:46
Avatar
danhosek
Člen
Avatar
danhosek:30.10.2016 16:51

Ahoj, když chci přidat funkci, která podle url článku vrátí ID článku, bude vypadat takto:
ale nevím, jak má vypadat ten požadavek do db

public function getArticleId($url)
    {
        return $this->database->table(self::TABLE_NAME)->get(article_id)->where(self::COLUMN_URL, $url);
    }

Může to být takto?
a pro jistotu volání této funkce v modelu, a vrátí číslo id vypadá takto:

$this->getReferenceId($url)

děkuji.

 
Odpovědět
30.10.2016 16:51
Avatar
danhosek
Člen
Avatar
Odpovídá na danhosek
danhosek:30.10.2016 17:25

mySQL dotaz by vypadal takto :

SELECT `article_id` FROM `article` WHERE `url`=$url
 
Odpovědět
30.10.2016 17:25
Avatar
danhosek
Člen
Avatar
Odpovídá na danhosek
danhosek:30.10.2016 18:53

tak můj finální výsledek je toto:

return $this->database->table('article')->where('url', $url)->get("article_id");

ale nemůžu to odzkoušet, protože to mám rozdělaný a ted to nepujde spustit.

 
Odpovědět
30.10.2016 18:53
Avatar
danhosek
Člen
Avatar
danhosek:30.10.2016 19:31

Ahoj, ještě bych chtěl poradit, s funkcí

public function saveArticle($article)
        {
                if (!$article[self::COLUMN_ID])
                        $this->database->table(self::TABLE_NAME)->insert($article);
                else
                        $this->database->table(self::TABLE_NAME)->where(self::COLUMN_ID, $article[self::COLUMN_ID])->update($article);
        }

a chci přidat return, který vrací article_id nově uloženého článku.
Děkuji.

 
Odpovědět
30.10.2016 19:31
Avatar
Jindřich Máca
Tvůrce
Avatar
Odpovídá na danhosek
Jindřich Máca:31.10.2016 18:45

Ahoj, tak to vezmu zase postupně, protože je opět vidět, že děláš něco, čemu úplně nerozumíš. :(

  1. Máš chybu hned v názvu metody. Zase nějaká nepozornost? Funkci máš pojmenovanou getArticleId() a voláš metodu getReferenceId().
  2. Úplně špatně jsi pochopil chování metody get(). Dokumentace říká

Returns row specified by primary key.

To znamená, že vrátí celý záznam (všechny sloupečky) podle konkrétního zadaného primárního klíče (nebo false, pokud záznam s takovým primárním klíčem neexistuje).

Každopádně tu metodu jako takovou nemáš úplně špatně. Vypadat by měla nějak takto:

/* Měl by se vykonat přesně ten databázový dotaz, který jsi poslal, který ale může vrátit pole
záznamů v případě, že sloupeček s URL není unikátní, takže pro jistotu vytáhneme první shodu. */

// Načte první záznam článku s danou URL z databáze, pokud existuje.
if (!($article = $this->database->table('article')->select('article_id')->where('url', $url)->fetch())) {
        // Co se má udělat pokud článek se zadanou URL neexistuje.
} else {

        /* V proměnné $article jsou teď uloženy všechny sloupečky daného záznamu vyžádané
        v SELECT, takže zde je to pouze sloupeček 'article_id'. Z principu je to ale pole, takže samotné
        ID z něj musíme ještě vytáhnout. */

        return $article['article_id']; // Vrací ID článku.
}

Pozn.: Nezkoušel jsem to.

  1. Ta druhá funkce, na kterou jsi se ptal a měla by vracet ID vloženého článku, se upraví asi nějak takto:
if (!$article[self::COLUMN_ID]) {
        $row = $this->database->table(self::TABLE_NAME)->insert($article);
        return $row[self::COLUMN_ID];
} else {
        $this->database->table(self::TABLE_NAME)->where(self::COLUMN_ID, $article[self::COLUMN_ID])->update($article);
        return $article[self::COLUMN_ID];
}

Pozn.1: Opět jsem to nezkoušel.
Pozn.2: Nedělal jsem tady kontrolu toho, jestli se článek skutečně podaří vložit, či editovat.

  1. To, že to máš rozpracované by nemělo vadit, pokud používáš např. verzovací systém jako je Git , či jenom verzování v rámci IDE, nebo si na to jednoduše napiš Unit test. :)

Doufám, že už je to všechno jasnější. ;)

P.S.: Neber si to špatně, ale čím víc dotazů pokládáš, tím mám větší pocit, že ještě úplně neovládáš programování v PHP a principy OOP jako takové. Možná bych nejdříve doporučil zaměřit se na ně, místo toho, aby ses rovnou vhrnul na celý e-shop ve frameworku. Navíc, pokud to neděláš jenom jako cvičení a plánuješ komerční použití, tak je potřeba myslet ještě na spoustu dalšího zabezpečení a neudělat v kódu amatérské chyby, jinak hrozí potenciální katastrofa v podobě např. úniku uživatelských dat apod.

 
Odpovědět
31.10.2016 18:45
Avatar
danhosek
Člen
Avatar
Odpovídá na Jindřich Máca
danhosek:31.10.2016 19:06

děkuju, to je přesně to co jsem potřeboval. Neboj se, nechci použít eshop komerčně, vím kolik je tam dalších aspektů, kterým plně nerozimim, ale zde mi jde čistě jen o tu administraci obrázků "Widget".
Jinak ty chyby, že místo Article je reference, je že to dělám pro obrázky do referencí a chtěl jsem to přizpusobit do seriálu na article, ale někde mi to uniklo a nepřepsal jsem to.
Děkuji.

 
Odpovědět
31.10.2016 19:06
Avatar
Daniel Vašek:20.2.2017 17:44

Jen taková poznámka k čistčímu kódu, kdyby jsi nahradil $this->database->table(self::TAB­LE_NAME) novou funkcí např. getAll(), nemusel by se ten dlouhý kus kódu pokaždé opisovat. Pokud se mýlím, vyveď mě z omylu :)

 
Odpovědět
20.2.2017 17:44
Avatar
Jindřich Máca
Tvůrce
Avatar
Odpovídá na Daniel Vašek
Jindřich Máca:20.2.2017 18:08

Určitě souhlasím, já jsem dokonce šel ještě trochu dál a mám vlastní knihovnu, kde pokud podědíš z dané třídy, automaticky tam tu metodu getAll() i nějaké další máš. ;)

 
Odpovědět
20.2.2017 18:08
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 105.