Autor Zpráva
jefitto44
Profil
Ahojte. Podľa návodu na blog, ktorý je v dokumentácií nette sa snažím vyrobiť si prvú primitívnu appku. Problém je nasledovný:
Mám HomePresenter, ktorý zobrazuje úvodnú stránku a v ňom mám pripojenie do databázy za účelom vybrania kategórií článkov do sidebaru. V latte sa však sidebar includuje (lebo sidebar bude na každej podstránke tak nebudem ho písať na desať razy). Problém nastáva, keď sa dostanem na podstránku. Tam sa totiž snaží hľadať tú funkciu na vybratie kategórií v AskPresenteri (tak sa volá podstránka), lenže tam nie je. Môžem ho tam síce nakopčiť z HomePresentera, lenže to mi ako good practice nepríde...

Mám to teda zobrať a umiestniť do BasePresentera, pričom zmením v BasePresenteri abstract class na class? Že proste zruším abstract class a automaticky sa mi to vykoná pri každom presenteri, ktorý extenduje BasePresenter?
Alphard
Profil
jefitto44:
Mám to teda zobrať a umiestniť do BasePresentera
Ano.

pričom zmením v BasePresenteri abstract class na class?
Ne, proč? Ta jiná stránka je pod AskPresenter, ne? Takže přímo BasePresenter není třeba instanciovat.
jefitto44
Profil
No ale BasePresenter je defaultne nastavený ako abstract class... to znamená, že aj tak mi to nepôjde používať priamo... či?
nightfish
Profil
jefitto44:
No ale BasePresenter je defaultne nastavený ako abstract class... to znamená, že aj tak mi to nepôjde používať priamo... či?
Jak už psal Alphard - BasePresenter nikde instanciovat nemusíš, "společné" metody budeš volat z AskPresenteru. Abstraktní třída neznamená, že v ní nemohou být implementovány metody...
jefitto44
Profil
Čiže v BasePresenteri dám funkciu getCategories() {} a automaticky sa mi zavolá pri každom podradenom prezenteri, čiže tie veci tam mať bude?
Jan Tvrdík
Profil
jefitto44:
Lepší by bylo nedávat to do BasePresenteru, ale do samostatné třídy, jejíž instanci si injektneš do presenterů, které s ní potřebují pracovat.
jefitto44
Profil
Vyskakuje mi chyba, že Service TemplateFactory has not been set čo to jest? Momentálne to chcem urobiť tak, že do BasePresentera pridám public funciot __construct() a tam hodím toto
$this->template->categories = $this->database->table('category');
Čiže pri spustení akéhokoľvek presentera sa spustí aj BasePresenter a jeho __construct, ktorý spustí výber z DB... niekde tam bude ale nejaký háčik, pretože takto mi to nefunguje...


Toto je môj HomePresenter.php

<?php
namespace App\Presenters;

use Nette;
use App\Model;

class HomepagePresenter extends BasePresenter
{
    private $database;

    public function __construct(Nette\Database\Context $database)
    {
        $this->database = $database;
    }

    public function renderDefault()
    {
        $this->template->categories = $this->database->table('category');
        $this->template->newestAsk = $this->database->table('ask')->order('added DESC')->limit(5);
    }

}

A toto je BasePresenter.php
<?php

namespace App\Presenters;

use Nette;
use App\Model;


/**
 * Base presenter for all application presenters.
 */
abstract class BasePresenter extends Nette\Application\UI\Presenter
{
    
}

Z HomePresentera potrebujem, aby sa riadok č.18 volal v každom jednom presenteri, ktorý tam ešte bude. Musím ho teda umiestniť do BasePresentera, lenže neviem ako. A tiež neviem, ako potom k nemu pristúpim v Home/Ask/InyPresenteri
Alphard
Profil
Pro společné nastavení šablon bude lepší metoda startup(). Z toho kódu je to jasné, že takhle to fungovat nemůže; konstruktor templaty nevytváří a nic jiného se nemohlo stihnout zavolat. Inspiruj se na https://github.com/nette/examples/blob/master/CD-collection/app/presenters/DashboardPresenter.php.
jefitto44
Profil
Omg... je to horšie, ako som čakal. Škoda, myslel som, že nette bude dostatočne jednoduchý FW na to, aby to moja glupa hlava pochopila... Možno by bolo dobre prejsť na nejaký iný FW, alebo na úplne iný jazyk, napr. ruby... beztak v robote končím s PHP...
aDAm
Profil
a nebo se na to vysrat? máš kolem toho už poměrně dost tutoriálů, hodně se toho řešilo na foru, github je taky plný věcí co tě můžou nakopnout. Chce to jen číst a pak to jde, ovšem ale bez základů OOP hodně blbě.
Kcko
Profil
jefitto44:
Wordpress na hov**, Laravel na hov**, Nette taky na hov** ... zkus upéct housky, to by Ti mohlo jít.
Alphard
Profil
[#10] aDAm
[#11] Kcko
Takové vyjadřování snad není nutné. Buďte prosím slušní.

[#9] jefitto44
Nette se nedá naučit za týden a neznalost OOP to komplikuje ještě víc. Není to tím, že by Nette bylo zbytečně složité, návrh aplikace odpovídá tomu, co se od ní očekává.
Klidně zkus jiný framework, ale budeš zpět na startovní čáře a asi si moc nepomůžeš.
A změnou jazyka už si vůbec nepomůžeš :-) Ruby je místy docela magické, takže ho v tvém případě nedoporučuji. (Líbí se mi Python, snaží se být hodně explicitní, což by ti asi vyhovovalo. Ale nepoužívám ho pro klasické weby, takže nemohu posoudit jejich frameworky.)
jefitto44
Profil
Ja však OOP ovládam... skôr mám problém s MVC...

Tutorialy k nette sú, aj som niekoľko prešiel... čo však mám z toho, že na ITNetworku si urobím kalkulačku v nette, alebo podľa dokumentácie nette si urobím kryplblog? Ja potrebujem niečo komplexnejšie... napr. ako nakodiť apku na nahravanie fotiek, ako nakodiť CMS v nejakom frameworku... to už je naozaj tutorial, ktorý ti dá veľa... ale také niečo som zatiaľ nenašiel
Kcko
Profil
jefitto44:
nakodiť apku na nahravanie

Pomocí Nette (použijes Presenter(y), Komponentu/y, v dokumentaci se dozvíš jak pracovat s obrázky, s formulářem jistě umíš pracovat když víš jak udělat kryplblog.

Nic víc nepotřebuješ a pokud do toho zakomponuješ svoje OOP znalosti viz OOP ovládam tak to bude dozajisté skvělá aplikace.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0