Autor Zpráva
Pinqui
Profil
Dobrý den, nevíte někdo, kde by byl dobrý návod, jak si udělat nějaký MVC web?
Četl jsem již hodně, vím co by která vrstva mohla dělat, ale nějako mi nejde do hlavy, jak to udělat, abych mohl mít ještě například více "them" na výběr. Jak to udělat stylem MVC, abych načetl šablonu webu a přímo do té šablony již vkládal, to co tam patří. Dám příklad:

šablona:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="cs" lang="cs">
<head>
    <title>{TITLE}</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="description" content="{DESCRIPTION}" lang="cz" />
    <meta name="keywords" content="{KEYWORDS}" />
    <meta name='copyright' content='{COPYRIGHT}' />
    <style type="text/css" media="screen, projection">	
                  @import "{TEMPLATES_CSS}";
    </style>

</head>
<body>

<div id="corner">
    <div id="header">
       {HEADER}
    </div>  

    <div id="leftTSide">
        {LEFT}
    </div>
	  
    <div id="rightTSide">
        {RIGHT}
    </div>
    
	  <div id="bodyContent">
        {CONTENT} 
    </div>

    <div class="both"></div>

    <div id="footer">
        {FOOTER}
    </div> 
</div>
</body>
</html>


A teď jak do jednotlivých částí vkládat tak, aby to bylo pořád MVC. Díky za rady
Joker
Profil
Pinqui:
Podle mého názoru by tohle měl dělat šablonovací systém, který by byl součástí view.
Pinqui
Profil
Mno pro vrstvu view mám vždycky soubory, které vypadají třeba následovně:
<?php
  print '<ul id="headerMenu">';
    foreach ($headermenu as $list):
      print '<li>'.$html->link($list['headermenu']['name'],$list['headermenu']['link']).'</li>';
    endforeach; 
  print '
      </ul>     
?>


Teď to mám:
1) pres require_once načtu hlavičku až po tag body
2) skouknu adresu, podle ní spustím controller
3) controller vybere z modelu požadované věci (v tomto případě jen položky do menu )
4) vybrané položky předá vrstvě view
5) pres require_once načtu patičku

Viděl jsem i způsob, kde se hlavní šablona viz co jsem psal nahoře načte takto:
$template = file_get_contents($adresa_k_template);

a pak se do daných částí nějak, nevím jak podstrčí to co se vygeneruje ( ale nevím zda to je pak taky MVC )
fuckin
Profil
Pinqui:
MVC znamená oddělení HTML od PHP. Tedy to co jsi napsal je pěkná kravina.
Mám dobré zkušenosti s šablonovací třídou http://pet.andreas-demmer.de/ , neumí toho moc ale proto je možná tak vhodná pro začátečníka.
Pinqui
Profil
fuckin:
Mno já jsem to bral podle tohoto:
http://anantgarg.com/2009/03/13/write-your-own-php-mvc-framework-part-1/
fuckin
Profil
Vždy používej šablonovací systém, usnadní ti to spoustu práce.
Joker
Profil
fuckin:
MVC znamená oddělení HTML od PHP.
To se mi moc nezdá. MVC je Model - View - Controller. Model ani Controller logicky HTML obsahovat nemůže, ale u View podle mě je možné smíchat "prezentační PHP" s HTML.

Což nic nemění na tom, že já mám raději šablonovací systém, než míchat PHP a HTML. Nicméně i při použití šablonovacího systému je podle mého názoru i "logika" šablonovacího systému, starající se čistě o zpracování a zobrazení šablony, součástí View - čili View pořád obsahuje HTML a PHP.

Přesto, jak říkám, souhlasím s tím, že šablonovací systém je lepší.
Jan Tvrdík
Profil
Pinqui:
Jestli chceš začít používat MVC, tak je imho nejlepší použít nějaký hotový framework (CodeIgniter, Nette, Zend, …). Ušetří ti to hodně práce.
Pinqui
Profil
Jan Tvrdík:
A co Smarty?
fuckin:
A tak nějaké doporučení tedy? Krom toho PET, kde co jsem koukal, tak valnou většinu budu muset napsat sám. ?
Nox
Profil
Výhodu šablonovacího systému bych viděl možná v blbuvzdornosti, možná trochu přehlednosti, jinak těch pár znaků míň připsaní se vyruší s tím neustálým kopírováním proměnných, navíc syntaxe i třeba molochu Smarty je o mnohem slabší než PHP...možná snad ještě to cachování, ale to je na chvílu psaní

Oddělovat HTML od PHP taky není ta idea, odděluje se aplikační a prezentační vrstva.... šablonovací systémy pouze oddělují vlastní prezentaci od prezentační vrstvy

