Autor Zpráva
Besir
Profil
Zdravím všechny lidičky, chtěl bych rozpoutat debatu o tom kdo jakým stylem programujete. Sem ve své podstatě v PHP pokročilý začátečník, takže asi level 2.5 z 5. Mám za sebou dokonce i jeden jednoduchý web s malou administrací a sice www.strechy-zatepleni-fasad.cz . Ale bojím se že způsob jakým programuji je vcelku nešťastný. Jinak řečeno, pokud znáte OS Joomla! když děláte template pro J! tak asi takovým způsobem to tvořím. V souboru třeba modules.php mam udělané fce třeba pro vytvoření menu čtení title stránky z db apod. To mám vloženo na index.php a pak si na patřičných místech volám
<?PHP menu($config , $aktual_page) ?>
( to sem tak plácnul teť) . Proto bych se chtěl optat jestli by mi někdo neporadil nějakou elegantní techniku, popřípadě že bychom o tom hezky podiskutovali. Doufám že tu takový thread už neni.
K
Profil *
Zend Framework
Mastodont
Profil
Co přesně rozumíš pojmem styl? Způsob zápisu kódu? Způsob zpracování chyb? Procedurální vs. objektové? MVC vs. jiné přístupy? Centrální front controller vs. page controller pro každou stránku?
loyza
Profil
Souhlasím s K. Pokud je člověk pokročilý programátor, tak je nejlepší způsob práce MVC. Už je jedno, jestli použiješ Zend Framework, nebo nějaký jiný způsob. Ovšem Zend je IMHO nejlepší.
Mastodont
Profil
Zend je IMHO nejlepší
Jsou i lidé, co si myslí opak:
http://blog.cameroncox.com/ramblings/2007/12/the-zend-framew.html

(já Zend nepoužívám, čili nemám názor)
K
Profil *
Mastodont
Vse ma sva pro i proti. Nic krome cisla 42 neni 100% dokonale.
Mastodont
Profil
Jistě. Ale tohle asi nemá být téma o ZF, uvidíme, jestli se Besir ozve.
K
Profil *
Mastodont
Chapu - Besir chtel poradit elegantni techniku - a vyuziti ZF povazuji za elegantni zpusob programovani webovych aplikaci. Rozhodne to vsak neni jedine reseni. IMHO nejlepsi reseni pri tvorbe webu je C#.
Besir
Profil
Co přesně rozumíš pojmem styl? Způsob zápisu kódu? Způsob zpracování chyb? Procedurální vs. objektové? MVC vs. jiné přístupy? Centrální front controller vs. page controller pro každou stránku?

Zdravim, sem rad že se to takhle rozjíždí, no o Zend Framework sem nikdy neslyšel a co se týče mé citace tak asi tak, prostě nějak nevim jakým způsobem psát kód, je sice fakt že OOP mě nějak nevlezlo pod kůži ikdyž ve škole v C++ ho používat musím :( . Jde o to že opravdu nejsem spokojen s tím jak vytvářím web po stránce struktury kódu. Přijde mi to strašně prasácký. Dále pak nevím ani co je to MVC ( nebo aspoň takhle ve skratce ne ). Sem dnes nějaký zmatený ( spíš neprobuzený ) tak doufám že tenhle příspěvek dává aspoň trochu smysl. S pozdravem sir_B


EDIT: tak už vím co je MVC :-) a tet koukam po něčem o Zend Framework ( dost je toho anglicky ale česky ... :-( )
Mastodont
Profil
Besir
No tak načrtni alespoň základní způsob, jak píšeš ..

.. include $_GET['page'].'.php'
:-)
Aesir
Profil
Besir:

Je jedno, za programujete objekotvě nebo procedurálně. Důležité je shodnout se s případným týmem se kterým děláte. To samé platí o použité syntaxi a vlastně celé štábní kultuře.
Ideální způsob programování, dle mého názoru, je psát znovu použitelný kód. To znamená, napsat třídu (funkci, modul, jedno jak se tomu bude říkat), pro například stránkování sady dat tak, aby bylo úplně jedno, jestli data přijme z databáze, z XML, či ze statického pole apod.
Tomuto způsobu samozřejmě i odpovídá využití již existující sady knihoven...např. zmíněného Zend Frameworku, který vypadá použitelně.
Soustředíte se již poté jen na psaní samotné logiky aplikace a nemusíte se starat o běžné problémy.
Besir
Profil
No klidně bych si na ftp upnul zabalenej nějakej web, psal sem to již nahoře, mam jeden soubor modules.php v tom sou fce které obstarávají vše co se týče výběru z DB. config.php v tom sou uložené všechny potřebné proměnné nebo konstanty pro běh. a pak již mám index.php v tom sou eště před definováním !DOCTYPE includovány config.php a modules.php . Nicméně nějak nevim jak bych udělal takovimto způsobem nějakou rozsáhlejší aplikaci. ... Od pouhého includování stránek zvlášť napsaných v dokumentech sem upustil již o nějakej ten pátek z5 ...

