Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Problem]Parser
Forum PHP.pl > Forum > Przedszkole
jozek
Witam
Mam taki system szablonów:
klasa.php
  1. <?php
  2. ini_set('display_errors', true);
  3. class Erathia {
  4. private $table_users;
  5. public $file_string;
  6. public $root_dir;
  7. public $output; //zmienna
  8. public function __construct($table1){
  9. $this->table_users = $table1;
  10. }
  11. public function newLanguages($nazwa){
  12. if (!isset($_SESSION['jezyk'])) {
  13. $_SESSION['jezyk'] = "pl";
  14. }
  15. $lang_session = $_SESSION['jezyk'];
  16. require ("./languages/".$lang_session."/".$nazwa.".php"); //includuje dany jezyk
  17. }
  18. public function pointLang($name){
  19. if (isset($lang[$name])) {
  20. return $lang[$name];
  21. } else {
  22. echo 'Brak przypisanego langu do zmienej $lang['.$name.']';
  23. }
  24. }
  25. public function newTemplates($templateFile){
  26. /*    global $config;
  27.     $this->root_dir = './templates/'.$config['template'].'/';
  28.     $polaczenie = $this->root_dir.$name;
  29.     $this->file_string = file_get_contents($polaczenie);
  30.     return $name;
  31. */
  32. $this->output=file_get_contents('templates/1/'.$templateFile) or die('Error #001, plik: '.$templateFile.' nie zostal odnaleziony na serwerze! Prosze zglosic ten problem do administratora.');
  33.  
  34.    }
  35.    
  36.  
  37. public function pointTemplates($strings = array()) {
  38. /*        {
  39.                 foreach($strings as $tag => $replace)
  40.                 {
  41.                    $this->file_string = str_replace('{' . $tag . '}', $replace, $this->file_string);
  42.                 }
  43.  
  44.                 return true;
  45.         }
  46. */
  47. if(count($strings)>0){
  48.  
  49.                 foreach($strings as $tag=>$data){
  50.                        $this->output=str_replace('{'.$tag.'}',$data,$this->output);
  51.                 }
  52.              } else {
  53.                   die('Error #002: Nie znaleziono tresci do podmiany blokow - prosze skontaktowac sie z administratorem.');
  54.              }
  55.              
  56. }
  57. public function viewTemplates(){
  58.    return $this->output;
  59. }
  60.  
  61. }
  62. ?>


przyklad.php
  1. <?php
  2. include_once('klasa.php');
  3. $engine = new Erathia('players');
  4. $engine->newTemplates('przyklad.php');
  5.  
  6. $sql = mysql_connect('localhost', 'root', 'lol');
  7. mysql_select_db('black');
  8. $pytanie5 = 'SELECT id FROM `accounts` ';
  9. $idzapytania3 = mysql_query($pytanie5);
  10. $n=0;
  11. while ($wiersz = mysql_fetch_array($idzapytania3))
  12.   {
  13.       $newstitle[$n] = $wiersz[0];
  14.       $n++;
  15.   }
  16.  
  17. $engine->pointTemplates(array(
  18.                'witaj' => 'siemka'));            
  19. echo $engine->viewTemplates();
  20. ?>

I templates/1/przyklad.php :
  1. <?php
  2. Witam<br />
  3. {witaj}
  4. ?>

I ładnie działa.
Lecz co jeśli chciałbym pobrać rekordy z bazy i je wyświetlić?
Proszę o pomoc!
Bo piszę własny mini cms i brakuje pomysłu na system szybkiej wymiany szablonów dry.gif
dark_root
$zapytanie2 = "SELECT * FROM RODZAJ_CEGŁY ORDER BY id ASC";
$wykonaj2 = mysql_query ($zapytanie2);
echo "<select name="rodzaj_cegly_id">";
while($wiersz2=mysql_fetch_array ($wykonaj2)) {
echo "<option>".$wiersz2['id']."</option>";
}
echo "</select>";
jozek
  1. <?php
  2. $engine->pointTemplates(array(
  3.                'witaj' => 'siemka'));
  4. ?>

Chciałbym do tego z mysql pobrać, by np stworzyć jakoś wyświetlanie newsów?

