Autor Zpráva
Tomashekk
Profil
Před nějakou dobou jsem psal do sekce "Jak něco udělat" ohledně zrychlení a zjednodušení kodu. Kcko mi poradil si udělat šablony. To mi krásně zpřehlednilo můj kod, ovšem nyní se peru s tím, jak to dodělat aby to fungovalo.
Snažím se, aby všechny funkce se volali ještě před hlavičkou (abych docílil i dynamického title). Takže před hlavičkou se mi výsledky ukládají do proměnné a v těle html pak jen echuji danou proměnnou. Ovšem celé toto řešení se mi zdá na palici. Jak to udělat lépe?
Ukázka kódu:
index.php
<?php 
require_once('inc/config.php');
require_once('inc/conn.php');
include('inc/function.php');
include('scripts/class.Paging.php');
switch ($_GET['view']) 
	{
		case "story":
			$obsah = story($_GET['id']);
			break;
		default:
			$obsah = main();
		break;
	} 
		if(is_array($obsah))
		{
			$web = getTemp("themes/"._THEMES."/theme.html", array("menu" => $menu, "obsah" => $obsah[1] , "motto" => $motto, "strankovani" => $obsah[2],));
		}
		else
		{
			$web = getTemp("themes/"._THEMES."/theme.html", array("menu" => $menu, "obsah" => $obsah , "motto" => $motto, "strankovani" => "",));
		}
//Dynamický title		
if(!empty($obsah[3])) $extr_title = $obsah[3];

ob_start();

?>
<!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">
	<head>
 
		<title><?php echo _TITLE.$title; if(!empty($extr_title)){ echo " - ".$extr_title;} ?></title>	
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<link href="<?php echo "themes/"._THEMES."/style.css"; ?>" rel="stylesheet" type="text/css" />
		<link href="favicon.ico" rel="shortcut icon" />
	</head>
	<body>
		<?php 

		
		echo $web;
		mysql_close();
		
		?>
	</body>
</html>


ukázka jedné funkce:
function story($id){
		  $dotaz = "SELECT * FROM `".DB_PREFIX."story` WHERE `ID` = '".$id."' ";
					  $vysledek = mysql_query($dotaz);
					  while ($radek = mysql_fetch_array($vysledek)) //Načte výsledný řádek do asociativního pole 
					   { mysql_query("UPDATE `".DB_PREFIX."story` SET `visit` = visit +1 WHERE `ID` = ".$id." "); 
					      $obsah[1] = getTemp("themes/"._THEMES."/sablony/clanek.html", array("nazev" => htmlspecialchars($radek['name_cs']), 
																		 "popis" => $radek['popis_cs'],
																		 "text" => htmlspecialchars($radek['text_cs']),
																		 "zdroj" => "Zdroj článku: ".htmlspecialchars($radek['zdroj']), 
																		 "napsal" => "Článek napsal: ", 
																		 "autor" => htmlspecialchars($radek['autor']), 
																		 "dne" => $radek['date'], 
																		 "print_img" => "<a href=\"modules/print/clanek.php?id_clanku=".$radek['ID']."\" target=\"_blank\">
								<img src=\"themes/"._THEMES."images/icon/print.gif\" alt=\"Tisknout článek\" style=\"float:right; margin-right:50px;\"/>
						    </a>", 
																		 "koment_upozorneni" => "Komentáře vlastní jejich autoři. Neodpovídáme za jejich obsah.",
																		 "komentare" => file_get_contents("../new_web/modules/komentare/index.php"),)); 
							$obsah[3] = htmlspecialchars($radek['name_cs']);					
return $obsah;							
							}
							
		}
Alphard_
Profil *
Princip je docela správný, začínají tam být náznaky MVC.
Jak to udělat lépe nelze říct několika slovy. Buď vylepšujte vás systém, tj. ze switch udělat pořádný router, akce oddělit od samostatných souborů, dát tomu nějaký rámec, chytřejší šablony, ..., nebo zkuste nějaký framework.
Tomashekk
Profil
Alphard:
udělat pořádný router, akce oddělit od samostatných souborů, dát tomu nějaký rámec, chytřejší šablony
co tímto myslíte přesněji?


framework jsem za prvé vůbec nepochopil a za druhé, chtěl bych vše udělat své... abych pravdu řekl, nikdy jsem nějak ani neřešil k čemu framework vůbec je
Alphard
Profil
Tomashekk:
co tímto myslíte přesněji?
To lze těžko stručně vysvětlit. Podívejte se trochu třeba na Nette (nebo jiný framework). I když ho nechcete používat, uvidíte MVC návrh a životní cyklus aplikace.