<?PHP
include ("config.php");
include ("modules.php");
?>


...
HTML HEADER
...
<body>

<div id="menu_top_menu">
<?PHP @Module_menu_top($page , $com, $config['PAGE_URL']); ?>

</div>
<div id="central">
<?PHP echo @Module_obsah($config, $page , $com , $mod); ?>

</div>
<div id="zapati">
<?PHP @Module_foot($config['PAGE_URL']); ?>

</div>
</body>
</html>

/* ---------------------------  modules.php ----------------------------- */

function Module_menu_top ($aktualni_stranka , $com, $page_url)
{
	$menu_top_dotaz = "SELECT * FROM menu_top WHERE menu_top = 1 ";
	
	$menu_top_zpracovano = mysql_query ($menu_top_dotaz);
	$pocet_menu = mysql_num_rows($menu_top_zpracovano);
	$pocet_menu = $pocet_menu -1;
	$poradi_odkazu = 0;
	echo "\n";
	while ($menu_top = mysql_fetch_array($menu_top_zpracovano))
	{
		if ($aktualni_stranka == $menu_top['page'] AND $aktualni_stranka != NULL){echo "<div id=\"menu_top_activ\">";}
		elseif ($com == $menu_top['com'] AND $com != NULL){echo "<div id=\"menu_top_activ\">";}
		else {echo "<div class=\"menu_top_unactiv\">";}
		echo "<a href=\"";
		if($menu_top['page'] != NULL) { echo $page_url."stranka/".$menu_top['page'].".html";}
		if($menu_top['com'] != NULL) { echo "com_montyfaj_".$menu_top['com'].".html";}
		if($menu_top['mod'] != NULL) { echo "?mod=".$menu_top['mod'];}
		echo "\" >".$menu_top['nazev']."</a>";
		echo "</div>\n";
		if ($poradi_odkazu != $pocet_menu) {
		echo "<div class=\"menu_top_rozdelovac\" ></div>\n";
		}
		$poradi_odkazu ++;
	}
}

// FCE pro vybrání obsahu webu

function Module_obsah ($config, $aktualni_stranka , $com , $mod )
{
	$dotaz_existence = mysql_fetch_array(mysql_query("SELECT * FROM pages WHERE page = '".$aktualni_stranka."'"));
 if ($dotaz_existence['page'] == NULL AND $com == NULL){
 echo "<h1>Error 404</h1>Snažíte se vstoupit na stránku která nebyla nalezena";
 }
 else {
	if ($aktualni_stranka != NULL AND $com != NULL){
	echo "Kolize systému. Pravděpodobně špatně nastavená adresa stránky, kontaktujte prosím administrátora ".$config['PAGE_NAME'];
	}
	elseif ($aktualni_stranka != NULL){
	//echo "Stránka <br />";
	$dotaz_page = mysql_fetch_array(mysql_query("SELECT * FROM pages WHERE page = '".$aktualni_stranka."'"));
	//print_r ($dotaz_page);
		if ($dotaz_page['obsah'] != NULL AND $dotaz_page['obsah_left'] == NULL){
		echo "<div id=\"obsah_nonleft\">".$dotaz_page['obsah']."</div>\n";
		}
		elseif ($dotaz_page['obsah_left'] != NULL) {
		echo "<div id=\"obsah_left\">".$dotaz_page['obsah_left']."</div>\n
			  <div id=\"obsah\">".$dotaz_page['obsah']."</div>\n";
		}
	}
	elseif ($com != NULL){
	$com_ = "components/com_".$com."/com_".$com.".php";
		if (include ("$com_")){}
		else {echo "<h1>Error 404</h1>Snažíte se vstoupit na stránku která nebyla nalezena na tomto serveru, nebo se snažíte vložit stránku z jiného serveru nesprávným způsobem.";}
	}
	elseif ($aktualni_stranka == NULL AND $com == NULL){
	$dotaz_homepage = mysql_fetch_array(mysql_query('SELECT obsah, obsah_left FROM pages WHERE homepage = 1'));
		if ($dotaz_homepage['obsah'] != NULL AND $dotaz_homepage['obsah_left'] == NULL){
		echo "<div id=\"obsah_nonleft\">".$dotaz_homepage['obsah']."</div>\n";
		}
		elseif ($dotaz_homepage['obsah'] != NULL AND $dotaz_homepage['obsah_left'] != NULL) {
		echo "<div id=\"obsah_left\">".$dotaz_homepage['obsah_left']."</div>\n
			  <div id=\"obsah\">".$dotaz_homepage['obsah']."</div>\n";
		}
	}
 }
}