Pinqui:
Smarty je molochoidní šablonovací systém, nějakých 320kB celkem, to je skoro jak půlka celého Nette framework
Pinqui
Profil
Mno :-D Tak já už nevím :-D.
Chtěl bych, aby se do budoucna dali tvořit k webu co nejjednodušeji jiné vzhledy a přitom se dal funkčně dále nenásilně vyvýjet.
Nox:
Děláš v nějakém frameworku? Či co by jsi mi doporučil? Nejsem vůbec od toho se něco naučit, když bude slušný zdroj informací.
Joker
Profil
Nox:
Výhodu šablonovacího systému bych viděl možná v blbuvzdornosti, možná trochu přehlednosti, jinak těch pár znaků míň připsaní se vyruší s tím neustálým kopírováním proměnných
Tohle je otázka. Když nepočítám šablonovací systém, který mám jednou někde udělaný a pak ho jen používám, vyjde to na objem kódu většinou asi podobně.
Na druhou stranu můžu dost kódu ušetřit, pokud ty šablony používám na více místech (když v nich mám nějaké obecnější HTML bloky)

Hlavní výhodu ale vidím v té přehlednosti- HTML i PHP kód se pak daleko snadněji upravují.
Vyhnu se situacím, kdy mám třeba v index.php na řádku 436: echo("</div>"); a přemýšlím, který <div> to vlastně ukončuje. Přičemž ten dotyčný <div> může být klidně o 250 řádků PHP kódu výš.
Navíc v samotné HTML šabloně můžu používat nástroje editoru jako automatické formátování kódu, označování související HTML značky apod. což v PHP kódu moc nefunguje.

Oddělovat HTML od PHP taky není ta idea, odděluje se aplikační a prezentační vrstva.... šablonovací systémy pouze oddělují vlastní prezentaci od prezentační vrstvy
Vidím to stejně. Jestli psát HTML přímo v PHP nebo používat šablonovací systém je diskuse jen v rámci toho "V" z "MVC".

Pinqui:
Tak já už nevím :-D.
Jsou i daleko menší šablonovací systémy, třeba ten můj (jakkoliv je samozřejmě řádově jednodušší než Smarty) má 18kB :-)

Nicméně: Budeme se tedy bavit o MVC frameworku, nebo o šablonovacích systémech?
Pinqui
Profil
Joker:
Chtěl bych, aby se do budoucna dali tvořit k webu co nejjednodušeji jiné vzhledy a přitom se dal funkčně dále nenásilně vyvýjet.

Podle toho co čtu už ani nevím co hledám. Co tedy hledám, když chci co píši výše?
fuckin
Profil
Joker:
To se mi moc nezdá. MVC je Model - View - Controller.
Ano, hodně jsem to zjednodušil pro lepší pochopení. PHP v Views by mělo být co nejméně. Přeci jenom šablony edituje kodér, který málokdy má slušné zkušenosti s php kódem, proto je lepší psát pseudokód daného systému v šablonách.

Pinqui:
A co Smarty?
Pokud se rád učíš něco nového tak proč ne.

Krom toho PET, kde co jsem koukal, tak valnou většinu budu muset napsat sám. ?
A co potřebuješ víc? Opravdu by mě to zajímalo, vím o jednom nedostatku, jinak mě tam nic nechybí.

Co tedy hledám, když chci co píši výše?
Buď framework který obsahuje šablonovací systém nebo samostatný šablonovací systém. Například CodeIgniter je ukázkový příklad kvalitní MVC struktury.
Pinqui
Profil
A Nette? Jak je to u něj se šablonovacím systémem?
fuckin
Profil
Pinqui:
Vcelku dobře. http://zdrojak.root.cz/clanky/nette-framework-chytre-sablony/
Pinqui
Profil
Dobrá, děkuji moc všem. Pokusím se tedy o seznámení s Nette.

//PS - když se kouknou na strukturu MVC nette viz i template a tu strukturu co jsem psal že mám viz [#3], tak se mi zdá, že to také využívá php ve view vrstvě. Či se pletu? Jestli ano, nic se neděje jen mě to tak trochu zajímá.
Jan Tvrdík
Profil
Pinqui:
Ano, Nette používá ve view "PHP kód", ale k jeho zápisu se používá Latte filtr. Je důležité si uvědomit, že v šablonách se neprogramuje a šablonovací systém musí umět používat i někdo, kdo toho o programování moc neví. V šablonách by sis měl většinou vystačit s pár podmínkami a cykly.

Za největší výhodu šablon v Nette považuji dědičnost šablon (viz také video s jejich představením) a kontextově sensitivní escapování.
Nox
Profil
Jan Tvrdík:
i někdo, kdo toho o programování moc neví. V šablonách by sis měl většinou vystačit s pár podmínkami a cykly.
To je takové podivné tvrzení....obtížnost naučení se potřebných věcí v PHP a v šabloně je stejná, nikdo/nic dotyčného nenutí učit se víc než potřebuje

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0