Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Probelm z własnym systemem szablonów/templet'ek
Forum PHP.pl > Forum > PHP
ZeTu
Witam, nie wiem czemu ale gdy chcę wyświetlić plik x.php w index.php to wyświetla mi "1" :/ zamiast zawartości pliku.
Plik x.php
  1. jakis teskt i kod

Plik index.php
  1. $r = file_get_contents("home.php");
  2. $m2 = include 'x.php';
  3. $r = str_replace("<--asd-->", $m2, $r);
  4.  
  5. echo($r);

Plik home.php
  1. Jakis tekst i kod w srodku <--asd--> jakis kod i tekst

Jeśli w x.php będę miał tak:
  1. <?php return("jakis teskt"); ?>

To będzie działać, ale ja tak nie chcę ponieważ w pliku x.php będzie znajdować się kod php i html.
Nie da się jakoś zastąpić tego return i żeby zamiast wpisywania kodu w return, w pliku index.php po prostu wyświetlało mi tak jak powinno?
Yorki
Funkcja include nie zwraca zawartości pliku
ZeTu
Wiem, chcę tylko żeby po wyświetleniu zawartości z pliku home.php zamieniło np. <--asd--> na <?php include(x.php); ?>, a innego sposobu nie znam
timon27
  1. $r = file_get_contents("home.php");
  2. $r = explode("<--asd-->", $r);
  3. $i=0;
  4. foreach($r as $w){
  5. if($i==0) $i++; else include 'x.php';
  6. echo $w;
  7. }
ZeTu
No fajnie, a co jeśli mam więcej niż jedne <--asd-->? np. <--das--> <--bad--> i do każdego chcę osobny plik podpiąć?
timon27
Cytat(ZeTu @ 23.09.2012, 22:36:39 ) *
No fajnie, a co jeśli mam więcej niż jedne <--asd-->? np. <--das--> <--bad--> i do każdego chcę osobny plik podpiąć?

No to już zostaje ci tylko wyświetlać literka po literce...



  1.  
  2. $r = file_get_contents("home.php");
  3. $d=long($r); //jakaś funkcja zwracająca długość, zapomniałem jak się nazywa
  4. for($i=0;$i<=$d;$i++){
  5. if(substr($d,$i,5)=='<abc>') {include 'abc';$i+=5;}
  6. if(substr($d,$i,5)=='<aaa>') {include 'aaa';$i+=5;}
  7. echo $r[$i];
  8. }




Szymciosek
strlen ?
ZeTu
Timon27 to coś w ogóle nie działa :/
kyku
return nie służy do wyświetlania tekstu

index.php:
  1. <?php include("2.php");

2.php:
  1. <?php echo "tekst";?>
  2. <div>KOD HTML</div><?php ?>....
ZeTu
Kyku toś teraz dowalił ... Nie o to mi chodzi
Uriziel01
Jeżeli dobrze rozumiem, w stringu masz wielokrotnie zapisane sekcje w formacie '<--string-->','<--second_string-->' i chcesz aby zawartość tych tagów została zastapiona treścią z plików 'string.php' i 'second_string.php', czy dobrze Cię zrozumiałem ?

EDIT:
Może troszkę na wyrost, ale do czego chcesz tego użyć ? Bo nie wiem czy nie próbujesz stworzyć od nowa systemu template'ów (na pierwszy rzut oka tak to wygląda).
ZeTu
Bravo Uriziel01 smile.gif Jedyny mądry który zrozumiał o co mi chodzi smile.gif wiesz może jak to zrobić? Bardzo mi to jest potrzebne do mojego CMS'a, którego właśnie projektuje, a nie zakończę go jeśli nie będę miał tego "systemu template'k", szukałem już w necie, ale żaden nie działał prawidłowo sad.gif
redeemer
Bierzesz się za CMS nie znając podstaw. Skorzystaj z TWIG albo Smarty. Są to systemy szablonów, które działają i są "z internetu". Zresztą nawet nie wiem jak Ty to szukałeś http://bit.ly/VwFXWL
ZeTu
Wiem, że istnieje Smarty, ale ja nie chcę tego używać. Chcę po prostu zrobić inaczej, nie tak jak wszyscy
redeemer
Pisałeś, że szukałeś w necie, ale żaden nie działał. Jak koniecznie chcesz zindywidualizować system szablonów w swoim CMS (co jest dużym błędem i nawet nie zdajesz sobie sprawy jakie problemy napotkasz po drodze) to możesz przecież możesz zobaczyć jak programiści z doświadczeniem to zrealizowali, bo przecież dostęp do kodu źródłowego jest.
Spawnm
Cytat(Yorki @ 23.09.2012, 22:10:53 ) *
Funkcja include nie zwraca zawartości pliku

Zwraca jeśli plik ma return, kilka fw opiera na tym swoje konfiguracje wink.gif

ZeTu
To co zna ktoś odpowiedź na moje pytanie (problem)?
kyku
eval
ZeTu
Próbowałem w eval i też nie działa :/
kyku
A jednak:
Najprostszy przykład:

index.php
  1. <?
  2. $plik2 = file_get_contents('plik2.php');
  3. $plik2 = str_replace('<-- aaaa -->', 'bbbb', $plik2);
  4. eval($plik2);
  5. ?>

plik2.php
  1. // nie zaczynaj pliku od <?php lub w index.php zamien eval($plik2) na eval('?>'.$plik2)
  2.  
  3. $zmienna = "test";
  4. echo $zmienna;
  5. ?> abc <-- aaaa --> bbbb
Spawnm
Kyku - jesteś w stanie sensownie wyjaśnić po kij tutaj eval? Eval się nie używa.

Zetu, kod który podałeś powinien działać. Daj cho po file_get i zobacz co ci wczytuje,
może tam jest problem, a może w innej części kodu której nam nie pokazałeś.
kyku
Spawnm, on chce w templatkach mieć kod PHP i HTML. Dlatego też eval
ZeTu
Kyku tak jak napisałeś działa, ale jak w pliku index.php zamiast bbbb daje include, to wyskakuje 1
  1. $m2 = include 'i.php' ;
  2. $plik2 = file_get_contents('plik2.php');
  3. $plik2 = str_replace('<-- aaaa -->', $m2, $plik2);

A dokładnie wyskakuje tak:
  1. $zmienna = "test"; echo $zmienna; ?> abc <-- aaaa --> bbbbtest abc 1 bbbb
kyku
nie możesz użyć instrukcji przypisania (znaku =) do include, który dołącza jakiś inny skrypt (no chyba, ze uzywasz tam return ale i tak dziwne rozwiazanie)
Cytat
(Handling Returns: include returns FALSE on failure and raises a warning. Successful includes, unless overridden by the included file, return 1. It is possible to execute a return statement inside an included file in order to terminate processing in that file and return to the script which called it. Also, it's possible to return values from included files. You can take the value of the include call as you would for a normal function. This is not, however, possible when including remote files unless the output of the remote file has valid PHP start and end tags (as with any local file). You can declare the needed variables within those tags and they will be introduced at whichever point the file was included.)

po prostu:
include łączy ze sobą jakieś skrypty
file_get_contents pobiera zawartość pliku (to możesz do zmiennej przypisać)

Zapoznaj się dokładniej z include i file_get_contents
ZeTu
Ok, już sobie poradziłem dzięki za pomoc kyku, zrobiłem tak jak w tym kodzie co napisałeś tylko zmieniłem troszkę i działa wielkie dzięki smile.gif
Uriziel01
Banał. Proszę bardzo, prosty przyklad smile.gif

  1. <?php
  2.  
  3. $template_content = '<--header-->To jest testowa tresc strony <br/><--footer-->';
  4. $template_parser = new template_parser();
  5. echo $template_parser->parse_template_blocks($template_content);
  6.  
  7. class template_parser
  8. {
  9. private $prefix = '<--';
  10. private $suffix = '-->';
  11. function parse_template_blocks($content)
  12. {
  13. preg_match_all($this->prefix .'([a-zA-Z]+)' .$this->suffix, $content, $matches);
  14. foreach($matches[1] AS $match)
  15. {
  16. $content = str_replace($this->prefix . $match . $this->suffix, file_get_contents('template_blocks/'.$match), $content);
  17. }
  18. return $content;
  19. }
  20. }
  21. ?>


EDIT:
WTF? O.o Chrome stwierdził że przywrócenie karty z wczoraj to całkiem dobry pomysł. Także moja odpowiedź 'lekko' spóźniona.
lukaskolista
@kyku: z tym eval() to troszke Cie ponioslo smile.gif Nigdy przenigdy eval()exclamation.gif

  1. include 'templates/'.$file.'.php';
  2. $template = ob_get_clean();
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.