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
Kod PHP:
$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"
Kod PHP:
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
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
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()
Kod PHP:
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()
Kod PHP:
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 ?
Kod PHP:
$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 ?
Kod PHP:
$username = 'Kowalski';
$twig->render(user.html, $username);
Tak o ?
Ty masz tak
index.php
Kod:
$loader = new Twig_Loader_Filesystem('templates');
$twig = new Twig_Environment($loader);
A w dokumentacji twiga wygląda tak.
Kod:
$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:
Kod:
Fatal error: Uncaught Error: Call to a member function render() on null
Wskazuje na brk podniesonego obiektu Twigowego.
Plik index.php
Kod 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
Kod 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
Kod PHP:
<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
Kod PHP:
require_once __DIR__.'/vendor/autoload.php';
$loader = new \Twig\Loader\FilesystemLoader(__DIR__.'/templates');
$twig = new \Twig\Environment($loader, [
'cache' => 'templates_c',
]);
home.php
Kod 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ą
Kod:
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ś
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
Pokaż strukturę katalogów, bo błąd wskazuje, że nie umie znaleźć klasy FilesystemLoader z lokalizacji Twig\Loader