System szablonowania

PHP  Założony przez  Patryk Stefański.

Cześć, ostatnio tłumacząc sobie sourcebansa i przerabiając amxbansa zauważyłem, że każdy z tych aplikacji ma jakiś system szablonowania chyba smarty.
Coś takiego
$theme->assign('admin_list'$admin_list);
$theme->assign('server_list'$servers);
$theme->assign('server_script'$serverscript);

$theme->display('box_admin_comms_search.tpl'); 

Poczytałem trochę o tym i podobno Smarty już jest stare, nie opłacalne do używania i mam kilka pytań
1. Jest jakiś dobry system szablonowania, który ma obfitą dokumentację( fajnie jakby była po polsku, choć nie musi )
2. Jeżeli jest taki system w/w to czy są do niego jakieś poradniki.
3. Czy jak zainstaluje system szablonowania do swojej aplikacji to czy muszę używać pełnego OOP(klasy, konstrukty, etc) żeby to miało jakiś sens?
4. I czy taki system ma jakieś wady(luki bezpieczeństwa, etc)
5. Czy dalej będę mógł używać pliku php do "budowania stron"
if ($link == null) {
      require_once(PAGES_PATH."home.php");
  } elseif ($link == 'rules') {
      require_once(PAGES_PATH."rules.php");
  
Czy wtedy są jakieś inne zalecenia


PS1
Nie chce robić offtopu i zakładać nowego tematu.
Z okazji siedzenia ostatnio dużo w back-endzie, macie może jakieś strony z darmowymi psd, które będę mógł sobie zakodować front-end i poćwiczenia na flex-boxach
1. https://twig.symfony.com/doc/2.x/
2. Znajdziesz w internecie
3. Wydaje mi się że nie musisz
4. Jest bezpieczny
5. Tak lecz lepsza opcją jest używanie do tego typu problemu routingu
1. Tylko Twig! <3 :P
2. https://twig.symfony.com/doc/2.x/intro.html
3. Musisz się nauczyć composera do tego i stosować OOP dla niego (niekoniecznie w całej aplikacji). Choć będzie wygodniej jak całą aplikację pokryjesz OOP.
4. Nie, bo posługujesz się stricte frontem. Chyba, że zaszyjesz coś ciekawego w JSie :P
5. Plik PHP przekazuje dane do Twiga i dopiero on wyrzuca Ci dane które widzisz, więc... Tak.

Aczkolwiek w 5 pytaniu pytasz o routing, więc... Każda podstrona powinna być osobnym plikiem PHP, dla czytelniejszego kodu.
Zainstalowałem lokalnie twiga i composera i przy próbie jego testowania napotkałem błąd i mam pytania.
Czy zawsze przy renderowaniu szablonu trzeba używać echo? I do czego służy drugi parametr w render()
echo $twig->render('home.tpl', ['home' => $home]); 

A to błąd
Fatal error: Uncaught Error: Call to a member function render() on null in E:\xampp\htdocs\panel\pages\home.php:9 Stack trace: #0 E:\xampp\htdocs\panel\include\pagebuilder.php(5): require_once() #1 E:\xampp\htdocs\panel\index.php(5): require_once('E:\\xampp\\htdocs...') #2 {main} thrown in E:\xampp\htdocs\panel\pages\home.php on line 9

Link do gita
https://github.com/ZnaQu/panel
(09.06.2019, 14:18)Patryk Stefański napisał(a): Zainstalowałem lokalnie twiga i composera i przy próbie jego testowania napotkałem błąd i mam pytania.
Czy zawsze przy renderowaniu szablonu trzeba używać echo? I do czego służy drugi parametr w render()
echo $twig->render('home.tpl', ['home' => $home]); 

A to błąd
Fatal error: Uncaught Error: Call to a member function render() on null in E:\xampp\htdocs\panel\pages\home.php:9 Stack trace: #0 E:\xampp\htdocs\panel\include\pagebuilder.php(5): require_once() #1 E:\xampp\htdocs\panel\index.php(5): require_once('E:\\xampp\\htdocs...') #2 {main} thrown in E:\xampp\htdocs\panel\pages\home.php on line 9

Link do gita
https://github.com/ZnaQu/panel

Użyj rozszerzenia html zamiast tpl. A drugi parametr przekazuję do szablonu zmienne
Ten sam git
Zmieniłem home.tpl na home.html
Przekazałem tablicą zmiennie do render i dalej nie działa
To co w przypadku jak będę posiadał kilka zmiennych? I jak przekazać same zmienne ?
$username 'Kowalski';
$twig->render(user.html$username); 
Tak o ?
(09.06.2019, 14:49)Patryk Stefański napisał(a): Ten sam git
Zmieniłem home.tpl na home.html
Przekazałem tablicą zmiennie do render i dalej nie działa
To co w przypadku jak będę posiadał kilka zmiennych? I jak przekazać same zmienne ?
$username 'Kowalski';
$twig->render(user.html$username); 
Tak o ?

Ty masz tak
index.php
$loader = new Twig_Loader_Filesystem('templates');
  $twig = new Twig_Environment($loader);
A w dokumentacji twiga wygląda tak.
$loader = new \Twig\Loader\FilesystemLoader('/path/to/templates');
$twig = new \Twig\Environment($loader, [
    'cache' => '/path/to/compilation_cache',
]);
Chyba widać różnicę :)
Dla ->render() pierwszy parametr to ścieżka do szablonu - w formie stringa. Drugi to tablica zamiennych przekazywanych do szablonu.
W Twoim przykładzie 'home' przyjmie wartość ze zmiennej $home.

