CIE-295

Pierre Ferrari

Introduction

PHP old school

C:\Users\pepito\Downloads>php -v
PHP 8.3.13 (cli) (built: Oct 22 2024 21:07:34) (NTS Visual C++ 2019 x64)
Copyright (c) The PHP Group
Zend Engine v4.3.13, Copyright (c) Zend Technologies
index.php
<?php
require_once 'Person.php';

// Commentaires
$i = 0;

do {
  print $i . PHP_EOL;
  $i++;
} while ($i < 10);

print str_repeat('-', 10) . PHP_EOL;

$tab = [1, "deux" => 2, 3, 4 => "quatre", 5];

foreach ($tab as $key => $value) {
  print "[$key]: $value" . PHP_EOL;
}

$person = new Person('John', 1980);
print $person . PHP_EOL;
print $person->getAge() . PHP_EOL;

array_push($tab, $person);

var_dump($tab);
Person.php
<?php
class Person
{
  public $name;
  public $birthYear;

  public function __construct($name, $birthYear)
  {
    $this->name = $name;
    $this->birthYear = $birthYear;
  }

  public function __toString()
  {
    return $this->name . ' (' . $this->getAge() . ')';
  }

  public function getName()
  {
    return $this->name;
  }

  public function setName($name)
  {
    $this->name = $name;
  }

  public function getAge()
  {
    return date('Y') - $this->birthYear;
  }
}

PHP qui génère du HTML

En utilisant le site des vacances neuchâteloises, on va générer du HTML en PHP en utilisant la librairie

{
  "require": {
      "johngrogg/ics-parser": "^3"
  }
}

Et le code suivant :

try {
  $ical = new ICal("https://www.ne.ch/themes/enseignement-formation/Documents/Calendrier%20de%20Vacances%20scolaire.ics");
} catch (Exception $e) {
  print $e->getMessage() . PHP_EOL;
}

Code complet

Liaison PHP / HTML

Montrer comment Apache et PHP fonctionnent ensemble.

Réaliser un site web php old-school

Les données proviennent de rottentomatoes. Elles se trouvent dans la balise script ld+json.

blablabla
<!-- JSON+LD -->
<script type="application/ld+json">
{"@context":"http://schema.org","@type":"ItemList","url":"https://www.rottentomatoes.com/browse/movies_in_theaters","name":"Movies Out Now in Theaters (2024)","description":"Discovery - Check out Movies Out Now in Theaters (2024) at Rotten Tomatoes!"}

blablabla

</script>

Pour chaque film on instancie un objet Movie avec les propriétés suivantes :

Chaque attribut possède ses getters et setters. S’il y a d’autres valeurs, on n’en tient pas compte.

Le téléchargement des données se fait en utilisant la fonction Utils::loadMovies() qui sera codé par vos soins dans la classe statique Utils.

Toutes les classes se trouvent dans le dossier src.

On affiche les films dans une page web en utilisant des cartes css (flexbox, grid) et une page w3c valide HTML5.

Deux flèches à côté du titre permettent de filtrer les films en fonction de leur position. Le filtrage se fait en PHP après le téléchargement des données.

Code complet

Installation NanoFramework

Utilisation de Laragon déjà préparé pour PHP.

Selon les instructions ici.

Création pas à pas d’un projet nanoFramework en suivant le tutoriel.

NanoFramework, projet carnet d’adresse

En reproduisant les étapes de création présentée dans le tutoriel, réalisez un CRUD pour un carnet d’adresses simple.

Chaque entrée de la base de données comportera les informations suivantes:

Les images de profil seront de simple lien sur une image aléatoire présente dans le dossier img présent à la racine de votre dossier.

Par exemple:

<img src="/img/random1.png" alt="profil">

Option

En utilisant le mécanisme d’upload de fichier, vous pouvez ajouter la possibilité pour l’utilisateur, de choisir une image de profil provenant de son poste.

Exemple de réalisation (Machado da Silva Hugo):

Accueil Edition

NanoFramework, projet Calendrier

En reproduisant les étapes de création présentée dans le tutoriel, réalisez un CRUD pour un calendrier. Le calendrier sera affiché en Javascript avec FullCalendar.

Les événements seront sauvegardés dans la base de données sur le serveur. Chaque événement comporte les champs suivants:

Voici un exemple d’événement:

{
  "title": "Rendez-vous chez le mécanicien",
  "start": "2024-11-02T10:00:00",
  "end": "2024-11-02T10:30:00",
  "allDay": false
}

Le CRUD pourra être réalisé depuis Javascript avec une requête de type fetch ou JQuery $.ajax() ou en passant par des formulaires identiques à ce qui est présenté dans le tutoriel de NanoFramework.

Pour faire transiter les événements du serveur de backend au client Javascript, on peut utiliser la méthode suivante.

  1. Dans le contrôleur de la page d’accueil, on va chercher les événements dans la base de données grâce au model

Contrôleur

$events = $this->model->findAll();
  1. On place les événements dans la vue en tant que variable Javascript

Contrôleur

$this->rawData['events'] = 'const events = ' . json_encode($events);

Vue

<script>{events}</script>
<div id="calendar"></div>
  1. On demande au calendrier d’afficher les événements présent dans la variable

script.js

for(const event of events) {
  calendar.addEvent(event)
}

Exemple de réalisation:

Accueil Edition