/* ----------- END ------------------*/


To jen takovej výtažek. Děkuju
Joker
Profil
Besir
IMHO je výhodnější použít nějaký šablonovací systém. Přijde mi to takové přehlednější.
Besir
Profil
IMHO je výhodnější použít nějaký šablonovací systém. Přijde mi to takové přehlednější.
A toho se snažim dopídit, mě se tenhle můj spůsob taky nelíbí. Snažim se přijít na to co je to ten Zend Framework ale zatim do toho nevidim.
Mastodont
Profil
Tak on tam šablonovací systém v podstatě obsažen je (do stránky se na určitá místa vepisují celé bloky).

Ty mraky ifů už by se ale nahradit daly, třeba děděnými třídami pro různé typy výstupu. Ale je fajn, že průchod daty je jen jeden.
Besir
Profil
Mastodont:
Ale je fajn, že průchod daty je jen jeden.

Co myslíš tím "průchod daty" ?
Apropo OOP, to je moje bolest, nbejsem schopen se ho naučit, nebo spíš si představit jak ho použít. Neporadil by jste někdo nějaký dobrý tut pro PHP OOP .
Mastodont
Profil
Besir
Průchod daty = zpracování výsledku dotazu ve while. Někdo z $result nejdřív tahá v prvním cyklu data a pak je ve druhém cyklu cpe do šablony.
Joker
Profil
Mastodont
Tak on tam šablonovací systém v podstatě obsažen
Dejme tomu, ale neplní svou roli- oddělení funkčnosti a prezentace.
Ten hlavní skript vpodstatě obsahuje prezentaci a ty moduly kombinují funkčnost a prezentaci.

Já si použití šablonovacího systému představuju tak, že v samotném skriptu není vůbec žádný výstup na stránku, tj. žádné echo nebo něco takového.
Samotný skript jen vytvoří šablonu, nasype do ní data a řekne jí, aby se zobrazila. Zbytek udělá šablona.
Besir
Profil
Byl by někdo z Vás ochoten sem napsat nějakej ilustrační kousek kódu ze kterého bych se mohl poučit, nebo si z něj něco vzít ? :-) Díky
K
Profil *
http://framework.zend.com/manual/en/
stahni si zdrojaky - tam je par kodu pro ilustraci. Jinak i v techto kodech se vyskytuji nektere nepochopitelne veci(blbosti) ;-)
Joker
Profil
Besir
Klidně, ale teď na to nemám dost času :)
Ale například u mě na webu ( http://www.it-joker.cz/Pocitace-weby/Moje-projekty/ ) je ke stažení můj vlastnoruční šablonovací systém a třeba v projektu Minigalerie je vidět ukázka jeho použití.

Nevím, jestli to je zrovna nejvhodnější ilustrace, už delší dobu se chystám napsat ilustrační příklad pro ten šablonovací systém, ale bohužel nestíhám.
Mastodont
Profil
Joker
Já si použití šablonovacího systému představuju tak, že v samotném skriptu není vůbec žádný výstup na stránku, tj. žádné echo nebo něco takového.

No, někde ten výstup být musí. A jestli v hlavním kódu máš načtení šablony ze souboru a nahrazení nějakých zástupných {BLOCK} za obsah bloku + následné echo $all; nebo to samé v bleděmodrém v přilinkovaném "smarty" skriptu šablony, je IMHO úplně fuk.
ronnie
Profil
K

http://framework.zend.com/manual/en/
stahni si zdrojaky - tam je par kodu pro ilustraci. Jinak i v techto kodech se vyskytuji nektere nepochopitelne veci(blbosti) ;-)


Např?

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