Rozszerzenie jakie powinieneś użyć dla szablonu, to *.html.twig

A błąd:
Fatal error: Uncaught Error: Call to a member function render() on null
Wskazuje na brk podniesonego obiektu Twigowego.
Plik index.php
<?php
  
require_once("vendor/autoload.php");
  require_once(
"include/systems.php");
  require_once(
"include/page-build.php");
  require_once(
"include/database.php");

  
$loader = new \Twig\Loader\FilesystemLoader('templates');
  
$twig = new \Twig\Environment($loader, [
      
'cache' => 'templates_c',
  ]); 

plik home.php
<?php
global $twig;
$gdzie "Gdzie ja jestem";
$lat "Mam 33 lata";
echo 
$twig->render('home.html.twig', ['gdzie' => $gdzie'lat' => $lat]); 

plik home.html.twig
<h1>{{gdzie}}{{lat}} </h1

I ten sam błąd
Fatal error: Uncaught Error: Call to a member function render() on null in

Spróbowałem jeszcze tak

index.php
require_once __DIR__.'/vendor/autoload.php';
  
$loader = new \Twig\Loader\FilesystemLoader(__DIR__.'/templates');
  
$twig = new \Twig\Environment($loader, [
      
'cache' => 'templates_c',
  ]); 
home.php
global $twig;
$gdzie "Gdzie ja jestem";
$lat "Mam 33 lata";
$template $twig->load('home.html.twig');
echo 
$twig->render(['gdzie' => $gdzie'lat' => $lat]); 
Fatal error: Uncaught Error: Class 'Twig\Loader\FilesystemLoader' not found in

Instalowałem Composera za pomocą .exe z ich strony
Twig instalowałem za pomocą Terminal IDE w atomie tą komendą
composer require "twig/twig:^2.0"
Spróbuj przenieść Twiga do autoloada, wtedy unikniesz globalnych zmiennych. Poza tym, $twig jest nadal nullem. W pliku index.php dopisz na początku to co wpisałeś w home.php.
Nie rozumiem ani słowa z tego co napisałeś :D
Jak mam przenieść twiga do autoloada -> https://github.com/ZnaQu/panel/tree/master/vendor
(09.06.2019, 15:29)b360 napisał(a): W pliku index.php dopisz na początku to co wpisałeś w home.php.
Tego też nie rozumiem.
W jakim sensie przenieść. Jaki jest wtedy sens używania home.php i home.html.twig
global $twig; dopisz na początku pliku index.php
Cały czas ten sam błąd
atal error: Uncaught Error: Class 'Twig\Loader\FilesystemLoader' not found in E:\xampp\htdocs\panel\index.php:4 Stack trace: #0 {main} thrown in E:\xampp\htdocs\panel\index.php on line 4
Pokaż strukturę katalogów, bo błąd wskazuje, że nie umie znaleźć klasy FilesystemLoader z lokalizacji Twig\Loader
(09.06.2019, 15:51)b360 napisał(a): Pokaż strukturę katalogów, bo błąd wskazuje, że nie umie znaleźć klasy FilesystemLoader z lokalizacji Twig\Loader
https://github.com/ZnaQu/panel



Użytkownicy przeglądający ten wątek:

1 gości