I mam dwa pytania.. Jakie polecacie łatwe i dobre systemy szablonów?
By łatwo dało się zrobić na nich cms?
uirapuru
do tej pory spotykalem sie z dobrymi opiniami nt. Smarty...
jozek
No czytałem tutoriale ale chyba trudno tam się przekazuje dane?
A co wy na taki sposób:
np. artykuly.php
  1. <?php
  2.  
  3.  
  4. function przyklad_1()
  5. {
  6.     $zapytanie="SELECT `id`, `email`, `key` FROM `accounts`";
  7.     polacz();
  8.     $zapytanie=mysql_query($zapytanie);
  9.     if(!$zapytanie)
  10.     {
  11.         echo 'Wystąpił problem z pobraniem listy  z bazy danych';
  12.     }
  13.     $ile=mysql_num_rows($zapytanie);
  14.     if($ile == 0)
  15.     {
  16.         echo 'Nie ma żadanych ..';
  17.     }
  18.     else
  19.     {
  20.         while($row=mysql_fetch_row($zapytanie))
  21.         {
  22.             $id=$row[0];
  23.             $nazwa=$row[1];
  24.             $opis=$row[2];
  25.             echo '<p><a href="'.$nazwa.'">'.$nazwa.'</a><br />'.$opis.'</p>';
  26.         }
  27.     }
  28.     rozlacz();
  29. }
  30.  
  31. include 'szablony/artykuly.html';    
  32. ?>


szablony/artykuly.html:
  1. <h1 class="title">Przyklad</h1>
  2. <br />
  3. <? wyswietl(przyklad_1()); ?>
  4. <hr>


Dobry sposób do cms?

sru za dubla..

zrobiłem to tak:
menu.php
  1. <?php
  2. function nawigacja()
  3. {
  4.  
  5.     $zapytanie = "SELECT * FROM `menus`";
  6.     polacz();
  7.     $zapytanie = mysql_query($zapytanie);
  8.     if(!$zapytanie)
  9.     {
  10.         echo 'nie można pobrać elementów z nawigacji';
  11.     }
  12.     $ile = mysql_num_rows($zapytanie);
  13.     if($ile == 0)
  14.     {
  15.         echo 'nie ma elementów w nawigacji';
  16.     }
  17.     while($row=mysql_fetch_row($zapytanie))
  18.     {
  19.         $id = $row[0];
  20.         $tytul = $row[1];
  21.         $adres = $row[2];
  22.         echo '<dt><a href="'.$adres.'" title="'.$tytul.'">'.$tytul.'</a></dt>';
  23.     }
  24.     rozlacz();
  25. }
  26.    include 'szablony/index.html';
  27. ?>

szablony/index.html:
  1. <? nawigacja(); ?>

I działa dobrze ( mam zamiar zrobić tak cały cms. Co wy na takie rozwiązanie?).
Lecz gdy robię na stronie dwa razy wyświetlanie tego:
<? nawigacja('prawe'); ?>
To już błąd xampp leci:
Fatal error: Cannot redeclare class DB_Error in C:\Programy\xampp\php\PEAR\DB.php on line 974

Zna może ktoś przyczynę i rozwiązanie?
Zyx
Jak dołączasz tę samą klasę parokrotnie, to się nie dziw, że takie błędy Ci wyskakują. A czemu tak się dzieje, to nie wiem, bo nie podałeś całego kodu.

Sposób, który zaproponowałeś, nie jest do końca systemem szablonów. Niby masz tam jakieś szablony, ale i tak połowę HTML-a generujesz ręcznie w kodzie modułu. Naprawdę, nie wiem, co jest trudnego w przekazywaniu danych do systemu szablonów takiego, jak Smarty. Skąd ty wziąłeś takie informacje? $tpl->assign('nazwa', 'wartosc') jest trudne? Jeśli szukasz informacji o systemach szablonów, to było tych tematów od groma:

