Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Problem]Parser
jozek
post
Post #1





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 15.03.2009

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/dry.gif)
Go to the top of the page
+Quote Post
dark_root
post
Post #2





Grupa: Zarejestrowani
Postów: 341
Pomógł: 1
Dołączył: 19.11.2007

Ostrzeżenie: (10%)
X----


$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>";
Go to the top of the page
+Quote Post
jozek
post
Post #3





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 15.03.2009

Ostrzeżenie: (0%)
-----


  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?
Go to the top of the page
+Quote Post
uirapuru
post
Post #4





Grupa: Zarejestrowani
Postów: 182
Pomógł: 9
Dołączył: 30.04.2005

Ostrzeżenie: (0%)
-----


do tej pory spotykalem sie z dobrymi opiniami nt. Smarty...
Go to the top of the page
+Quote Post
jozek
post
Post #5





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 15.03.2009

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
Zyx
post
Post #6





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
jozek
post
Post #7





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 15.03.2009

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
Zyx
post
Post #8





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

Ostrzeżenie: (0%)
-----


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ść.
Go to the top of the page
+Quote Post
jozek
post
Post #9





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 15.03.2009

Ostrzeżenie: (0%)
-----


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..
Go to the top of the page
+Quote Post
Zyx
post
Post #10





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

Ostrzeżenie: (0%)
-----


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ć.
Go to the top of the page
+Quote Post
jozek
post
Post #11





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 15.03.2009

Ostrzeżenie: (0%)
-----


Doba uczę się smarty.. :S
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.09.2025 - 02:43