Ta strona używa ciasteczek (cookies), dzięki którym nasz serwis może działać lepiej. Dowiedz się więcej OK, rozumiem

Przebudowa funkcji preg_replace_callback

Zdecydowałeś się na tworzenie interaktywnych stron przy pomocy PHP? Chcesz w łatwy i szybki sposób zarządzać danymi na swojej stronie? Tutaj znajdziesz pomoc w napotkanych przy tym trudnościach.

Przebudowa funkcji preg_replace_callback

Post 14.10.2017, 21:22:08

Witam. Posiadam prosty system template i nie potrafię przerobić w nim jednej funkcji.
Napisałem system logowania i chciałbym, aby zależnie od tego czy użytkownik jest zalogowany, wyświetlał się inny tekst.

Funkcja do parsowania funkcji w template
Kod: Zaznacz cały
private function parseFunctions() {
        // Przerabianie include'ów ( {include file="..."} )
        while( preg_match( "/" .$this->leftDelimiterF ."include file=\"(.*)\.(.*)\""
                           .$this->rightDelimiterF ."/isU", $this->template) )
        {
            $this->template = preg_replace_callback("/".$this->leftDelimiterF ."include file=\"(?<path>.*)\.(?<format>.*)\""
                                            .$this->rightDelimiterF.'/',
                                            function ($match) {return file_get_contents($this->templateDir.$match['path'].'.'.$match['format']);},
                                            $this->template );
        }


        // Usuwanie komentarzy
        $this->template = preg_replace_callback( "/" .$this->leftDelimiterC ."(.*)" .$this->rightDelimiterC ."/isU",
                                        function($m) {}, $this->template );
    }


navigation.tpl (fragment)
Kod: Zaznacz cały
{include file="nav_text_logged_{$logged}.tpl"}


zwraca mi błąd: file_get_contents(templates/nav_text_logged_{$logged}.tpl): failed to open stream: No such file or directory in /var/www/klasy/class/template.class.php on line 253 (logiczne, bo nie przerabia mi mojej zmiennej)

Funkcja do przypisywania zmiennych do template
Kod: Zaznacz cały
public function assign($replace, $replacement) {
        $this->template = str_replace( $this->leftDelimiter .$replace.$this->rightDelimiter,
                                       $replacement, $this->template );
    }


Niestety nie chce ona zastąpić tego momentu. Co robię źle? Co mogę zrobić?

Oczywiście w pliku index.php dodałem funkcję
Kod: Zaznacz cały
$tpl->assign( "logged", $user_logged);
Kaspian12
Posty: 36
Dołączył(a): 14.09.2013

Powrót do PHP i bazy danych


 


  • Podobne wątki
    Odpowiedzi
    Wyświetlone
    Ostatni post

Kto przegląda forum

Użytkownicy przeglądający ten dział: Bing [Bot] i 9 gości

Hosting, Domeny, SSL

Subskrypcja

Mamy 50698 zarejestrowanych użytkowników.
Najnowszy użytkownik: m1kie


Nasi użytkownicy napisali:

  • 936100 wiadomości
  • w 246729 tematach

Najnowsze wpisy na blogu

Najnowsze artykuły

Najaktywniejsi (ostatnie 30 dni)