PHP Twig
Résolu
chabinot
Messages postés
322
Date d'inscription
Statut
Membre
Dernière intervention
-
chabinot Messages postés 322 Date d'inscription Statut Membre Dernière intervention -
chabinot Messages postés 322 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je suis en train de tester Twig, dans l'ensemble cela marche, cependant
j'ai un souci avec l'affichage d'une fonction à l'intérieur d'une classe PHP.
1 - Source de la classe Month :
2 - Source index.php:
L'affichage retourné :

Alors que j'aurias aimé voir ceci :

Merci de votre aide
Cordialement
Je suis en train de tester Twig, dans l'ensemble cela marche, cependant
j'ai un souci avec l'affichage d'une fonction à l'intérieur d'une classe PHP.
1 - Source de la classe Month :
<?php namespace Calendrier; class Month extends Date { public $year; public $month; public function __construct(?int $year = null) { if ($year === null) { $year = intval(date('Y')); } $this->year = $year; } public function getFirstSemDays() { $year = $this->year; $toDay = date('Ymd'); $result = ''; for ($mo = 1; $mo <= 1; $mo++) { $result .= '<div class="month">'; $result .= '<div class="month__head">'; $result .= '<i class="fa fa-calendar"></i>'; $result .= '<span class="month__head-month">'; $result .= $this->rtvMonthName($mo); $result .= '</span>'; $result .= '<span class="month__head-day">jour</span>'; $result .= '<span class="month__head-sem">sem</span>'; $result .= '</div><!-- /.month__head-->'; for ($i = 1; $i <= $this->getNumDays($mo); $i++) { $x = ($i < 10 ? '0' : '') . $i; $mois = ($mo < 10 ? '0': '') . $mo; $date = $year . $mois . $x; $j = date('j',strtotime($date)); $n = date('N',strtotime($date)); $w = intval(date('W',strtotime($date))); $doy = intval(strftime("%j",strtotime($date))); $day = $this->days[$n]; if (in_array($date,$this->getFeries())) { $result .= '<div class="days green">'; } elseif ($date == $toDay) { $result .= '<div class="days yellow">'; } else { $result .= '<div class="days">'; } $result .= '<span class="day">' . $day . '</span>'; $result .= '<span class="nday">' . $j . '</span>'; $result .= '<span class="jour">' . $doy . '</span>'; $result .= '<span class="sem">' . $w . '</span>'; $result .= '</div><!-- /.days -->'; } $result .= '</div><!-- /.month -->'; return $result;
2 - Source index.php:
<?php // Autoloading require './src/bootstrap.php'; // Initialisations // Dates $date = new Calendrier\Date(); $today = $date->getDate(); $sem = $date->getWeek(); $day = $date->getDayNum(); $reste = $date->reste(); // Mois $month = new Calendrier\Month($_GET['year'] ?? null); $year = $_GET['year'] ?? date('Y'); $dref = $year . '0630'; $semestre1 = $month->getFirstSemDays(); //$sem2 = $month->getSecondSemDays(); $previous = $month->previousYear(); $next = $month->nextYear(); $title = 'Calendrier'; $titre = $title . '' . $year; // URL $host = $_SERVER['HTTP_HOST']; $uri = $_SERVER['REQUEST_URI']; $url = sprintf("%s%s%s","http://",$host,$uri); $http = explode('/',$url); $url = $http[0] . '//' . $http[2] . '/' . $http[3]; // Routing $page = 'home'; if (isset($_GET['p'])) { $page = $_GET['p']; } // Rendu du template $loader = new Twig_Loader_Filesystem(__DIR__ . '/templates'); $twig = new Twig_Environment($loader, [ 'cache' => false //__DIR__ . '/tmp' ]); if ($page === 'home') { echo $twig->render('home.twig', [ 'date' => $today, 'sem' => '(Semaine: ' . $sem . ')', 'day' => ' (Jour : ' . $day . ')', 'reste' => ' (' . $reste . ')', 'titre' => $titre, 'title' => $title, 'url' => $url, 'previous' => $previous, 'next' => $next, 'semestre1' => $semestre1 ]);
L'affichage retourné :
Alors que j'aurias aimé voir ceci :
Merci de votre aide
Cordialement
A voir également:
- PHP Twig
- Easy php - Télécharger - Divers Web & Internet
- Expert php pinterest - Télécharger - Langages
- Retour a la ligne php - Forum Webmastering
- Alert php - Forum PHP
- Retour a la ligne php ✓ - Forum PHP
1 réponse
Bonjour,
Déjà ... sans voir ton template... difficile de te répondre.
Ensuite... l'interret de Twig .. c'est de séparer la partie PHP du html ... donc générer du html dans ton PHP... ce n'est pas la bonne pratique ( mais alors.. pas du tout !!)
Normalement, tu ne devrais retourner qu'un array ... et dans ton template Twig utiliser les "boucles" et les "blocks" pour générer le contenu.
Déjà ... sans voir ton template... difficile de te répondre.
Ensuite... l'interret de Twig .. c'est de séparer la partie PHP du html ... donc générer du html dans ton PHP... ce n'est pas la bonne pratique ( mais alors.. pas du tout !!)
Normalement, tu ne devrais retourner qu'un array ... et dans ton template Twig utiliser les "boucles" et les "blocks" pour générer le contenu.
Voilà mes templates :
1 - layout.twig
2 - home.twig :
Le code incriminé se trouve au niveau de :
Merci de ton aide.
Cordialement
J'ai trouvé la solution, mais je la trouve un peu lourde.
Je te la donne
1 - Fichier index.php
2 - Fichier home.twig
Cordialement
Mais.. tu ne connais pas les boucles en php ?
Aurais-tu une idée d'une boucle pour formater, sachant qu'il faut injecter toutes ces lignes
au moment d'appeler home.twig
Cordialement