Stránka 1 z 1

Smarty - Šablonovací systém

Napsal: pát 19. úno 2010, 20:38
od KapaCZ
Po diskuzi s uživatelem NEONET mi byl doporučen tento sytém. Avšak mi to přijde jako tank na mouchu, jelikož je to podle mně moc složité a má to moc funkcí na RS pro blog. Pokud však jiný není, tak bych byl rád za nějaké návody. (V CZ/SK by byly lepší) :)

Re: Smarty - Šablonovací systém

Napsal: ned 21. úno 2010, 18:05
od NEONET
prvni odkaz co vyplivl google po dotazu jak na smarty - http://www.abclinuxu.cz/clanky/navody/s ... tem-1-uvod

Re: Smarty - Šablonovací systém

Napsal: ned 28. úno 2010, 09:28
od KapaCZ
Mám problém a to s opakováním kodu.
Zde jsme se dočetl že se dá použít {foreach}{/foreach} bohužel mě to nefunguje.
http://www.abclinuxu.cz/clanky/navody/s ... e-funkce-1

Kód: Vybrat vše

 {foreach from="$akt_" item="datum" key="text"}                       
  <li><b class=\"b\">{$datum}</b>&nbsp;{$text}</li>
  {/foreach}

Kód: Vybrat vše

$RiKap_aktuality = mysql_fetch_array(mysql_query("SELECT * FROM RiKap_aktuality ORDER BY id DESC LIMIT 0, 5;"));
$smarty->assign("akt_",$RiKap_aktuality);
Vypisuje to:

Kód: Vybrat vše

Array 0

Re: Smarty - Šablonovací systém

Napsal: ned 28. úno 2010, 18:48
od NEONET

Kód: Vybrat vše

 {foreach from=$akt1 item=datum}                       
  <li><b class="b">{$akt1}</b></li>
  {/foreach}

Kód: Vybrat vše

$RiKap_aktuality = mysql_fetch_array(mysql_query("SELECT * FROM RiKap_aktuality ORDER BY id DESC LIMIT 0, 5;"));
$smarty->assign("akt1",$RiKap_aktuality);


nvm, mozna ti to pomuze :D


edit// ja to mam reseno takto:

trida pro cteni novinek

Kód: Vybrat vše

<?php
/*
 * Obsahuje tridu clsNovinky<br>
 * administrace novinek<br>
 * pridavani, editace, mazani, uprava atd.
 * 
 * @author Milan Sivak
 * @copyright DATRON, a.s.
 * @package class.Novinky
 *
 */

class clsNovinky
{
  var $db;
  
  function clsNovinky($db)
  {
    $this->db = $db;
  }
  
  /**
   * Pracuje s obsahem tabulky TAB_NEWS
   * 
   * @param array [$sloupce] = array("*")		Urcuje jake sloupce chceme vracet z tabulky
   * @param int [$limitKolik] = -1					Nastavuje limit vracenych zaznamu (nutno nastavit, aby se nevracelo vse)	
   * @param int [$limitOd] = -1							Nastavuje limit od jakeho zaznamu zobrazit (vhodne pro strankovani)   
   * @param string [$where] = false					Podminkuje vyber, napr. pokud chceme zobrazit jen novinky stare 5 min
   * @param string [$order] = "DESC"				Vzestupne, sestupne razeni podle "datum", moznosti: ASC / DESC
   * @return array mixed
   */
  public function Get($sloupce=array("*"), $limitKolik=-1, $limitOd=-1, $where=false, $order="DESC")
  {
    $sql = "SELECT ".implode(", ", $sloupce).", UNIX_TIMESTAMP(datum) as datum_unix
    				FROM `".TAB_NEWS."`";
    
    if ($where) 
      $sql .= " WHERE $where";
       
    $sql .= " ORDER BY `".TAB_NEWS."`.`datum` $order";     
       
    if ($limitOd > -1 and $limitKolik > -1)
      $sql .= " LIMIT $limitOd, $limitKolik";    
    
    return $this->db->QueryToArray($sql);
  }
  
  
  /**
   * Vklada novinku
   * 
   * @param string $nadpis
   * @param string $obsah
   * @param date("Y/m/d H:i:s") [$datum] = false Pokud neni vyplneno automaticky se dosadi aktualni
   * @return int id novinky nebo -1 pri chybe
   */
  public function Add($nadpis, $obsah, $datum=false)
  {
    if (!$datum) $datum = date("Y/m/d H:i:s");
    
    $insertData = array(
      "nadpis" => $nadpis,
      "obsah" => $obsah,
      "datum" => $datum
    ); 
    
    if (!$this->db->Insert(TAB_NEWS, $insertData))
      return -1;
    
    return $this->db->InsertId();
  }
 
  
  /**
   * Maze novinku
   * 
   * @param int $id
   * @return int result
   */
  public function Delete($id)
  {
    return $this->db->Delete(TAB_NEWS, " id_news = $id ");
  }
  
  /**
   * Upravuje novinku
   * 
   * @param int $id
   * @param array $postdata 	Vhodne pouziti: poslat cely $_POST
   * @return int result
   */
  public function Edit($id, $postdata)
  {
    $updateData = array(
      "obsah" => $postdata['obsah'], //vytahuje data z $_POST ci jineho pole
      "nadpis" => $postdata['nadpisek']
    );
    
    return $this->db->Update(TAB_NEWS, $updateData, " id_news = $id ");    
  }
  
}
  
?>
tady uvodni stranka

Kód: Vybrat vše

<?php
if ($_POST)
{
 if ($_POST['frm_login'])
 {
   $zakladni_udaje = true;
   $seznam_chyb = array();
   
   $jmeno = $_POST['jmeno'];
   $heslo = $_POST['heslo'];
   
   if ($heslo == "" or $jmeno == "")
   {
     $zakladni_udaje = false;
     $seznam_chyb = array_merge($seznam_chyb, array("Vyplňte prosím jméno i heslo"));
   }
   
   if ($zakladni_udaje)
    if (!$clsUzivatel->LoginValidate($jmeno, $heslo))
    {
       $zakladni_udaje = false;
       $seznam_chyb = array_merge($seznam_chyb, array("Chybně zadané přihlašovací údaje"));
    }
    
   if ($zakladni_udaje) //Vsechno je ok..
   {
     header("Location: home.html");
     return;
   }
 }
}
$novinky = $clsNovinky->Get(array("nadpis", "obsah"), 5);
$smarty->assign("novinky", $novinky);
$smarty->assign("chyby", $seznam_chyb);
$smarty->assign('title', "blablabla");

//POSKLADANI STRANKY
include IP.'/page_php/hlavicka.php'; //vyzaduje $smarty->assign('title', 'titulek');
$smarty->display('home'); //aktualni template pro tento PHP
include IP.'/page_php/menu.php'; 
include IP.'/page_php/paticka.php';
?>

a tady template pro uvod

Kód: Vybrat vše

			<h1 class="ir">
				<span>blablabla</span>
			</h1>
			
			<p class="exc">
				blablablablablablablabla
			</p>
			
			{if $chyby}
			<p>
      	<ul style="color: red;">
        {foreach from=$chyby item=chyba}
        	<li>{$chyba}</li>
        {/foreach}
        </ul>
			</p>
			{/if}
			
			<div id="boxes">
				<div id="left_box">
					<strong>blablabla</strong>
					<a href="objednavka.html" class="button">Objednat</a>
				</div>
				
				
  	{if !$prihlasen}
  			<div id="right_box">
 					<strong>blablablablabla</strong>
 					
					<form action="{$smarty.server.REQUEST_URI|amp}" method="post">
   					<fieldset>
      				<legend>Login</legend>
			        
			        <p>
			          <input type="text" id="jmeno" name="jmeno" value="jméno" onfocus="this.value=''" maxlength="100" />
			          <label for="jmeno">Jméno</label>
			        </p>
			        
			        <p>
			          <input type="password" id="heslo" name="heslo" value="heslo" onfocus="this.value=''"  maxlength="100" />
			          <label for="heslo">Heslo</label>
			        </p>
        
       				<input type="submit" class="login" name="Odeslat" value="Přihlásit" />
       				<input type="hidden" name="frm_login" value="1" />
      			</fieldset>
    			</form>
  			</div>
  		{else}	
	  		<div id="right_box2">
		  		<p>
		  			Jste přihlášen jako {$uzivatel.username}
						<br />
						<a href="admin.html"><input type="button" value="Administrace"></a>
						<a href="odhlasit.html"><input type="button" value="Odhlásit"></a>
					</p>
				</div>
		{/if}
  		</div>
  		<h3>Novinky</h3>
			{if $novinky}
      	<ul>
        {foreach from=$novinky item=novinka}
          <li style="color: green; font-size: 24px;">{$novinka.nadpis}</li>
        	<li style="color: black; background-image: none;">{$novinka.obsah}</li>
        	<li style="color: gray; font-size: 10px; background-image: none;">{$novinka.datum_unix|date_format:'%d.%m.%y - %T'}</li>
        {/foreach}
        </ul>
			{/if}

Re: Smarty - Šablonovací systém

Napsal: ned 28. úno 2010, 19:35
od KapaCZ
Povedlo se mi to upravit:

Kód: Vybrat vše

  {foreach from=$akt_ item=text key=datum}                       
  <li><b class="b">{$datum}</b>&nbsp;{$text}</li>
  {/foreach}

Kód: Vybrat vše

$RiKap_aktuality = mysql_fetch_array(mysql_query("SELECT * FROM RiKap_aktuality ORDER BY id DESC LIMIT 0, 5;"));
$smarty->assign("akt_",$RiKap_aktuality);
Vypisuje to:

Obrázek

Re: Smarty - Šablonovací systém

Napsal: ned 28. úno 2010, 21:54
od arxeiss
Smarty nepoužívám a nechápu, ale to co vidím je normální chování mysql_fetch_array. Ono vrací jakoby vše 2x. Vlastně vrátí pole s prvky id, text, datum, 0, 1,2 kde 0 a id je to samé. Takže si napiš nad to cyklus, který ti za to pole dosadí jenom ty jedny prvky

Re: Smarty - Šablonovací systém

Napsal: pon 1. bře 2010, 07:55
od KapaCZ
Upravil jsem SQL dotaz:

Kód: Vybrat vše

 $RiKap_aktuality = mysql_fetch_array(mysql_query("SELECT datum, text FROM RiKap_aktuality ORDER BY id DESC LIMIT 0, 5;"));
Vypisuje to:
Obrázek

Re: Smarty - Šablonovací systém

Napsal: pon 1. bře 2010, 18:58
od arxeiss
No, to akorát to že nevybíráš ID, ale stále jsi neudělal to co jsem psal já, to že ti to vrátí 2x je normální...
dej tam cyklus

Kód: Vybrat vše

$sql = mysql_fetch_array(mysql_query($dotaz));
for($i=0; $i < count($sql); $i++){
  echo $sql[$i]['datum'].$sql[$i]['text'];
}
Edit:\\ Upraven skript

Re: Smarty - Šablonovací systém

Napsal: pon 1. bře 2010, 20:21
od KapaCZ
vůbec nic to nevyřeli je to úplně stejný

Re: Smarty - Šablonovací systém

Napsal: pon 1. bře 2010, 20:23
od arxeiss
Divné, já to používám a spokojeně :)
Takže pokud to tobě nejede, tak musí být chyba někde v tom SMARTy a to neznám