Autor | Zpráva | ||
---|---|---|---|
Tomashekk Profil |
#1 · Zasláno: 24. 1. 2011, 17:39:02 · Upravil/a: Tomashekk
Mám jeden, šílenej soubor s výpisem fora, ovšem mne samotnému to příjde šílené, ale netuším jak to zjednodušit, našel by se někdo, kdo by mi poradil či ukázal jak na to? Tak i tak, bych se to musel naučit, jelikož zřejmě všechny mé kody jsou šílené :)
Má to cca 300 řádků, takže zde |
||
Kcko Profil |
#2 · Zasláno: 24. 1. 2011, 18:16:46 · Upravil/a: Kcko
Nic šíleného mi tam nepřipadá ... přeci jen ...
funkce do samostatného souboru jednotlivé bloky html kódu do šablon a pak Ti zbyde v podstatě jen selector / controller akcí dle toho si budeš do stránky tahat jednotlivé šablony. Mimo: mysql_query("DELETE FROM `".DB_PREFIX."forum_visit` WHERE `user` = '".$uzivatel."' AND `topic_id` = '".$post."' AND `forum_id` = '".$forum."'"); mysql_query("INSERT INTO `".DB_PREFIX."forum_visit` (`user`,`topic_id`,`last_visit`,`forum_id`) VALUES ('".$uzivatel."','".$post."','".date('Y-m-d H:i:s')."','".$forum."')"); Tyto 2 řádky bych přepsal na 1 a to ON DUPLICATE KEY |
||
Tomashekk Profil |
#3 · Zasláno: 24. 1. 2011, 18:19:58
Kcko:
> funkce do samostatného souboru > jednotlivé bloky html kódu do šablon a pak Ti zbyde v podstatě jen selector / controller akcí dle toho si budeš do stránky tahat jednotlivé šablony. tohle jsem nějak nepobral :( |
||
Kcko Profil |
#4 · Zasláno: 24. 1. 2011, 18:23:38
Máš tam např.
if($_GET['action'] == "edit") tak něco switch ($action){ case 'edit': $data = nejakaData(); // ziskam nejaka data z nejake funkce nebo bloku funkci - metod $template = getTemplate("naka-sablona.php", $data); // ziskam sablonu do ktere data dosadim, kde se nahradi nebo vypisi echo $template; // vypisu sablonu break; } Velmi zjednoduššeně takto, at ta logika kódu a vzhledu má nějaký směr. A pak víš, kde co najdeš a nemáš vše vyprsknuto v 1 souboru. |
||
Tomashekk Profil |
#5 · Zasláno: 24. 1. 2011, 18:28:09
Kcko:
mohu poprosit o nejaky hotovy priklad ci jakoukoliv ukazku? v tomto smeru jsem na tom hodne spatne :( ... Kdyz jsem se na tohle ted koukal, tak mi to prislo o hodne prehlednejsi => rad bych to pochopil a naucil se takto pracovat |
||
Kcko Profil |
#6 · Zasláno: 24. 1. 2011, 18:33:16
Tomashekk:
Jakou ukázku? ;-) Zkus na netu pohledat MVC a PHP templates. Jinak kousek z mojí dílny, ale není to čisté MVC. Jakýs takýs rozhodovač public function selector($url) { switch($url) { case 'zakladni-informace': default: Storage::setHeadline($this->player_info['jmeno'].' - základní informace '); Storage::setTitle($this->player_info['jmeno'].' - základní informace '); echo $this->showBasicInfo(); break; case 'prestupy': Storage::setHeadline($this->player_info['jmeno'].' - přestupy '); Storage::setTitle($this->player_info['jmeno'].' - přestupy '); $transfers = new Transfers; $transfers->setPlayer($this->player_info['ID']); echo $transfers->toHtml(); break; case 'clanky': Storage::setHeadline($this->player_info['jmeno'].' - články '); Storage::setTitle($this->player_info['jmeno'].' - články '); $articles = new ArticlesPlayer; $articles->setHomepage(false); $articles->setPlayer($this->player_info['ID']); echo $articles->toHtml(false); break; case 'souteze': Storage::setHeadline($this->player_info['jmeno'].' - soutěže '); Storage::setTitle($this->player_info['jmeno'].' - soutěže '); echo $this->getCompets(); break; case 'archiv-aktualit': Storage::setHeadline($this->player_info['jmeno'].' - archiv aktualit '); Storage::setTitle($this->player_info['jmeno'].' - archiv aktualit '); $press = new Press; $press->preparePlayerNewsArchiv($this->player_info['ID']); echo $press->toHtmlArchiv('player'); break; } } A metoda která nastaví šablonu a data public function showBasicInfo($link_to_profil = false) { $tpl = new Template('./tpl/player-basic-info.php'); $tpl->set('r', $this->player_info, true); $tpl->set('link_to_profil', $link_to_profil); return $tpl->fetch(); } |
||
Tomashekk Profil |
#7 · Zasláno: 24. 1. 2011, 18:35:08
Kcko:
MVC jsem už hledal a četl o něm na wiki, ovšem moc mi to neřeklo jak pracovat.. taky už jsem pochopil proč jsem trochu zaostával u prvního vysvětlování.. s OOP bohužel zatím nejsem kamarád. Mám tu nějaké knížky ovšem z těch jsem zatím nic nepochopil... No, bude to oříšek :( |
||
Kcko Profil |
#8 · Zasláno: 24. 1. 2011, 18:42:14
Tomashekk:
Není to tak hrozné jak se zdá :-). Zkus si napsat nějakou malou třídu ... Můžeš začít pomalu, oddělovat HTML od PHP, třeba takto: <?php function getTemp($template, $data) { $template = file_get_contents($template); $pattern[] = '~{\$(.+?)}~ei'; $replacement[] = "\$data['\\1']"; $template = preg_replace($pattern, $replacement, $template); return $template; } $sablona = null; foreach ( array(1, 2) as $k ) { $sablona .= getTemp("radek.html", array("hrac" => "Franta", "vek" => 26) ); } echo getTemp( "tabulka.html", array("radek" => $sablona) ); ?> |
||
Tomashekk Profil |
#9 · Zasláno: 24. 1. 2011, 18:51:29
Kcko:
jakš takš chápu co to dělá .) .. ale netuším co v podstatě je v těch html souborech... zda-li bys byl ochoten mne trochu nakopnout.. budu velice rád |
||
Kcko Profil |
#10 · Zasláno: 24. 1. 2011, 18:53:46
radek.html
<tr><td>{$hrac}</td><td>{$vek}</td> tabulka.html <table border="1"> {$radek} </table> Ale netvrdím, že je to 100% ono, jen Ti ukazuji, že se to takhle dá dělat taky. |
||
Tomashekk Profil |
#11 · Zasláno: 24. 1. 2011, 18:58:28
Kcko:
jo, ted jsem to asi pochopil .. ovšem zase něco nechápu.. jak bych tam nacpal ten svůj kod.. jak bych to celé udělal.... to bych pro každej case měl extra šablonu ne? To by pro mne mohl být i pěknej problém, jelikož na hostingu kde máme webovky jsem omezenej i počtem souborů |
||
Kcko Profil |
#12 · Zasláno: 24. 1. 2011, 19:00:44
Tomashekk:
Pokud je tvůj hosting limitován určitým množstvím souborů tak ihned pryč. Šablon bys měl tolik, aby to bylo variabilní. Pokud bys měl např. tabulkový výpis tak bys mohl mít šablony 2 (1 pro řádek tabulky a druhý pro samotnou tabulku ..) Zkus si udělat jednoduchý příklad mimo ... |
||
Tomashekk Profil |
#13 · Zasláno: 24. 1. 2011, 19:03:52
Kcko:
ono je to problém. platíme celkem málo a hlavně máme i záložní mail server... a nejhorší je, jako být po mém, najdu jiný hosting a hotovo, ovšem je to na otce a ten to prý už řešit nebude a nechce o tom slyšet.. takže jinak řečeno, na těchto dvou doménách a dvojím hostingu jsem limitován počtem souborů. Takže toto, se mohu učit na lokále jedině.. |
||
Tomashekk Profil |
#14 · Zasláno: 25. 1. 2011, 13:18:48 · Upravil/a: Tomashekk
Kcko:
Ok, zrovna jsem si to nějak prohrabal.... s hostingem nebude az tak velkej problem.. mame to na 8000 souboru.. coz bych nemel presahnout, ale stejne... jinak, toto by se dalo povazovat dle tveho na sablonu k foru ne? hlavni.html <div id="top"></div><div id="middle"> <table width="100%" border="0" cellspacing="1" cellpadding="2"> <tr> <td width="5%"> </td> <td width="40%" class="tucne">Název</td> <td width="10%" class="tucne">Témat</td> <td width="10%" class="tucne">Příspěvků</td> <td width="20%" class="tucne">Poslední příspěvek</td> </tr> <tr> <td colspan="2"><h3 style="padding-left:10px;">{$cat_title}</h3></td> <td> </td> <td> </td> <td> </td> </tr> {$kategorie} </table></div><div id="bottom"></div> kategorie.html <tr> <td rowspan="2" align="center"> </td> <td class="nazev_tem"><a href="?page=modules/forum/index&forum={$forum_id}">{$forum_name}</a></td> <td rowspan="2">{$forum_topics_count}</td> <td rowspan="2" >{$forum_posts_count}</td> <td rowspan="2" ><a href="?page=modules/forum/index&posts={$forum_last_post_topic_id}&forum={$forum_id}#{forum_last_post_id}">{$forum_topic_last_post_time}</a></td> </tr> <tr> <td class="kurziva">{$forum_popis}</td> </tr> |
||
Kcko Profil |
#15 · Zasláno: 25. 1. 2011, 14:09:40
Tomashekk:
JJ to vypadá mnohem líp a i Tobě se to musí líbít více a lépe by ses pak měl orientovat, ne? |
||
Tomashekk Profil |
#16 · Zasláno: 25. 1. 2011, 22:39:45
Kcko:
ovšem, kdybych to nechtěl ukládat jako html, tak to mohu jentak přepsat na např. kategorie.style či theme nebo něco jiného ne? |
||
Kcko Profil |
#17 · Zasláno: 25. 1. 2011, 23:03:00
Tomashekk:
Můžeš, je to v tomto případě jedno, je to jen šablona ... |
||
Tomashekk Profil |
#18 · Zasláno: 25. 1. 2011, 23:18:57
Kcko:
super.. a jeste jedna vec.. kdyz je to napriklad menu... mam to rozdelene do "bloku" jeden blok je hlavni menu a obsahuje nejake polozky, druhy blok (pod nim), je napr. prihlaseni, apod... tohoto bych docilil jak? |
||
Kcko Profil |
#19 · Zasláno: 25. 1. 2011, 23:29:21
obecná šablona bloku
blok.html ============== <div class="{$blok}">{$obsah}</div> a v promenne $obsah muze byt zase jina sablona, ktera se sklada z dalsich podsablon ... (UL - LI, vypis tabulky ...cokoliv..) Nehledej v tom složitosti, prostě si HTML rozsekat do tolika šablon, aby se Ti s tím dobře pracovalo a bylo to variabilní. |
||
Tomashekk Profil |
#20 · Zasláno: 26. 1. 2011, 00:07:35 · Upravil/a: Tomashekk
Kcko:
Tak jsem to spáchal takto: <?php function getTemp($template, $data) { $template = file_get_contents($template); $pattern[] = '~{\$(.+?)}~ei'; $replacement[] = "\$data['\\1']"; $template = preg_replace($pattern, $replacement, $template); return $template; } $dotaz = "SELECT * FROM `cms_menu` ORDER BY `rank` ASC "; $vysledek = mysql_query($dotaz) or die ("SQL dotaz nešlo provést"); while($radek = mysql_fetch_array($vysledek)) { $podmenu = null; $dotaz2 = "SELECT * FROM `cms_menu_sub` WHERE `position` ='".$radek['ID']."' ORDER BY `rank` ASC"; $vysledek2 = mysql_query($dotaz2) or die ("SQL dotaz nešlo provést"); while($radek2 = mysql_fetch_array($vysledek2)) { $podmenu .= getTemp("podmenu.html", array("podmenu_link" => $radek2['site'], "podmenu_jmeno" => $radek2['name_cz'])); } echo getTemp("menu.html", array("menu_jmeno" =>$radek['name_cz'], "podmenu" => $podmenu )); } ?> ovšem, jak udělat to, aby ten html soubor neobsahoval nic jineho nez styl? co kdyz tam potrebuji udelat neco jako napr. v dane podmince ten radek zvyraznit? |
||
Časová prodleva: 11 let
|
0