Autor Zpráva
maestorm
Profil
Dobrý podvečer,
dělám na nové verzi webu: http://dmd-ucebnipomucky.cz/new_web/index.html
a potřeboval bych poradit s tím, jak zjednodušit svou práci, kdybych vytvořil php šablonu/ny nejen externí hlavičku a patičku, ale myslím i "Soubory magnetických karet" udělat to tak, aby se mi text a obrázky jednotlivých produktů načítaly z externího umístění... Nějaké nápady, návrhy? Zkoušel jsem najít o php šablonách co nejvíce (v češtině), ale narazil jsem jen na: http://www.tvorba-webu.cz/php/sablony.php a to jsem buď špatně pochopil, nebo nevím asi někde dělám chybu, ale nefunguje mi to viz.: http://dmd-ucebnipomucky.cz/new_web/sets/index.php
Předem Vám všem děkuji za případnou pomoc...
Alphard
Profil
Třeba šablony z Nette http://doc.nette.org/cs/jak-pouzit-sablony-samostatne (Nette protože jste chtěl českou dokumentaci).
Přečtení toho odkázaného článku samozřejmě nestačí, ale můžete si na to udělat názor.
maestorm
Profil
jednodušší cesta by tu nebyla? s nette neumím...
Alphard
Profil
[#3]
Nette není nutné, lze to použít samostatně, je to tam napsané.
A jednodušší cesta je relativní, čím šikovnější nástroj chcete, tím složitější je učení. Jestli vám stačí dosazení pár proměnných, tak to lze samozřejmě jednodušeji, ale to jste nenapsal.
Pak znám ještě Smarty, ale jednodušší rozhodně nejsou. Třeba poradí někdo jiný.
maestorm
Profil
znám oba, ale nenašel jsem si doposud čas se je učit ;-) a myslel jsem, že bude stačit něco vy smyslu vložit do stránky <?php include_once("head.php"); ?> a <?php include_once("bottom.php"); ?> a a hlavička a patička bude obstarána a podobně bych se snažil vypracovat ty jednotlivé položky...
Alphard
Profil
Nejjednodušší cesta by asi byla připravit si externě ty texty a místo proměnných tam dát nějaké identifikátory {#jmeno}.
Potom na potřebném místě načíst šablonu, přes str_replace() dosadit hodnotu a vypsat.
Zase na druhou stranu, když se naučíte nějaký rozšířený systém, může se to někdy hodit. :-)
maestorm
Profil
...s tím naučením systému rozhodně souhlasím, ale na tento projekt nemám neomezeně času a tedy nemám čas plýtvat čas ;-) i když s Vámi souhlasím a vaší radu ohledně str_replace() bych Vás rád poprosil o rozvedení, případně nějaký odkaz ze kterého bych pochopil, jak jednotlivé stránky (v kódu) mají vypadat... předem děkuji (na PHP také nejsem zrovna expert... jak vidíte, tedy zatím ne ;-) )
AM_
Profil
[#1] maestorm
máš nějakou syntaktickou chybu v kódu, proto ti to nefunguje... tu jsi jistě schopen odhalit, ne? zřejmě hned na první řádce kódu. Jinak docela pěkný šablonový systém je také Smarty, ale pokud nechceš šablonový systém, ale vlastně jen chytré skládání PHP kódu pomocí proměnných a include, tak postačí opravit tu syntaktickou chybu...
Alphard
Profil
Velice jednoduše:
template.php:
<?php
function insertTemplate($temp, $in = false)
{
  $content = file_get_contents($temp);
  if ($in)
  {
    foreach ($in as $k => $v)
    {
      $content = str_replace("{#$k}", $v, $content);
    }
  }
  return $content;
}

index.php:
<?php
include "template.php";

$t = array();
$t['nadpis'] = "Jednoduchý templatovací systém";
$t['autor'] = "Alphard";
$t['obsah'] = 'Ukázka, jak by mohl vypadat jednoduchý templatovací systém s použitím funkce <a href="http://cz.php.net/manual/en/function.str-replace.php">str_replace()</a>.';

$h = array();
$h['title'] = "Template system";

echo insertTemplate('head.html', $h);
echo insertTemplate('clanek.html', $t);
echo insertTemplate('foot.html');

head.html:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
  <meta name="generator" content="PSPad editor, www.pspad.com">
  <title>{#title}</title>
  </head>
  <body>

clanek.html:
<div id="left-block">
  <h1>{#nadpis}</h1>
  <p>Autor: <b>{#autor}</b></p>
  <div id="clanek">{#obsah}</div>
</div>

foot.html:
  </body>
</html>

A výsledek po načtení index.php vypadá takhle:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
  <meta name="generator" content="PSPad editor, www.pspad.com">
  <title>Template system</title>
  </head>
  <body>
  <div id="left-block">
  <h1>Jednoduchý templatovací systém</h1>
  <p>Autor: <b>Alphard</b></p>
  <div id="clanek">Ukázka, jak by mohl vypadat jednoduchý templatovací systém s použitím funkce <a href="http://cz.php.net/manual/en/function.str-replace.php">str_replace()</a>.</div>
</div>
  </body>
</html>

Další možná vylepšení:
4. řádek v template.php by se mohl upravit na
$content = file_get_contents($temp.".html");
Potom by stačilo volat echo insertTemplate('clanek', $t);.
Takhle by šlo pokračovat, ale stále víc a víc by to vedlo k něčemu velkému hotovému. :-) Tenhle systém třeba neumí procházet pole cyklem, používat různé filty apod.
maestorm
Profil
děkuji zkusím to aplikovat na můj problém ... zítra ;-) a děkuji Vám Alpharde ;-) a přeji dobrou noc
Thak
Profil
Nechci na to zakládat novej thread.

Používám PHP šablonu tzn. index.php, kde je include top, body, bottom.
V body potom volám a testuji jednotlivé stránky tzn. potom volám stránky v menu odkazy např. "/index.php?page=uvod".
Ale nemůžu si pomoct, ale příjde mi, že se nenačítá po kliku v menu jen stránka v body, ale že se mi refreshne celá stránka
v browseru. Příjde mi to divný.. myslel jsem, že se mi z menu načte vždy jen vnitřek do body a odstatní věci jako hlavička apod. zůstanou načtené. Nebo je to běžná věc a pro načítání obsahu bez refreshe bych musel použít např. AJAX ?
Pro mne je to znovunačtení nepohodlné v tom, že bych chtěl mít v hlavičce Flash hlavičku a při kliknutí na odkaz se mi pak flash animace vždycky načte znovu, což je pěkná otrava.

Díky
xmark
Profil
Thak:
. myslel jsem, že se mi z menu načte vždy jen vnitřek do body a odstatní věci jako hlavička apod. zůstanou načtené. Nebo je to běžná věc a pro načítání obsahu bez refreshe bych musel použít např. AJAX ?

include (stejně jako každé jiné php) probíhá na serveru a do prohlížeže ti odchází už kompletně "sešroubovaná" stránka. Takže myslels špatně. Zmíněný ajax by se opravdu choval tak, jak předpokládáš.

A příště si radši založ své vlákno.
Thak
Profil
Děkuju za pomoc.
maestorm
Profil
...zkusím Nette ;-) (před pár vteřinami jsem ho (podle všeho) úspěšně nainstaloval... takže Vám všem děkuji za rady a kdyby mi to nešlo s Nette pokusím se zvolit výše uvedený postup...

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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