chtěl bych vše udělat své
Nebyl bych tak dogmatický, ale nejste s tímto názorem sám.
Tomashekk
Profil
Alphard:
Jak sleduji videa o framework, tak si říkám.. Nikdy nebudu schopen vše udělat sám. Rád bych nakonec framework využíval. Ovšem asi se nejdříve budu muset naučit OOP :( .. zvládám sotva základy C# které OOP využívá, tudíž nějaký základ mám, ale v PHP nezvládnu pomocí OOP ani blbý výpis stringu :( Takže asi se nejdřív musím naučit OOP a pak na framework
Tori
Profil
Tomashekk:
Měla jsem nedávno podobný dotaz a __construct mi poradil tenhle článek. Je to vysvětlení MVC frameworku na úplně jednoduchém nicméně kompletním příkladu, pochopila jsem z toho princip podstatně líp než z tutoriálu Nette (nebo možná zopakování jiným slovy pomohlo, nevím). Některé věci jsem si přepsala, ale kostru používám a teď když jsem si už zvykla, připadá mi to o dost přehlednější, než moje předchozí pokusy.
Tomashekk
Profil
Tori:
Děkuji za link. Letmo jsem na článek koukl a zase OOP :) .... Hold se ho musím asi naučit. O to to pro mne bude složitější.
Tomashekk
Profil
Alphard:
chytřejší šablony
Tím jste myslel co prosím? Takhle šablony jsem dělal poprvé. Tudíž prosím o vysvětlení či radu. Děkuji :)
Kcko
Profil
Tomashekk:
Pokud chceš dynamický title, můžeš použít i output funkce viz nedávné téma

Nette bych Ti zatím nedoporučoval, pro začátečníka to není vhodné, ty si tím akorát zamotáš hlavu a budes neštastný z OOP :-)
Alphard
Profil
Tomashekk:
„chytřejší šablony“
Tím jste myslel co prosím?
Já nevím, jak přesně je máte řešené teď, ale úvodní ukázka plnění šablony vypada docela ošklivě. Funkce jako htmlspecialchars() se obvykle řeší na úrovni šablon, do šablony by mělo jít předat celé pole/objekt, u vás $radek. Proč tam máte statické "napsal" => "Článek napsal: ", opravdu nevím. To jsou asi ty nejzákladnější věci.

Pak samozřejmě různá dědičnost šablon, podmínky, cykly apod.
Tomashekk
Profil
Kcko:
Díky za rady.. :)
Alphard:
Stále to nepobírám, hold jsem vždy měl s teorií problémy. :) ...
Jinak, mám tu vlákno ODKAZ a abych pravdu řekl, ani jedno z toho mi nepomohlo. Rád bych se naučil dělat weby v OOP a s pomocí modulu MVC ...
jsim
Profil
ale jak jinak se chceš naučit OOP, než studiem? Bez teorie to prostě nejde. OOP není jen naučení se syntaxe určitého jazyka a obalení funkcí do tříd ..
V tom vlákně jsem ti vypsal knihy, které by ti mohly pomoci s pochopením OO, nicméně jsi je asi ignoroval, protože teorie ti smrdí?
Tomashekk
Profil
jsim:
nee, tak jsem to nemyslel... Já sám vlastním nějaké knihy.. Já proti studiu nic nemám, ovšem to že mi odpoví že od toho jsou VŠ mi příjde na palici. Jako to abych se naučil OOP, znamená že musím jít na vejšku?
Jde o to, že mám OOP bez předchozích znalostí a pak PHP objektově orientované. Ovšem spousty věcí v tom nepobírám. Knihy co jsi mi dopořučil, sice zřejmě budou super, ovšem musím si je najít v ele. podobě.
Neber to hned, že jsem ignoroval tvůj příspěvek, ale naopak
jsim
Profil
Samo že výšku na to mít nemusíš, to je blbost ... pokud mi dáš email, knížky ti v ele. podobě pošlu.
Tomashekk
Profil
jsim:
super, budu velice rád...

tomas.kulhanek@mops.cz

Jde o to, že construct to podal tak, že pokud nemám vejšku, tak nebudu umět OOP (což sám vím že je blbost).. Nevím zda to tak myslel, ale to je jedno
jsim
Profil
nevím proč, ale nejde mi na to na tvůj mail poslat ... napiš mi na icq, které mám v profilu
natlaid
Profil *
Tady máš pár článků, nevím jestli ti helpnou:

Programujte.com - OOP v PHP
Živě.cz (Těch pár článků o OOP)
jarda0001
Profil *
jsim:
Ahoj, můžu taky poprosit o el. knihy? Díky jkratochvilj@seznam.cz .

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: