PHP & HTML 2
Affichage de la super globale $_SERVER:
<?php
$title = "Page d'accueil";
require 'header.php';
?>
<div class="starter-template">
<h1>Bootstrap starter template</h1>
<p class="lead">Use this document as a way to quickly start any new project.<br> All you get is this text and a mostly barebones HTML document.</p>
<pre>
<?php print_r($_SERVER)?>
</pre>
</div>
<?php require 'footer.php'; ?>
Résultat :
Array
(
[DOCUMENT_ROOT] => /server-name/host/path/domain
[REMOTE_ADDR] => ::1
[REMOTE_PORT] => 33540
[SERVER_SOFTWARE] => PHP/8.4.17 (Development Server)
[SERVER_PROTOCOL] => HTTP/1.1
[SERVER_NAME] => localhost
[SERVER_PORT] => 8000
[REQUEST_URI] => /
[REQUEST_METHOD] => GET
[SCRIPT_NAME] => /index.php // <-- nom du script courant
[SCRIPT_FILENAME] => /server-name/host/path/domain/index.php
[PHP_SELF] => /index.php
[HTTP_HOST] => localhost:8000
[HTTP_USER_AGENT] => Mozilla/5.0 (X11; Linux x86_64; rv:147.0) Gecko/20100101 Firefox/147.0
[HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
[HTTP_ACCEPT_LANGUAGE] => fr,en-US;q=0.9,en;q=0.8
[HTTP_ACCEPT_ENCODING] => gzip, deflate, br, zstd
[HTTP_SEC_GPC] => 1
[HTTP_CONNECTION] => keep-alive
[HTTP_COOKIE] => wordpress_logged_in_2ce8ef472f . . . // --> id des cookies
[HTTP_UPGRADE_INSECURE_REQUESTS] => 1
[HTTP_SEC_FETCH_DEST] => document
[HTTP_SEC_FETCH_MODE] => navigate
[HTTP_SEC_FETCH_SITE] => none
[HTTP_SEC_FETCH_USER] => ?1
[HTTP_DNT] => 1
[HTTP_PRIORITY] => u=0, i
[REQUEST_TIME_FLOAT] => 1770714835.3192
[REQUEST_TIME] => 1770714835
)
Utilisation de la super globale $_SERVER pour générer le titre dynamiquement :
<div class="collapse navbar-collapse" id="navbarsExampleDefault">
<ul class="navbar-nav mr-auto">
<li class="nav-item <?php if ($_SERVER['SCRIPT_NAME'] === '/index.php') : ?>active<?php endif; ?>">
<a class="nav-link" href="/index.php">Accueil</a>
</li>
<li class="nav-item <?php if ($_SERVER['SCRIPT_NAME'] === '/contact.php') : ?>active<?php endif; ?>">
<a class="nav-link" href="/contact.php">Contact</a>
</li>
</ul>
</div>
</nav>
En utilisant une fonction dans header.php:
<?php
function nav_item (string $lien, string $titre)
{
$classe = 'nav-item';
if ($_SERVER['SCRIPT_NAME'] === $lien) {
$classe .= ' active';
}
return '<li class="' .$classe. '">
<a class="nav-link" href="' . $lien .'">' . $titre . '</a>
</li>';
}
// Les guillemets simples délimitent les chaînes PHP au sein des guillemets doubles des attributs HTML
?>
<!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="">
/* ... */
Appel de la fonction nav_item() dans la balisenav:
<nav class="navbar navbar-expand-md navbar-dark bg-dark mb-4">
<a class="navbar-brand" href="#">Mon site</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarsExampleDefault" aria-controls="navbarsExampleDefault" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarsExampleDefault">
<ul class="navbar-nav mr-auto">
<?php echo nav_item('/index.php','Accueil');?>
<?php echo nav_item( '/contact.php','Contact');?>
</ul>
</div>
</nav>
Plus simple avec la syntaxe Heredoc : documentation PHP : heredoc
<?php
function nav_item (string $lien, string $titre)
{
$classe = 'nav-item';
if ($_SERVER['SCRIPT_NAME'] === $lien) {
$classe .= ' active';
}
return <<<HTML
<li class="$classe">
<a class="nav-link" href="$lien"> $titre </a>
</li>
HTML; // !!! ___ /!\ aucune indentation sur la ligne de rappel
}
?>
<!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="">
/* ... */