http://phpedia.pl/wiki/Systemy_szablonów
http://www.zyxist.com/pokaz.php/uzyteczne_systemy_szablonow
http://www.zyxist.com/pokaz.php/zbior_uzyt...ch_narzedzi_php
http://pornel.net/szablony
jozek
No dobra a taki system:
  1. <?php
  2. /*
  3.     @ System szablonów
  4.     @ (c) by Fenek dla COMPMaster
  5.  */
  6.  
  7. class Template {
  8.  var $templates_dir = "templates/";
  9.  var $templates_tags = "";
  10.  var $templates_file = "";
  11.  
  12.  function Template() { }
  13.  
  14.  function assign($tags,$value="") {
  15.  if (is_array($value)) {
  16.   foreach($tags as $tag => $tagvalue) {
  17.    if (!empty($tag)) {
  18.     $this -> templates_tags['{$'.$tag.'}'] = $tagvalue;
  19.    }
  20.   }
  21.  } else {
  22.   $this -> templates_tags['{$'.$tags.'}'] = $value;
  23.  }
  24.  }
  25.  
  26.  function display($file) {
  27.   $this -> templates_file = file_get_contents($this -> templates_dir.$file);
  28. $tmp_ = str_replace(array_keys($this -> templates_tags), array_values($this -> templates_tags), $this -> templates_file);
  29.   echo $tmp_;
  30.  }
  31.  
  32. }
  33. ?>

  1. Przykład:
  2. - index.php
  3. <?php
  4. include("Templates.class.php");
  5. $szablon = new Template();
  6. $ilosc_odwiedzin = file_get_contents("licznik.txt");
  7. $szablon -> assign("licznik", $ilosc_odwiedzin);
  8. $szablon -> display("index.tpl");
  9. ?>

  1. <?php
  2. - [b]templates/index.tpl[/b]
  3. Jesteś <i>{$licznik}</i> gościem na tej stronie
  4. ?>


Czy ten system był by dość szybki?
Zyx
Przecież to jest taki sam system, jak miałeś na początku, który Ci nie pasował, tyle że str_replace() jest robiony jeden raz, a nie wiele. Zdecyduj się, czego w końcu chcesz od nas, bo tak to do niczego nie dojdziemy. Systemy szablonów oparte o PHP i kompilujące do PHP mają bardzo dobrą wydajność.
jozek
Ta sama zasada działania..
Lecz chciałem wiedzieć który jest waszym zdaniem najlepszy i najłatwiejszy.
Wiem że SMARTY i OPT itd itp..
Lecz puki bym się nauczył w tym coś robić to by trochę minęło czasu :/
A mi chodziło by o coś łatwego w czym bym sam mógl napisać logowanie, wyświetlanie xxx z bazy danych itp..
Zyx
Wyobraź sobie, że pokazuję Ci dwie identyczne niebieskie kredki i zadaję pytanie: która jest łatwiejsza w użyciu, wygodniejsza, najlepsza itd. Pewnie, że to jest pytanie, ale bez przesady. Zabierasz się za wszystko, jak pies do jeża i w ogóle - sparzyłeś się, a dalej pchasz rękę w palnik. Zacytuję Ci fragment pierwszego wpisu:

Cytat
I ładnie działa.
Lecz co jeśli chciałbym pobrać rekordy z bazy i je wyświetlić?


Widzisz? Jeszcze na dobre pracy nie zacząłeś, a już z takim prymitywnym systemem utknąłeś. Zamiast wreszcie zajrzeć pod te linki, poczytać i pomyśleć trzeźwo, wrzucasz cały czas wariacje na temat tego samego łudząc się, że właśnie ta jakimś magicznym sposobem rozwiąże wszystkie problemy świata i wymyślasz coraz to nowe powody, najczęściej mające zerowe odzwierciedlenie w rzeczywistości, by nie pójść za głosem rozsądku. Masz wszystko podane na tacy, ktoś już za Ciebie wszystkie te problemy rozwiązał, w sieci jest kupa tutoriali. Pewnie, że opanowanie zajmie trochę czasu, ale jeśli mówimy o poznaniu całości biblioteki. Takie rzeczy, o jakich mówisz, to z każdego chyba artykułu się nauczysz robić w kwadrans, a przynajmniej masz gwarancję, że za miesiąc nie będziesz musiał zmieniać znowu systemu szablonów, bo dotychczasowy nie będzie potrafił robić jakiejś nowej rzeczy, jaka Ci do głowy przyjdzie. Radzisz sobie jako tako z obiektówką, masz pewne pojęcie o programowaniu. Mówiąc krótko, przestań p.... tylko pomyśl i weź się do roboty, chyba że chcesz za dwadzieścia lat dalej zastanawiać się, która z niebieskich kredek jest lepsza. Trudne jest dlatego, że nawet nie starasz się spróbować i zrozumieć.
jozek
Doba uczę się smarty.. :S
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.