Logo

Documentation

/home/vhsh1501/documentation.benjamin-bruant.com/wp-content/themes/zetheme/single.phpsingle

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="">
/* ... */