Barra laterale

programmazione:php:funzione_per_template

Una semplice funzione php per usare i template

Autore: Fabio Di Matteo
Ultima revisione: 01/02/2024 - 11:40

Alle volte puo' essere utile separare il più possibile il codice php dall'html o dal javascript o ancora dai fogli di stile. Di seguito alcune soluzioni.

Templating senza logica (no if for etc...)

Diseguito una funzione altamente compatibile (tutte le versioni del php) che sostituisce stringhe da un file di testo in base a un array.

<?php
	function template($fileName, $arrayVal=[])
	{
		$txt = file_get_contents($fileName);
		return strtr($txt, $arrayVal);
	}
?>

dove $fileName è il percorso del file html che contiene il template e $rrayVal un array del genere:

$home['{{title}}'] = 'Regalo';
$home['{{baseurl}}'] = '../static';
$home['{{regalo_title}}'] = "Regalo - scambia oggetti";
 
//la funzione si usa così:
echo template('../static/index.html', $home);

index.html (file template) Soltanto un file di esempio

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
        <meta name="description" content="" />
        <meta name="author" content="" />
        <title>{{regalo_title}}</title>
        <!-- Favicon-->
        <link rel="icon" type="image/x-icon" href="{{baseurl}}/assets/favicon.ico" />
        <!-- Core theme CSS (includes Bootstrap)-->
        <link href="{{baseurl}}/css/styles.css" rel="stylesheet" />
    </head>
    <body>
        <!-- Responsive navbar-->
        <nav class="navbar navbar-expand-lg ">
            <div class="container">
                <a class="navbar-brand" href="#!">{{title}}</a>
                <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"><span class="navbar-toggler-icon"></span></button>
                <div class="collapse navbar-collapse" id="navbarSupportedContent">
                    <ul class="navbar-nav ms-auto mb-2 mb-lg-0">
                        <li class="nav-item"><a class="nav-link" href="#">Home</a></li>
                        <li class="nav-item"><a class="nav-link" href="#!">About</a></li>
                        <li class="nav-item"><a class="nav-link" href="#!">Contact</a></li>
                        <li class="nav-item"><a class="nav-link active" aria-current="page" href="#">Blog</a></li>
                    </ul>
                </div>
            </div>
        </nav>
        <!-- Page content-->
        <div class="container mt-5">
 
        </div>
        <!-- Footer-->
        <footer class="py-3 bg-light">
            <div class="container"><p class="m-0 text-center">Regalo , scambia cose</p></div>
        </footer>
        <!-- Bootstrap core JS-->
        <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js"></script>
        <!-- Core theme JS-->
        <script src="{{baseurl}}/js/scripts.js"></script>
    </body>
</html>

Template con logica

Niente di strano. uso solo php :

index.php

<?php
 
	$mystring="Bella giornata!";
	$mynumbers= [1,2,3];
	include "template.php";
 
?>

template.php

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title><?php echo $mystring ?></title>
</head>
 
<body>
<h2><?php echo $mystring ?></h2>
 
<ul>
<?php foreach($mynumbers as $item) : ?>
<li><?php echo $item ?></li>
<?php endforeach ?> 
 
</ul>
 
</body>
 
</html>

programmazione/php/funzione_per_template.txt · Ultima modifica: 01/02/2024 - 11:40 da Fabio Di Matteo