Autor Zpráva
Tomashekk
Profil
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
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
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
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
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
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
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
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
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
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
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
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
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
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%">&nbsp;</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>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
    </tr>
 {$kategorie}
  </table></div><div id="bottom"></div>

kategorie.html
   <tr>
      <td rowspan="2" align="center">&nbsp;</td>
      <td class="nazev_tem"><a href="?page=modules/forum/index&amp;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&amp;posts={$forum_last_post_topic_id}&amp;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
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
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
Tomashekk:
Můžeš, je to v tomto případě jedno, je to jen šablona ...
Tomashekk
Profil
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
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
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?

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0