IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
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: PHP web postavený na MVC architektuře + AJAX

Aktivity
Avatar
FiftypiSoftware
Tvůrce
Avatar
FiftypiSoftware:6.3.2021 17:11

Ahoj, mám dotaz, snad se mi to podaří dobře zformulovat. Mám web postavený na MVC architektuře a potřebuji zobrazovat komentáře. K vypisování komentářů používám AJAX a web na MVC mám postavený podle zdejšího tutoriálu.

Komentáře jsou uloženy v databázi a při načítání stránky se provede požadavek na vypsání komentářů AJAXem. Volá se kontroler comments s parametrem url. Tento parametr je zpracován modelem, a poté kontrolerem zpracován pohled. Na stránku se skutečně vypíší komentáře, ale problém je ten, že potřebuji, aby se zobrazila pouze adekvátní část, avšak v konzoli vidím, že se vypíše úplně celá stránka, což je špatně.

Také jsem si myslel, že změny provedené v odpovědi AJAXu se projeví i ve zdrojovém kódu (když si jej dám zobrazit, elementy, které Javascript upravuje se nezobrazí.)

Další dotazy budou průběžně přidávány.

 
Odpovědět
6.3.2021 17:11
Avatar
Odpovídá na FiftypiSoftware
Petr Štechmüller:7.3.2021 9:25

Ahoj, zkusím tvůj problém přeložit:

Máš web postavený podle zdejší MVC architektury.
Dále máš stránku, na které potřebuješ zobrazit komentáře.

Komentáře jsou uloženy v databázi a při načítání stránky se provede požadavek na vypsání komentářů AJAXem

Z této věty chápu, že ty zobrazíš "prázdnou" stránku bez komentářů a asynchronně po načtení základního layoutu strákny si vyžádáš obsah komentářů. Jenže ti to asynchronní volání vrátí kompletní obsah stránky a ne pouze tu část s komentáři.

Upřímně, na takové věci není tato MVC architektura uzpůsobena. Tedy, možná je, ale vidím pouze obsah základního kurzu. K ostatním článkům nemám přístup, tak nevím, jestli je to dál nějak vylepšeno.

To, co bys mohl potřebovat je vlastně nějaký REST přístup k tvému serveru. To by znamenalo, že tím asynchronním voláním by sis nevrátil obsah celé stránky, ale pouze JSON s komentářy. Samotné renderování by proběhlo až na klientovi.

Nebo udělat renderování na serveru - což je nejspíš to, o co se teď snažíš. Budeš na to potřebovat ale napsat nějakou logiku.

Takže by to chtělo rozlišit standardní požadavek na stránku od RESTu. A na základě tohoto rozhodnutí bys renderoval celou stránku, nebo jenom její část - komentáře.

Nahoru Odpovědět
7.3.2021 9:25
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
FiftypiSoftware
Tvůrce
Avatar
Odpovídá na Petr Štechmüller
FiftypiSoftware:7.3.2021 11:03

Ahoj, ano, web mám postavený podle zdejší MVC architektury

Z této věty chápu, že ty zobrazíš "prázdnou" stránku bez komentářů a asynchronně po načtení základního layoutu strákny si vyžádáš obsah komentářů. Jenže ti to asynchronní volání vrátí kompletní obsah stránky a ne pouze tu část s komentáři.

Ano, je tomu tak. Upřímně, použít pro komentáře pouze JSON, mě nenapadlo, ale asi to bude nejjednodušší.

Zatím jsem to vyřešil tak, že mám kontroléry, které zpracovávají a renderují AJAX požadavky, a router, který na základě podmínky buď vypíše celý layout nebo vypíše pouze pohled komentářů.

$this->control->proceed($parsed);

if(preg_match('/Ajax$/',$control_class))
{
        $this->data = $this->control->data;
        $this->view = $this->control->view;
}
else
{
        $this->data['title'] = $this->control->header['title'];
        $this->data['keywords'] = $this->control->header['keywords'];
        $this->data['describtion'] = $this->control->header['describtion'];
        $this->data['user'] = $user;
        $this->data['msgs'] = $this->getMessages();

        $this->view = 'template';
}

Tady je ukázka fragmentu kódu routeru, který vyhodnocuje, zda se jedná o požadavek či nikoliv. Je to asi krkolomně řešeno, protože název kontroléru musí obsahovat slovo "Ajax."

Díky za odpověď.

 
Nahoru Odpovědět
7.3.2021 11:03
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 3 zpráv z 3.