Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Strona w oparciu o szablony Twiga
Forum PHP.pl > Forum > Przedszkole
Fred1485
Witam, z góry zaznaczam dwie rzeczy:

1) Podstawy Twiga ogarniam wink.gif
2) Szukałem odpowiedzi na temat w EF oraz PHP by przemo ale nie mogłem się dokopać żeby coś sensownego znaleźć wink.gif

Zakładałem już temat o Twigu, być może byłeś tam i teraz myślisz że jakiś głupek znowu czegoś nie wie wink.gif

--------NIE CHCESZ TO NIE CZYTAJ------------

Problem jest bardziej filozoficzny niż "problemowy" biggrin.gif biggrin.gif

Załóżmy że mam mini projekt a w nim przykładowo:

1- plik szablonu główny -> main.tpl
2- plik szablonu specjalny(załóżmy że od błędów) -> error.tpl
3- plik index.php

W pliku main.tpl

  1. // tu jakieś odwołania do css, meta itp
  2. </head>
  3. //tutaj generowanie treści strony na podstawie index.php
  4. </body>
  5. </html>


W pliku error.tpl

  1. <div class"error">{{error}}</div>


W pliku index.php załóżmy że mam łączenie z bazą czy jakąkoliwek inną operację, w której niespełnienie warunku jest równoznaczne z wygenerowaniem diva z errorem.

Próbuję nawiązać połączenie z bazą -> nie udaje się więc skrypt generuje odpowiednie dane i szablon tworzy odpowiednie dane wyjściowe

Teraz nie mogę najpierw w pliku index.php najpierw wyrenderować szablonu main.tpl a potem error.tpl bo ten error.tpl ma się zawierać w pliku głównym szablonu, da się jakoś zrobić że ten szablon z errorem jeśli wystąpi wkładam pomiędzy ten szablon główny?
Oczywiście jeśli połączenie z bazą się nie uda to die(), więc wykonywanie kodu potem jest niemożliwe biggrin.gif
Mam nadzieję że zrozumieliście mój problem, może nie jest to dla kogoś problem ale dla mnie jakoś nie mogę sobie tego wyimaginować jak to zrobić? sad.gif
Pyton_000
http://twig.sensiolabs.org/doc/tags/extends.html
do errorów robisz
if(errors) wyświetl Errory

i normalnie include w main.tpl
Fred1485
Że w pliku php czy tpl if(errors)?
Pyton_000
tpl
Fred1485
No ok biorę sie za czytanie ale jak na przyklad potem nie wyświetlać reszty szablonu po wystapieniu errora oprocz na przykład stopki?
Pyton_000
aha, ja założyłem że te errory to są typu np. walidacyjne.
Jeśli mają to być typu crash strony to tak jak normalny szablon.

Tam gdzie łapiesz błędy renderujesz po prostu szablon błedu który również jest extended z main.tpl i normalnie wypluwasz.
Fred1485
Niewiele z tego rozumiem smile.gif poczytam najpierw i moze sam do tego dojdę smile.gif

Zrobiłem tak:

index.php

  1. <?php
  2.  
  3. require_once('lib/Twig/Autoloader.php');
  4.  
  5. Twig_Autoloader::register();
  6.  
  7. $loader = new Twig_Loader_Filesystem('templates');
  8. $twig = new Twig_Environment($loader, array( 'auto_reload' => true, 'cache' => 'cache'));
  9. $template = $twig->loadTemplate('template.tpl');
  10.  
  11. echo $template->render(array('title' => 'Tytul strony'));
  12.  
  13. ?>


template.tpl
  1. {% extends "template2.tpl" %}
  2.  
  3. {% block title %}
  4. <div>{{ title }}</div>
  5. {% endblock %}


template2.tpl
  1. <!DOCTYPE HTML>
  2. <meta charset="utf-8" />
  3. <meta name="maki1234" />
  4. <title>Strona-testowa</title>
  5. <link rel="stylesheet" type="text/css" href="style.css" />
  6. </head>
  7. {% if title %}
  8. {% block title %}
  9. {% endblock %}
  10. {% endif %}
  11.  
  12. <div>Jakiś tekst</div>
  13.  
  14. </body>
  15. </html>


Działać działa i to bez problemu ale jak zrobić tak że jak ten if z template się spełni to żeby div potem się już nie wyświetlał np?

Ogólny zamysł jest taki: Header strony zawsze -> content strony w zależności czy jest błąd to błąd lub treść strony -> stopka zawsze

Wymyśliłem sobie że zrobie 3 pliki -> header, treść i stopkę, pierwsze i ostatnie zawsze będę includował a treść w zależności od operacji wink.gif
Pyton_000
  1. $template = $twig->loadTemplate('template.tpl');
  2.  
  3. echo $template->render(array('title' => 'Tytul strony'));

Tutaj ustalasz który szablon generować, wystarczy zmienić template.tpl na error.tpli po sprawie.
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.