Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php]Poprawienie systemu szablonów zamiast {ZMIENNA} żeby było {_ZMIENNA_}, Jak pooprawić wyrażenie regularne?
kukix
post
Post #1





Grupa: Zarejestrowani
Postów: 600
Pomógł: 2
Dołączył: 1.09.2002
Skąd: Wrocław

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


Witam.

Tworze strony internetową na podstawie systsmu szablonów, który znalałżem kiedyś na jakimśportalu.

Problem w tym, że nie mogę dodac żadnego kodu JavaScript, ponieważ wszystko pomiędzy znakami { i } jest wycinane.

Wpadłem na pomysł, żeby poprawić wyrqażnie regularne, żeby zmienne były trzymane nie w samych nawiasach, ale jeszcze z podkreślnikami {_ i _}

Czyli zamiast {ZMIENNA} żeby musiało być {_ZMIENNA_}


Kawałek kodu z wyrażneiem regularnym wygląda tak:

  1. if(preg_match_all('#\{(.*?)\}#is', $this -> compiled, $found)){
  2. foreach($found[1] as $match){
  3. $match_table[] = '\'.'.$this -> generate_block_ref($match).'.\'';
  4. }
  5. $this -> compiled = str_replace($found[0], $match_table, $this -> compiled);
  6. }


Bede wdzięczny za wszelkie wypowiedzi.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
by_ikar
post
Post #2





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

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


Widocznie źle czytałeś, bo tam jest na prawdę proste wyrażenie, tylko tyle że musisz użyć preg_replace_callback żeby całość miała jakiś sens. Kod:

  1. <?php
  2.  
  3. function callbackFunction( $matches )
  4. {
  5. if( !empty( $matches[1] ) )
  6. {
  7. return "<?php $matches[1] ?>";
  8. }
  9. else
  10. {
  11. return preg_replace('/{(\/)?ignore}/is', '', $matches[0]);
  12. }
  13. }
  14.  
  15.  
  16. $txt = "asd {a} afsda {b} asd {ignore} asdsa {c} asdasd {d} asdasd {/ignore} asdasd {e} asdas";
  17. $txt = preg_replace_callback( "#{(?:ignore}.*?{/ignore|(.+?))}#si", "callbackFunction", $txt );
  18.  
  19. echo $txt;
  20.  
  21. ?>


Wynikiem działania takiej funkcji + wyrażenia będzie taki kod:

Kod
asd <?php a ?> afsda <?php b ?> asd asdsa {c} asdasd {d} asdasd asdasd <?php e ?> asdas


Czyli pomija blok ignore, jednocześnie go wywalając z kodu. Sam korzystam z podobnego rozwiązania i póki co sprawdza się świetnie (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post

Posty w temacie


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: 3.10.2025 - 09:22