Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Template a'la jogger
Forum PHP.pl > Forum > PHP
Wicko
* Tu było trochę paplania o parsowaniu.
elnino.pl
Może lepiej użyj czegoś gotowego (Smarty, OPT, Cameleon)...
arturwow
Poczytaj o parsowaniu XML, DOM, simple xml ...
Zobacz też Open Power Template - ma bloki warunkowe, może Ci wystarczy?
Wicko
Hm.. anyway rozwiazalem to bardzo prosto, dzieki za checi.
TomASS
Cytat
anyway rozwiazalem to bardzo prosto, dzieki za checi

To może się pochwal jeszcze jak TO zrobiłeś?
Może da się to jakoś ulepszyć/zoptymalizować?
Wicko
Nie pokazalem od razu, poniewaz to i tak sie nikomu nie przyda, do template uzywam jednej prostej stosunkowo funkcji stad nikogo to nie zainteresuje..

  1. <?php
  2. if( is_array( $ifArray ) )
  3. {
  4.                
  5.    foreach( $ifArray as $block => $show )
  6.    {
  7.                    
  8.        if( $show == 1 ) $parsed = str_replace( array( '<$' . $block . '>', '</$' . $block . '>' ), '', $parsed );
  9.        
  10.        else $parsed = preg_replace('#<$' . $block . '>(.*?)</$' . $block . '>#si', '', $parsed );
  11.    
  12.    }
  13.  
  14. }
  15. ?>

Na podstawie tego wywnioskujecie jak to dziala.
Hm ale zauwazylem, ze w jednym miejscu dziala to normalnie, a w innych gdy blok nie ma byc pokazywany jest on pokazywany normalnie ze znacznikami.. tak jakby po prostu byl wadliwy wzor preg_replace, ale czemu gdzie indziej dziala?
LamaMASTER
A ja powiem, że sam używam podobnej funkcji (ostatnio ją dużo bardziej rozbudowałem) i jest to lepsze niż te wszystkie nakładki na php typu Smarty (bo Smarty to takie gówno, że nie można nazwać tego systemem szablonów).

Spróbuj:
  1. <?php
  2. $parsed = preg_replace('#<$' . $block . '>(.*?)</$' . $block . '>#si', '1', $parsed );
  3. ?>
Wicko
Tym preg_replace usuwam caly blok z template ( jeszcze przed zamiana normalnych "zmiennych" typu <#menu#> ) gdy nie ma sie on pokazywac ( to czy ma sie pokazywac czy nie ustala tablica przekazywana w $ifArray ), natomiast gdy on ma sie pokazywac to tylko usuwam napisy tego bloku ( <$LOGGED> i </$LOGGED> na przyklad ), i robie to zwyklym str_replace poniewaz raczej dziala szybciej niz preg_replace, prawda?

i faktycznie gdy jest uzywane str_replace (czyli blok ma byc wyswietlony) to wszystko dziala, ale gdy jest uzywane preg_replace (gdy blok nie ma byc wyswietlony) to blok sie wyswietla tak czy siak :/ Czyli po prostu tak jakby byl nieprawidlowy wzor w preg_replace i nie byl on wykrywany ;]
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.