Information  Vous êtes sur mobile ou tablette ? Tenez votre appareil à l'horizontale !

Chargement ...

Framework PHP

Introduction

DWF (DevWebFramework) est un framework PHP ayant pour doctrine :
"Simplicité pour l'utilisateur, liberté pour le développeur"

Prérequis et règles du framework:

  • Disposer d'un serveur WEB et savoir l'utiliser
  • Maîtriser la programmation orienté objet (POO) en PHP
  • Les classes dans les dossiers html/[votre-projet]/class et dwf/class doivent être nommées [nom_de_classe].class.php
    Ces classes seront chargées (incluses) automatiquement. Si vous créez des classes sans cette syntaxe ou dans des sous dossiers, vous devrez les inclure vous même.
  • L'utilisateur ne quitte jamais le fichier html/[votre-projet]/index.php hormis pour les exports PDF/CSV ... qui s'ouvrent dans un nouvel onglet.

Structure

  •   html
    •   Contient vos projets
    •   commun
      •   Contient divers fichiers pour les export PDF/CSV/QRCode et création de nouveaux projets.
      •   src
        •   Contient tous les fichiers CSS et JS communs à tous les projets (et accessibles aux utilisateurs).
      •   service
        •   Contient vos services / API
    •   [votre-projet]
      •   Contient votre index.php ( à ne pas modifier ).
      •   class
      •   Contient vos classes spécifiques au projet ainsi que le fichier de configuration.
        •   entity
        •   Contient les entités de votre projet.
      •   src
      •   Contient vos fichiers CSS, JS, et médias.
        •   compact
        •   Contient vos fichiers CSS et JS minifiés par le framework.
  •   dwf
    •   class
      •   Contient les classes natives de DWF.
    •   cron
      •   Contient vos éventuels cron à faire tourner dans vos consoles.
    •   log
      •   Contient les logs de vos projets.

Nouveau projet

La création d'un nouveau projet est automatisé par le fichier /html/commun/new_app.php accédez à ce fichier par votre navigateur -> localhost
Ce fichier ne peut se lancer que depuis votre localhost. Il n'est pas possible de s'en servir à distance sans en modifier le code.
Une fois l'interface de création de projet ouvert, remplissez les champs correctement. Ces paramètres seront modifiable dans config.class.php

  • Application
    • Nom du dossier (apparait dans l'url) : nom du dossier du projet, il est conseillé de l'écrire en minuscule.
    • Titre de l'application (apparait dans le "title" des pages) : nom réel de votre projet.
    • Préfixe (technique, utilisé pour les sessions, log ...) : le préfixe doit être unique à chaque projet,
      il sert à différencier les sessions et les logs utilisés dans les projets.
    • Hash (hash à utiliser pour chiffrer les mots de passe) : c'est ici que vous choisirez quel algorithme de chiffrement, vous utiliserez pour chiffrer vos mots de passe ou autres clés
      l'algorithme est accessible dans le code via config::$_hash_algo
  • PDO
    • Type : type du serveur MySQL ou SQLite
    • Host : host du serveur SQL
    • Login : nom d'utilisateur
    • Password : mot de passe
    • Database : nom de la base de données
    • Créer la base de données (si elle n'existe pas) : si la case est cochée et que la base de données n'existe pas, alors le framework pourra la créer.
    • Service internes (un dossier de service sera créé dans le projet) : votre projet aura t-il besoin de services "internes" (spécifique) ?
  • SMTP
    • Host : host du serveur SMTP
    • Auth : True si une authentification est requise ( c'est presque toujours le cas )
    • Login : si Auth = true, nom d'utilisateur SMTP
    • Password : si Auth = true, mot de passe SMTP
    • Astuce : si vous n'utilisez pas de SMTP, mettez HOST : localhost et Auth : false

Une fois le formulaire rempli et validé, une notification vous informe du succès de la création et vous redirige vers l'index de votre projet.
Si vous rencontrez des difficultés, verifiez que votre serveur web a bien les droits d'écriture dans le dossier HTML et que le dossier que vous essayez de créér n'existe pas déjà.

Configuration

Une fois votre projet créé, regardons le fichier de configuration,
nous retrouvons les renseignements saisi dans le formulaire de création de projet :

  • public static $_PDO_type
  • public static $_PDO_host
  • public static $_PDO_dbname
  • public static $_PDO_login
  • public static $_PDO_psw
  • public static $_hash_algo
  • public static $_title
  • public static $_prefix
  • public static $_SMTP_host
  • public static $_SMTP_auth
  • public static $_SMTP_login
  • public static $_SMTP_psw

Première chose que l'on peut remarquer : toutes ces variables sont en "public static",
elles sont donc accessibles à tout moment dans le projet depuis config::
Mais intéressons nous aux autres variables :

  • public static $_favicon : chemin d'accès à la favicon du projet
  • public static $_sitemap : si true, un sitemap sera créé pour le projet (les sitemap sont utiles à l'accessibilité et au référencement)
  • public static $_statistiques : si true, des statistiques seront faites sur l'activité des utilisateurs

Et pour finir :

  • public static $_route_auth
  • public static $_route_unauth

Il s'agit des routes de l'application, par défaut il y a des routes pour les utilisateurs authentifiés (route_auth) et d'autres pour les non-authentifiés (route_unauth)
Les routes se définissent dans la fonction config::onbdd_connected() afin de pouvoir etre manipulées à volonté
( ajouter des routes conditionelles, faire gérer les routes par une entité, utiliser la classe trad (traductions), ...)
Une route se définit ainsi :

Pages

La classe "pages" est le point de départ de votre projet et est constitué des éléments suivants :

  • Le constructeur : contient les opérations communes à toutes les pages (génération / mise à jour de fichiers, vérifications sur les données/entités ...)
  • Le header : c'est le haut de page de votre application, elle est commune à toutes les pages (mais vous pouvez utiliser un switch pour créer une entête à chaque page)
  • Le footer : le pied de page, souvent commune à toutes les pages, contient généralement: date de création, contacts, les mentions légales, CGU ...
  • Les fonctions liées au routes : ces fonctions doivent être publiques, le nom de la fonction doit correspondre à la valeur de la clé "page" d'une route
  • Des fonctions privées : rien ne vous empêche de créer des fonctions privées dans pages qui seront appelées dans le constructeur ou dans les fonctions publiques liées au routes

Dans les méthodes de "pages", vous êtes entièrement libres :
saisir du HTML, appeler des fonctions privées de pages, appeler vos "classes métiers", une classe native de DWF ou n'importe quelle autre fonction statique

Classes metiers

Les classes dites "métiers" sont les classes spécifiques à votre projet que vous aurez vous mêmes créé dans le dossier html/[votre-projet]/class/,
contrairement à d'autres framework comme "symfony" ces classes ne nécessitent pas d'être étendues d'une classe natif de DWF.
vous êtes libre de lui donner le nom que vous voulez ( sauf un nom déjà pris par une classe native ou une de vos entités)
libre d'utiliser des "méthodes magiques" tels que les constructeurs, destructeurs...
La seule restriction est le nom du fichier qui doit être comme ceci : [nom_de_votre_classe].class.php.
Une fois votre classe créée, vous pouvez l'appeler et l'utiliser dans pages.class.php

Methodes evenementielles

Pour créer des évenements liés à votre application, préviligiez l'utilisation de event.class.php.
Elle permet de créer et déclencher des évenements de manière plus stable et avec un meilleur contrôle.
(cf classes natives > event)

Utiliser les méthodes événementielles

Les méthodes événementielles sont des méthodes qui seront appelées lors d'un événement précis du framework, utilisation :

Comme indiqué, ces methodes doivent être en public static, elles peuvent étre utilisées dans n'importe quel classe SAUF les entités.
Ces méthodes ne prennent pas de paramètres et ne retourne rien.

ATTENTION : Depuis la version 21.17.12,
pour que les methodes évenementielles se déclenchent, la classe concernée doit avoir été appelée au moins une fois avant le déclencheur.
(instanciation ou appel d'une méthode statique)

Créer un déclencheur

Il est possible de créer vos propres déclencheurs d'événements grâce à la méthode.

Losque cette instruction sera appelée, toutes les méthodes public static mon_evenement() présentes dans les classes seront executées.

Entity

Note de version 21.24.04 :
Comme expliqué plus en détail dans la section BDD la gestion des requetes a changé,
il est recomandé de regénérer vos entity si elles ont été généré avant cette verssion !

Les entités font office d'ORM dans votre projet,
une classe entité vous permet de lire, ajouter, modifier ou supprimer des entrées de votre base de données sans avoir à saisir une requête SQL
(ormis une eventuelle condition "where" ). Les entités exploitent un objet bdd accessible via application::$_bdd
les entités seront capable de recréer la structure de leur base de données si celle-ci est perdue (mais ne permettent pas de sauvegarder les données ).

Créer des entités

La création d'une entité est simple, il est conseillé de mettre la création d'entité soit dans le constructeur de pages.class.php
soit dans le constructeur de la classe métier qui exploitera cette entité. Voici le code (consultez la documentation technique pour plus d'informations)

Créer des relations entres les entités et astuces pour créer plusieurs entités facilement

MAJ 21.18.02

Depuis la version 21.18.02, il est possible de créer l'ensemble de vos entités ainsi :

Utilisation des entités

Une fois les entités créées, elles peuvent être utilisées (nous utiliserons l'exemple des 'user' et 'rang')

ATTENTION : si vous utilisez des variables dans les paramètres $where :
utilisez le tableau $params afin d'utiliser les requêtes préparé et vous protéger des injections SQL
pensez également à la fonction strip_tags pour vous protéger des failles XSS.

Les types de champ/attribut

Type (code PHP) Type (SQL) Description
int, integer int(11) un champ de nombre entiers
bool, boolean int(1) 0 ou 1
string text un champ de texte, peut contenir aussi du HTML, des dates, ou des nombres
mail text un champ de texte pour les mail, une verification est faite en PHP par l'entité avant l'enregistrement en base de données
array text (depuis la version 21.18.03) un champ de texte JSON, les conversions de array (coté PHP) en JSON (coté SQL) et inversement sont gérées en PHP par l'entité.
Inutile donc d'utiliser json_encode() et json_decode()

Bdd

Avant le verssion 21.24.04, une fonction dans BDD (bdd::p()) permetait de securiser les variables contre des injections SQL .
Une évaluation de cette protection a révélé certaines faiblaises.
Depuis la version 21.24.04 les requetes sont protégé par le système de prépararation et execution, plus robuste.

L'objet bdd est l'objet qui permet de gérer la connexion à la base de données et sécuriser les requêtes SQL.
Cet objet utilise les informations PDO qui sont renseignées dans le fichier de configuration.
Vos entités et de nombreuses classes native de DWF exploitent cette objet.

Classes natives

Voici quelques classes natives de DWF et quelques exemples d'utilisation, pour plus d'informations, chaque classe et fonction sont commentées (document technique)
si une classe/fonction a mal été commentée ( ou pas du tout commentée), merci de nous le signaler.
(il s'agit de quelques unes des classes les plus utiles du framework, le framework compte plus de 115 classes natives)

Admin_controle

admin_controle

admin_controle est une classe permettant de créer une interface d'administration "user-friendly",
Cette classe est destinée à être utilisée dans une partie "administration" du site.
Cette classe affiche l'administration d'une table de la base de données,
elle a besoin de l'entité de cette table pour fonctionner et sait gérer les relations entre les tables.

Si l'entité contient un champ "array", ce champ n’apparaitra pas dans les datatables.
Dans les formulaires, les données de ce champ seront accessible en JSON dans un input de type hidden.
Vous devrez créer une interface en JavaScript pour administrer ce champ à votre convenance (en manipulant la chaine JSON).

Application

Cette classe fait office de contrôleur et layout pour l'application,
elle fait la liaison entre les routes et les pages (cf configuration et pages)
et met à disposition quelques outils :

  • Instancie la connexion à la base de données par un objet bdd accessible via application::$_bdd (cf bdd)
  • Permet d'utiliser des méthodes évènementielles à partir de application::event() (cf : méthodes évènementielles)

Audio

Cette classe permet de générer un lecteur audio.

10

10

Crédits : InYourDreams (Newgrounds)

Auth

Auth est la classe qui gère l'authentification des utilisateurs,
il prend en paramètres : le nom de la table/entité utilisateur ( dans cette documentation : 'user'), le nom du champ de login ('login'), le nom du champ de mot de passe ('psw').
auth utilise deux variables de sessions accessibles via la classe "session"
(session::set_auth(),session::get_auth(),session::set_user() et session::get_user())
lorsque l'utilisateur est authentifié, session::get_auth() retourne true et session::get_user() contient l'identifiant de l'utilisateur (id de la base de données)
sinon session::get_auth() et session::get_user() retourne false et auth affiche un formulaire d'authentification.

Bootstrap_theme

Cette classe permet de gèrer les thèmes de bootswatch,
le thème par défaut peut être défini dans config.class.php

Cache

Cette classe permet de gérer une mise en cache ( côté serveur )
utilise session::set_val("cache",[ ]) et session::get_val("cache")

Captcha

Cette classe génére un captcha,
Utilise la classe espeak pour l'accessibilité,
requiert donc espeak installé sur le serveur.
cette classe peut être appellée depuis form->captcha()

Resultat :
Captcha Lire le captcha 

Cards

Cette classe permet de gérer un paquet de 32, 52, 54 ou 78 cartes

Contenu d'un paquet de 52 cartes :

10♣ 10♦ 10♥ 10♠ 2♣ 2♦ 2♥ 2♠ 3♣ 3♦ 3♥ 3♠ 4♣ 4♦ 4♥ 4♠ 5♣ 5♦ 5♥ 5♠ 6♣ 6♦ 6♥ 6♠ 7♣ 7♦ 7♥ 7♠ 8♣ 8♦ 8♥ 8♠ 9♣ 9♦ 9♥ 9♠ A♣ A♦ A♥ A♠ J♣ J♦ J♥ J♠ K♣ K♦ K♥ K♠ Q♣ Q♦ Q♥ Q♠

Contenu d'un paquet de 78 cartes :

1☆ 10♣ 10♦ 10♥ 10♠ 10☆ 11☆ 12☆ 13☆ 14☆ 15☆ 16☆ 17☆ 18☆ 19☆ 2♣ 2♦ 2♥ 2♠ 2☆ 20☆ 21☆ 3♣ 3♦ 3♥ 3♠ 3☆ 4♣ 4♦ 4♥ 4♠ 4☆ 5♣ 5♦ 5♥ 5♠ 5☆ 6♣ 6♦ 6♥ 6♠ 6☆ 7♣ 7♦ 7♥ 7♠ 7☆ 8♣ 8♦ 8♥ 8♠ 8☆ 9♣ 9♦ 9♥ 9♠ 9☆ A♣ A♦ A♥ A♠ C♣ C♦ C♥ C♠ Excuse J♣ J♦ J♥ J♠ K♣ K♦ K♥ K♠ Q♣ Q♦ Q♥ Q♠

Change_reload

Cette classe permet de recharger automatiquement la page courante lorsqu'une classe metier est modifiée dans le dossier /class/ de votre projet
(Cette classe est déconsillée en production)

Check_password

Cette classe permet d'appliquer une politique de mot de passe

Démonstration du message d'erreur (avec au moins un caractère special obligatoire)

Erreur ! votre mot de passe :

  • Requiert 8 caractères au minimum
  • Requiert au moins un caractère spécial
  • Requiert au moins un chiffre
  • Requiert au moins une majuscule
  • Requiert au moins une minuscule

Il est possible de modifier les messages avant d'appeler print_errormsg() :

Citations

Cette classe affiche une citation célèbre à chaque chargement de page.
Les citations se trouvent dans dwf/class/citations/citations.json
Vos contributions sont les bienvenues.

Résultat :

Nous sommes tous frères sous la peau, et j’aimerais écorcher l’humanité pour le prouver Ayn Rand

Ckeditor

Cette classe est exploitée par la classe form (cf. form)

Deprecié depuis la verssion 21.24.10, usilisez plutot TinyMCE

Cli

Cette classe est utile pour les CLI (cf. CLI)

Compact_css

Compresse des scripts CSS en deux fichiers minifié

La méthode "render()" est utilisée automatiquement dans html5.class.php, il n'est pas utile de l'appeler

Cookieaccept

Cette classe permet d'afficher un message d'informations sur l'utilisation de cookies ou autre technologies similaires.
Cette ligne est à placer dans pages->header()

Css

Cette classe permet de génerer des feuilles de style personalisées.
A utiliser avec "compact_src::get_instance()->add_style()"

La feuille de style retournée sera optimisée et minifiée,
dans l'exemple nous voyons que "p" et "div" ont la même règle de padding, elles seront donc fusionnées.
Voici le resultat :

div{margin:0 auto}#mon_id{background-color:#add8e6}p,div{padding:5px}

Cytoscape

Il est préférable d'appeler cette classe via (new graphique())->cytoscape() (cf. graphique) Cette classe affiche un graphe d'analyse et de visualisation (utilise la librairie jquery cytoscape)
(Requiert une règle CSS sur l'ID CSS)

Datatable

Cette classe permet de convertir un tableau HTML en datatable (jquery)
il est préférable de l'appeler via js::datatable() (cf js)

Ddg, ddg_api

La classe ddg permet d'exploiter le moteur de recherche DuckDuckGO

Résultat :

ddg_api Object
(
    [_Abstract:ddg_api:private] => 
    [_AbstractText:ddg_api:private] => 
    [_AbstractSource:ddg_api:private] => 
    [_AbstractURL:ddg_api:private] => 
    [_Image:ddg_api:private] => 
    [_ImageWidth:ddg_api:private] => 
    [_Entity:ddg_api:private] => 
    [_meta:ddg_api:private] => 
    [_Heading:ddg_api:private] => 
    [_Answer:ddg_api:private] => 
    [_Redirect:ddg_api:private] => 
    [_AnswerType:ddg_api:private] => 
    [_Definition:ddg_api:private] => 
    [_DefinitionSource:ddg_api:private] => 
    [_DefinitionURL:ddg_api:private] => 
    [_RelatedTopics:ddg_api:private] => 
    [_Results:ddg_api:private] => 
    [_Type:ddg_api:private] => 
    [_Infobox:ddg_api:private] => 
    [_ImageIsLogo:ddg_api:private] => 
    [_ImageHeight:ddg_api:private] => 
)

Debug

Cette classe est une boîte à outils de débogage

Dictionary

Cette classe permet de convertir et gérer une liste lourde comme étant un dictionnaire

Dlc

Cette classe permet de générer des fichiers :

  • DLC (Download Link Container, recommandé)
  • CCF (CryptLoad Container File)
  • RSDF (RapidShare Download File)

Servant de librairie de téléchargement pour des logiciels comme JDownloader

Downloader

Cette classe permet à l'utilisateur de télécharger un fichier spécifique sur le serveur

Dwf_exception

Cette classe gère les exceptions du framework
les codes d'erreurs des exceptions natives du framework sont compris entre 600 et 699 :

  • les codes d'erreurs 60X concernent la base de données
  • les codes d'erreurs 61X concernent les routes et méthodes
  • les codes d'erreurs 62X concernent les services
  • les codes d'erreurs 63X concernent le système

Il est cependant possible pour vous de créer des exceptions personnalisées avec dwf_exeption :

Les exceptions sont toujours retranscrites dans un log : dwf/log/log_[votre_projet]_[date_format_us].txt

Exemple de dwf_exception::warning_exception() :

Easteregg

Cette classe permet d'afficher des "oeufs de Pâques" qui s'affichent à certaines dates de l'année.
Liste des dates :

  • 31/12 et 01/01 : Jour de l'an, affiche une guirlande interactive (les ampoules éclatent au survol de la souris)
  • 06/01 : Epiphanie, affiche une couronne des rois en pied de page
  • 14/02 : Saint Valentin, une pluie de coeurs sur le site
  • 21/03 : Printemps, des pétales de cerisiers tombent sur le site
  • 01/04 : Poisson d'Avril ! un poisson animé traverse l'écran
  • 01/05 : Fête du travail, une couronne de muguet en pied de page
  • Entre le 25/05 et 31/05 : Fête des mères (dernier dimanche de mai), un collier de nouilles "bonne fête maman" en pied de page
  • 21/06 : Été, la lueur chaude du soleil apparait en pied de page
  • Entre le 16/05 et 22/06 : Fête des pères (troisième dimanche de mai) un modal avec le diplôme du père de l'année apparait (qu'une fois par session)
  • 14/07 : Fête Nationale française, des feux d'artifices sont tirés sur le site
  • 23/09 : Automne, des feuilles mortes tombent sur le site
  • 25/11 : Sainte-Catherine, un chapeau de Sainte-Catherine en pied de page
  • Du 22/12 aux 25/15 : Hiver et Noël, des flocons de neiges tombent sur le site

Astuce : une interface pour activer les eastereggs peut être affichée en tapant le "Konami code" : ↑ ↑ ↓ ↓ ← → ← → B A

Pour activer les eastereggs sur toutes les pages, placez cette ligne dans pages->header()

Entity_generator

(cf Entity)

Entity_model

Cette classe permet d'afficher des pseudos MCD à partir de vos entités

Résultats :

- entity_model::table("user") :

user
Champ Type
id int
login string
psw string
# rang
rang
Champ Type
id int
nom string

- entity_model::div("user") :

user

  • id (int)
  • login (string)
  • psw (string)
  • # rang

    rang

    • id (int)
    • nom (string)

Espeak

Cette classe convertit un texte en flux audio.
/!\ Nécessite que espeak soit installé sur le serveur.
http://espeak.sourceforge.net/

Résultats :

Event

Cette classe permet de créer des événements (listener et emiter)
l'utilisation de cette classe différe des "méthodes événementielles" dans la mesure où ces dernières font appel à des methodes "statiques" d'autres classes.

Export_dwf

Cette classe permet de générer une archive ZIP contenant les fichiers nécessaires à un projet DWF,
en fonction des dépendances enregistrées dans un fichier JSON spécifique à chaque projet.
Ce fichier JSON est consultable dans dwf/class/export_dwf/.
export_dwf est normalement autonome et ajoute vos dépendances tout au long de votre développement.
L'export inclura tous les fichiers contenus dans votre dossier projet (à l'exception des CSS dans src/compact).
Cependant, si vous désirez inclure un fichier ou un dossier spécifique à votre projet lors de l'export :

Il est déconseillé d'instancier export_dwf car son instanciation est réservée à l'export depuis html/index.php.
De même, les autres fonctions statiques sont utilisées en interne de la classe.

Fancybox

(cf js)

Fb

Cette classe permet de gérer une authentification via FaceBook.
Requiert la création d'une application sur https://developers.facebook.com/
Exemple d'usage :

File_explorer

Cette classe permet d'afficher et explorer une arborescence

Résultat :

Fluent

Cette classe permet de rendre une autre classe pseudo-fluent.

Form

La classe form permet de créer des formulaires en php stylisés par bootstrap, accessibles et respectant les normes W3C

Première méthode : création et rendu

Seconde méthode : affichage direct

Résultat (visuel uniquement, exécution désactivée):

Freetile

Organise dynamiquement les sous éléments d'un conteneur avec la librairie jquery "freetile".
Il est préferable d'appeler cette librairie via js::freetile()
Les sous éléments peuvent être des images ou des DIV de différentes tailles.

Ftp_explorer

Cette classe permet d'afficher et explorer une arborescence FTP PUBLIQUE
le compte FTP renseigné dans cette classe ne doit avoir que des droits de consultation ( aucun droit d'ajout/modification/suppression)
le rendu est le même que file_explorer()

Fullcalendar

Cette classe permet d'afficher un Fullcalendar
https://fullcalendar.io/

Exemple

G_agenda

Cette classe permet de gérer un agenda d'évènements minimalistes,
souvent utilisé pour avertir des visiteurs des prochains évenements
(salons, conventions, spectacles, ...)

G_elFinder

Cette classe affiche le gestionnaire de fichiers elFinder
Il n'est pas recommandé de mettre deux instances de cette classe dans une même page
Pour autoriser un utilisateur à utiliser elFinder, vous devrez utiliser session::set_val("elFinder", true);
Cf : le fichier connector.php (généré par cette classe) pour plus de détails et options)

Gestion_article

Cette classe permet de gérer et afficher des articles

Giphy

Cette classe permet de retourner des Gifs de l'API GIPHY

Afin d'etre utilisatble, la clé api doit etre renseigné dans config.class.php ainsi :

Usage :

Git

Utilisez GIT depuis PHP (requiert GIT sur le serveur) https://github.com/kbjr/Git.php

Google_oauth

Cette classe permet de gérer une authentification via Google
Requiert la création d'une application sur https://console.cloud.google.com/apis/credentials

Graphique

Cette classe permet de créér des graphiques.

Résultats :

PIB 2016

Html5

Cette classe gère l'en-tête HTML5 et son pied de page.
Cette classe est utilisée automatiquement par le framework dans application.class.php
Les balises : title, meta description et meta keywords peuvent être modifiées grâce aux fonctions suivantes :

Html_structures

html_structures est une classe qui permet de créer des structures HTML en PHP,
Ces structures respectent les normes W3C et répondent à quelques normes d'accessibilité
Exemple :

Résultat :

Méthodes (toutes static) :

Méthode Description
table Retourne un tableau à partir d'un array d'entête et d'un array à deux dimensions comprenant les données
ul, ol, dl Retourne une liste au format HTML à partir d'un array ( prend en compte l'imbrication des arrays)
a_link Retourne un lien
Ancre Retourne une ancre a
img Retourne une image img
figure Retourne une figure ( illustration et légende )
new_map, area et close_map Mapping d'image
media Retourne les données passées en paramètres sous forme de média (bootstrap)
glyphicon Retourne un glyphicon (avec un texte alternative)
hr Retourne un séparateur horizontal
time La balise time permet d'afficher une date avec une valeur SEO sémantique
link_in_body Permet de faire appel à une balise LINK dans le body
script_in_body Permet de faire appel à une balise SCRIPT dans le body
script et link Sont utilisés par le framework (dans html5.class.php)
popover Permet d'afficher un lien avec un popover
parallax Permet d'afficher une DIV qui aura un effet de parallaxe

Http2

Cette classe permet de gérer le header LINK de http/2.0
elle n'est active que si le protocole http/2 est actif
si c'est le cas sont renseignés d'office :

  • Les liens du menu (prérender)
  • Les fichiers css et js appelés depuis html_structure (preload)

Ip_access

Cette classe sert à blacklister une liste de plages d'adresses IP en les redirigeant vers un autre site

Ip_api

Cette classe permet de récupérer des informations sur une adresse IP (géolocalisation, opérateur...).
Attention, json() est limité à 45 requêtes par minute,
batch() est limité à 15 requêtes par minute et 100 IP max par requête. (Cf https://ip-api.com)

Attention pour json_browser() et batch_browser() : les informations transiteront par le navigateur du client !
Les informations peuvent être altérées !

Js

La classe js permet d'exploiter un grand nombre de librairies javascript intégrées à DWF notamment pour les appliquer à des éléments html de la page.

js::before_title

Ajoute un préfixe au titre (balise title) de la page en cours.

js::alert

Affiche un message à l'écran de l'utilisateur

js::alertify_alert

Affiche un message à l'écran de l'utilisateur (utilise la librairie alertyfy)

js::alertify_alert_redir

Affiche un message à l'écran de l'utilisateur avant redirection (utilise la librairie alertyfy)

js::log_std

Affiche un message de log (standard) à l'écran de l'utilisateur (utilise la librairie alertyfy)

js::log_success

Affiche un message de log (de succès) à l'écran de l'utilisateur (utilise la librairie alertyfy)

js::log_error

Affiche un message de log (erreur) à l'écran de l'utilisateur (utilise la librairie alertyfy)

js::redir

Redirige l'utilisateur vers l'url renseignée en paramètre (peut être un chemin relatif)

js::timer

Affiche un timer avant redirection

Résultat :

js::ckeditor

(cf form)

js::jsqr

Cette classe permet de lire un QRCode depuis une caméra et afficher le résultat dans un élément HTML.
Si l'élément HTML est un input alors le résultat deviendra la valeur de l'input.
Il est déconseillé d'utiliser cette classe plusieurs fois dans la même page

js::vTicker

Créé un vTicker (suite de phrases qui défilent)

js::datatable

Transforme un tableau HTML en Datatable

Résultat :

# Film Année Genre Entrées (France)
1 La Ligne Verte 1999 Fantastique, Drame 1 714 080
2 Le Cinquième Élément 1997 Science-Fiction 7 727 697
3 Matrix 1999 Action, Science-Fiction 2 426 543
js::monaco_highlighter

Afficher du code formaté et stylisé par la librairie SyntaxHightlighter
code :

<?php
js::monaco_highlighter('<?php\n'
    .'//mon code php\n'
    .'$"."a='Hello World';\n'
    .'echo $"."a;\n'
    .'?>', "php"); 
?>

Résultat :

(Vous l'aurez compris, cette documentation utilise beaucoup de monaco_highlighter)

js::fancybox

Cette classe permet l'affichage de galeries photos et vidéos via la librairie Fancybox
la clé "caption" dans le tableau $data est facultative.

<p>Logo PHP</p>
<p>Logo Cordova</p>
js::freetile

(cf freetile)

js::stalactite

Organise dynamiquement les sous éléments d'un conteneur avec la librairie jquery "stalactite"

js::shuffle_letters

Applique l'effet "shuffleLetters" à un élément au chargement de la page

js::dialog

Affiche la boite de dialogue de jquery-ui

js::accordion

Applique un effet accordéon à une structure

Résultat :

accordéon1

contenu accordéon 1

sous accordéon 1

contenu sous accordéon 1

sous accordéon 2

contenu sous accordéon 2

accordéon 2

contenu accordéon 2

(Vous l'aurez compris, cette documentation utilise beaucoup d'accordéons)

js::menu

Transforme une liste ul>li en menu

Résultat :

js::slider

Affiche le carousel/slide de bootstrap

Résultat :

js::wled

Cette classe permet d'exploiter l'API HTTP de WLED

Leaflet

Cette classe permet d'afficher une carte exploitant OSM (OpenStreetMap)

Log_file

Cette classe permet de créer un log sous forme de fichiers.
Elle vous permet d'enregistrer les comportements anormaux de votre application
Selon vos paramètres, le log est écrit dans dwf/log/log_[votre_projet]_[date_format_us].txt ou dwf/log/log_[votre_projet].txt

Log_mail

Cette classe permet de vous envoyer automatiquement un mail en cas de comportement anormal de votre application

Lorem_ipsum

Cette classe permet de générer un faux texte (Lorem ipsum)
Le texte est généré depuis le vocabulaire du texte de Cicero : De finibus.
Sources :
Liber Primus
Oeuvre complète

Resultat (lorem_ipsum::generate(100, true)) :

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Angusti referatur vituperandae disserendum splendore officia iucunditas vi voluerint aetatis disciplina deleniti interpretum petentium interpretaris amorem patientia exquirere inprobitatem cadere ei eo dialectica tite scribentur nostras terminari optimum captet repellere, dicam orestem invidi parum illi bonae necesse obiecta debeo atomis fingitur delicata eam traditur omni defatigatio ii doceat sinat, splendido iudicandum, equos constringendos satisfacit audivi oculis fugiat disputandum novum patriam dum statuam maximisque beatae genus formidines patriam arbitratu pauca istam mediocriterne causae frui politus arbitrarer disputari censes erant reprimique grate tractat. Tenetur stultorum quoque consilia agatur quosvis vitiis priventur consedit leviora brevi.

Lurl

Cette classe permet de générer des liens LURL ou un bouton LURL sponsorisé qui redirige vers la page courante LURL

Mail

Cette classe vous permet d'envoyer un mail depuis votre application en une ligne de code (utilise les paramètres SMTP de config.class.php)

MaskNumber

Cette classe permet de formater l'affichage d'un nombre dans un INPUT de type text

Attention ! maskNumber::set() doit être executé avant l'exécution du formulaire !
Résultat :

Math

Cette classe contient quelques méthodes statiques mathématiques de base ainsi que des fonctions pour vérifier le type de variables

Messageries

Cette classe gère la messagerie, elle permet d'envoyer, de réceptionner ou de supprimer un message entre les utilisateurs de l'application.

Modal

"Modal" est une classe permettant d'afficher des modals (appelées aussi layout ou pop-in). Une "modal" s'ouvre lors d'un clic sur un lien lui correspondant

Résultat :

Cliquez ici pour ouvrir la modal

Monaco_editor

Cette classe génère un monaco_editor afin d'editer le code du projet courant

/!\ cette classe est à placer précautionneusement dans une partie administration restreinte !

Monaco_highlighter

(cf js)

Openweather

Cette classe permet d'afficher la météo d'une ville en temps réel (utilise openweather et nécessite une clé API)

Le résultat est le suivant (exemple fictif) :

Météo de [$city] ()
Ciel clair
Température : 19°C
Pression : 1016 Hpa
Humidité : 51%
Vent : 10km/h, 120.0° (Sud-Est)

Pagination

Cette classe gère la pagination dans une page

Paypal

Cette classe permet de créer, vérifier et exécuter des paiements via l'API REST de PayPal

Exemple d'utilisation :

Plus de renseignements dans la documentation technique et sur PayPal Developer

Php_finediff

Permet d\'afficher les différences entre deux chaines de caractères

Texte de départfinal

Php_header

Cette classe permet de modifier le header HTTP

Php_siple_formatter

Cette classe permet de formater (réindenter) du code php/html/js

Phpini

Cette classe permet de gérer des profils de configuration PHP (comme avoir plusieurs fichiers php.ini interchangeable à volonté)

Printer

Cette classe permet l'export de données aux formats PDF, CSV ou QRCode,
le script d'export est html/commun/printer.php

Pseudo_cron

Cette classe permet de lancer des "pseudo cron",
contairement à des vrais cron qui s'executent à des heures fixes planifiées par le système,
ici les pseudos cron s'exécutent : lors d'une activité utilisateur et s'il n'a pas été exécuté depuis un certain temps défini.

L'intéret des cron étant de pouvoir lancer des opérations lourdes à un rythme régulier sans ralentir l'utilisateur
il est possible de lancer un pseudo cron de façon "asynchrone" en utilisant un service et la methode service::HTTP_POST().

Les pseudos cron sont renseignés dans un registe ( soit un fichier json soit une table en base de données )
une entrée est supprimée si elle n'est pas mise à jour (exécutée) pendant 1 an, cette durée peut être modifiée via la méthode

Ratioblocks

Cette classe permet d'afficher un bloc css avec les proportions passées en paramètres.

Reveal

Cette classe permet de créer un diaporama avec la librairie reveal
Il n'est pas recommandé d'avoir plusieurs diaporamas sur la même page.

ReversoLib

Cette classe utilise l'API de Reverso pour corriger un texte et vous affiche les corrections à appliquer au texte grâce à la librairie finediff.

Un texte avec une grosse fotefaute

Robotstxt

Cette classe génére le robot.txt
elle est appelé par html5.class.php
inutile de l'instancier d'avantage.

Schoolbreak

Affiche un tableau des vacances scolaires

Vacances Debut Fin
Vacances d'Hiver 08/02/2025 24/02/2025
Vacances de Printemps 05/04/2025 22/04/2025
Pont de l'Ascension 29/05/2025 02/06/2025
Vacances d'Été 05/07/2025 01/09/2025
Vacances de la Toussaint 18/10/2025 03/11/2025
Vacances de Noël 20/12/2025 05/01/2026
Vacances d'Hiver 14/02/2026 02/03/2026
Vacances de Printemps 11/04/2026 27/04/2026
Pont de l'Ascension 14/05/2026 18/05/2026
Début des Vacances d'Été 04/07/2026 04/07/2026

ScraperAPI

Cette classe permet de faire appel à ScraperAPI
https://scraperapi.com

Attention, le scraping est une pratique faisant l'objet de nombreux flous juridiques.
L'utilisation de méthodes de scraping à des fins malveillantes peuvent constituer une infraction pénale.
Les développeurs de DWF se dégagent de toutes responsabilités en cas d'utilisation frauduleuse de cette classe.

SelectorDOM

Source https://github.com/tj/php-selector
"selectorDOM" permet de manipuler le DOM d'un document en PHP.

Résultat :

Array
(
    [0] => stdClass Object
        (
            [name] => header
            [attributes] => stdClass Object
                (
                    [class] => page-header bg-info
                )

            [text] => 
        DocumentationDocumentation de DWF
      
    
            [children] => Array
                (
                    [0] => stdClass Object
                        (
                            [name] => h1
                            [attributes] => Array
                                (
                                )

                            [text] => 
        DocumentationDocumentation de DWF
      
                            [children] => Array
                                (
                                    [0] => stdClass Object
                                        (
                                            [name] => br
                                            [attributes] => Array
                                                (
                                                )

                                            [text] => 
                                            [children] => Array
                                                (
                                                )

                                        )

                                    [1] => stdClass Object
                                        (
                                            [name] => small
                                            [attributes] => Array
                                                (
                                                )

                                            [text] => Documentation de DWF
                                            [children] => Array
                                                (
                                                )

                                        )

                                )

                        )

                )

        )

)

Service

La classe service est une classe qui permet de communiquer avec des services web d'un tiers ou que vous aurez vous même créé.

Session

La classe session permet de gérer les variables de sessions liées au projet courant,
cette classe créée vos variables en exploitant config::$_prefix

Shuffle_letters

(cf js)

Singleton

Cette classe sert de base pour créer des singleton.
la méthode "get_instance" retournera toujours la même instance.

Sitemap

Cette classe (singleton) gère les sitemaps de vos projets.
Elle permet d'ajouter, de supprimer et de générer des sitemaps au format XML.
Elle offre également des fonctionnalités pour afficher les URLs dans une liste HTML.
Les URLs peuvent étre supprimé via une interface d'administration.

sitemap::get_instance()->add_url() est automatiquement appelé dans html5.class.php, inutile de l'utiliser.
Seules les URL "publiques" de votre projet sont référencées dans le sitemap, les pages nécessitant une authentification ne le seront pas.
config::$_sitemap doit être défini à true pour que la classe référence les liens publics.

Sms_gateway

Cette classe permet de faciliter l'utilisation d'un gateway SMS afin de pouvoir envoyer des SMS depuis une application Web.
Cette classe a été conçue pour fonctionner par défaut avec le logiciel SMS Gateway installé sur un appareil Android.
SMS Gateway
Si vous utilisez un autre programme, veuillez à adapter les paramètres en conséquence.

Sql_backup

La classe sql_backup permet de créer des backup quotidiens de la base de données
les backup peuvent être stockés sur un disque dur (différent du disque de l'application) ou sur un (s)ftp distant
il est recommandé de placer la ligne de sql_backup dans le constructeur de pages.class.php

Sse_sender

Cette classe permet l'envoi de SSE (Server-Sent Events)
Optimisé pour http/2 et supérieur

Côté client, JS

Stalactite

(cf js)

Statistiques

Cette classe permet de recueillir et d'afficher des statistiques liées à l'activité des utilisateurs.
Les statistiques sont stoqué pour 5 ans maximum
la classe utilise ip_api pour déterminer le pays et l'operateur de l'utilisateur config::$_statistiques doit être définis a true pour que les statistiques soit enregistré

Sub_menu

La classe sub_menu vous permet de créer un sous-menu en utilisant un système de "sous-routes"

Tags

Cette classe permet de créer et manipuler des balises HTML avant de les afficher.

Note 21.18.08 : dès sa création, cette classe est devenue centrale dans la génération de HTML dans les classes natives du framework.
Utiliser cette classe permet d'obtenir un code 100% PHP plus lisible et plus facile à maintenir qu'un code PHP "entrecoupé" de codes HTML.
Les impacts négatifs de cette classe sur l'utilisation de la mémoire et le temps d'exécution de PHP sont très faibles.
Bien entendu l'utilisation de cette classe dans vos projets et classes métiers reste facultative

Usage :

Exemple :

Code :

Résultat :

Ma liste de fruit

  • Pomme
  • Pêche
  • Poire
  • Abricot

Task_manager

Cette classe permet de gérer les tâches planifiées.
Contrairement à un pseudo cron qui dépend de l'activité des utilisateurs,
les tâches planifiées sont lancées à une heure précise, mais cela nécessite l'exécution permanente d'un script en CLI.

Initialisation

La méthode statique suivante doit être appelée dans votre projet,
cela initialisera une table et une entité "task" ainsi qu'un dossier "task_worker" dans votre projet.

Workers

Un worker est une classe qui sera utilisée pour effectuer une tâche précise,
Exemple :

  • Envoyer des mails
  • Nettoyer/sauvegarder la base de données
  • Lancer des audits et créer des rapports

Il doit être placé dans le dossier "task_worker" et se nommer "[nom_du_worker].worker.php"

Exemple de worker (affiche un hello world dans la console)

A noter que les classes du framework sont accessibles depuis les workers, un worker peut donc faire appel au task_manager pour programmer une nouvelle tâche (en cas d'erreur par exemple).
Exemple : votre worker doit envoyer un mail, l'envoi échoue car le SMTP est indisponible, vous pouvez capturer l'erreur pour programmer une nouvelle tentative d'envoi dans 1 heure.

Utilisation (dans le projet)
Execution

Pour lancer le script d'exécution des tâches, il faut ouvrir un terminal et exécuter la commande suivante :

Template

Cette classe permet d'utiliser des templates en utilisant la librairie Smarty

Les templates doivent étre créés dans le dossier html/[votre-projet]/class/tpl
ce dossier peut être créé par la classe template si vous ne le créez pas au préalable
le ficher de template doit être un fichier .tpl ( exemple mon_template.tpl)
les droits en écriture sur le dossier html/[votre-projet]/class/tpl.compile doivent être donnés au service web

exemple, ficher mon_template.tpl

Appel du template dans le code php (pages.class.php par exemple)

Tenor

Cette classe permet de retourner des Gifs de l'API TENOR

Afin d'etre utilisable, la clé api doit etre renseignée dans config.class.php ainsi :

Usage :

Time

La classe "time" permet d'effectuer des calculs sur les dates et des conversions de format de dates US <=> FR

Tinymce

Cette classe est exploitée par la classe form (cf. form)

Tor

Cette classe permet de recupérer une ressource en passant par tor

Trad

Cette classe permet de créer des traductions à partir de clés,
l'administration de clés=>traductions se fait par une interface à placer dans la partie administration de l'application.
le langage de l'utilisateur est défini dans session::get_lang() (peut être modifié par session::set_lang())
Les traductions peuvent être gérées en base de données (par défaut) ou par des fichier JSON (CF : paramètres du constructeur)

Update_dwf

Cette classe permet de gérer les mises à jour de DWF (à placer dans une interface d'administration)
ATTENTION ! GIT doit être installé sur la machine hôte !

Version GIT courante Version DWF courante Dernière version DWF disponible Statut / Mise à jour
git version 2.18.0 21.18.08 21.18.08 Already up-to-date.
OU
git version 2.18.0 21.18.07 21.18.08

Video

Cette classe permet d'afficher une vidéo avec un player accessible

Credit :
Vidéo : Nuages - Libre de Droits https://www.youtube.com/watch?v=NqIw5wHvGYQ
Musique : Dread (v2) - musicman921 https://musicman921.newgrounds.com/

Vticker

(cf js)

W3c_validate

Inscrit les erreurs HTML du site dans le log.
requiert que le sitemap soit actif, et que le site soit en ligne

Websocket

(cf. WebSocket)

Wled

Cette classe permet d'exploiter l'API HTTP de WLED

Writer

Cette classe permet de gérer un buffer à l'écriture de fichiers

Services general

Les services sont des classes PHP qui répondent à des requêtes venant soit de plusieurs de vos propres projets,
soit d'applications extérieures (dans ce dernier cas on peut parler d'API ).
Ces classes doivent être placées dans /html/commun/service

En général les services ne retournent pas d'HTML, mais des données au format JSON (recommandé), XML, CSV ou Serialisé

Il est recommandé, mais pas obligatoire, de nommer le fichier contenant la classe comme ceci : [nom_du_service].service.php
et de passer par /html/commun/service/index.php?service=nom_du_service pour y acceder.
En procédant ainsi, votre service pourra exploiter le framework, les classes métiers et les entités.

Exemple pratique, soit le projet avec l'arboressance suivante :

  •   mon_projet
    •   class
      •   entity
        •   index.php
        •   user.class.php
      •   config.class.php
      •   page.class.php
      •   une_classe_metier.class.php
    •   index.php

Et le service /html/commun/service/mon_service.service.php qui retourne les données de l'utilisateur selon l'id

appeler le service :

En PHP / DWF

En Ajax / JQuery

Services interne

Les services internes sont des services spécifiques à un projet, ces services exploiteront de base :

  • Le fichier de configuration du projet
  • Les variables de session
  • La connexion à la base de données
  • Les entités

Ces services sont à placer dans html/[votre-projet]/services/ et les fichiers doivent être nommés tels que : [nom-service].service.php

Pour que le fichier service/index.php soit créé correctement, la case "Services internes" doit être coché à la création du projet.

CLI

Les CLI sont des script PHP destiné à tourner en mode console,
très utile pour effectuer des opérations longues telles que des sauvegardes de grandes bases de données par exemple
ces scripts sont souvent appelés dans des CRON
il existe deux types de CLI dans le Framework :

Les CLI généraux

Ces CLI généraux se trouvent dans le dossier dwf/cli/ et doivent répondre à certaines règles.

  1. Les fichiers doivent être nommés comme suit : [nom_du_cli].cli.php
  2. Les scripts ne doivent pas utiliser de boucles infinies
  3. Les fichiers peuvent contenir un script procédural n'utilisant pas de classes (pas de POO), mais il est recommandé d'en utiliser comme ceci :

Une fois que tout vos CLI sont créés, vous pouvez les lancer via la commande :

start.php va charger les classes du framework, puis lancer les CLI un par un dans l'ordre alphabétique

Les CLI métiers

Les CLI métiers sont beaucoup moins contraignants, ils peuvent étre placés dans le dossier "class" de votre projet ou dans un sous-dossier que vous aurez créé
html/[votre-projet]/class/cli par exemple,
il est recommandé (mais pas obligatoire) de nommer le fichier en .cli.php
ne le nommez pas en .class.php. Ou le CLI rentrerait en interraction avec l'application "web"

il est recommandé de charger et utiliser la classe "cli" dans vos CLI métiers, comme ceci :

La classe "cli" contient quelques fonctions utiles pour créer une application PHP en mode console,
cli::classloader() permet de charger les classes du framework et de pouvoir les utiliser.
Voici un petit script d'exemple avec la classe "cli"

Une fois que tout votre CLI métier est créé, vous pouvez le lancer via la commande :

WebSocket

Les WebSocket permettent de faire de la communication en temps réel (Real Time Connexion, RTC).
L'utilisation première des WebSocket est pour les tchats entre utilisateurs mais ils peuvent aussi être utilisé pour notifier un utilisateur
ou afficher une donnée très variable dans le temps en temps réel (exemple : un stock dans une application de gestion)

Un serveur de WebSocket tourne indépendament du serveur web et écoute son propre port (9000 par défaut dans DWF, parametrable dans la config du projet).
il est possible de lancer le serveur en mode console (CLI), notamment pour débugger :

En production, il est possible de laisser l'application lancer elle même le serveur de websocket en utilisant la classe services pour lancer une requête qui lancera le serveur :

L'application ne lancera le serveur qu'une seule fois.

Coté client, la connexion peut être géré avec l'objet JS natif WebSocket

ATTENTION ! Actuellement DWF ne gère pas le tunnel de chiffreement (SSL/TLS),
c'est à vous de le mettre en place via le système de proxy de votre serveur web.

Les websockets de DWF fonctionnent avec l'envoi et la reception de chaines JSON.
dans les chaines d'envoi vers le serveur une clé "action" est obligatoire afin d'indiquer au websocket quel traitement appliquer.
le reste des clés sont libre.
la seule action définie par défaut et l'action d'authentification qui prend en seconde clé un token d'authentification (qui peut être vide) :

Le retour est une des ses possibilité :

Pour rajouter une action, il suffit de rajouter une classe dans le dossier "websocket" du projet qui sera nommé :
[nomDeLAction].ws.php
et qui doit avoir la forme suivante :

La classe websocket_client permet de gérer les utilisateurs connectés,
elle possède aussi des méthodes statiques qui permettent de sélectionner d'autres utilisateurs connectés.
Gardez en tête qu'un utilisateur peut avoir des connexions multiples (s'il ouvre plusieurs onglets par exemple).

La classe websocket_request permet de lancer des requetes au serveur websocket depuis PHP

Mise en ligne

Lors de la mise en ligne de vos projets, vous devrez définir votre "projet par défaut" pour cela :
rendez-vous dans le fichier html/commun/config/default.json et modifiez la ligne suivante à votre convenance.

Depuis la version 21.24.05, il est possible d'exporter un projet DWF depuis l'interface "parcours de sites" (accessible uniquement en local).
L'export inclura tous les fichiers contenus dans votre dossier projet (à l'exception des CSS dans src/compact).
L'export inclura les fonctionnalités et fichiers nécessaires dont dépend votre projet, à condition que export_dwf.class.php ait correctement référencé les dépendances.
Il est conseillé de tester toutes les fonctionnalités de votre projet avant l'export, puis de tester les fonctionnalités de l'export elle-même.

Cf export_dwf pour plus de détails. Le fichier JSON d'export est consultable dans dwf/class/export_dwf/.