FrameBeurk documentation
6. Fonctionnalités
6.1. Réécriture d’URI
(Voir Miscellaneous pour une réflexion sur le terme d’URI)
Pour activer la réécriture d’URI, le paramètre de
configuration « UrlRewriting » doit être positionné à true, et le
fichier .htaccess (pour Apache) correctement paramétré (voir Miscellaneous).
Les requêtes normalement destinées à index.php et ajax.php
sont alors redirigées vers interpreteur.php qui va analyser l’URL et alimenter
le tableau PHP des paramètres $_REQUEST[]. Les règles de construction de l’URL
réécrite sont schématisées ci-dessous :
- Le bloc (1) n’est présent que si la requête est effectuée par Ajax. Il précise dans quelle div la vue devrait être affichée à son retour du serveur.
- Le bloc (2) est habituellement toujours présent. S’il est absent -et que le bloc (3) l'est aussi, la vue configurée par défaut est affichée.
Le 4ème terme du bloc est un « slug » -libellé composé de mots en lettres minuscules séparés par des tirets, utile au référencement, mais qui n’est pas interprété, donc facultatif.
Ce sont les autres termes du bloc qui définissent la clef unique d’accès à la page.
Dans la gestion actuelle des URL réécrites, le slug n’est pas présent dans les liens générés par FrameBeurk mais présent dans les URL canoniques renvoyées dans les pages et vues.
- Le bloc (3) facultatif demande une Vue avec Jeton Clef. Les blocs (2) et (3) sont mutuellement exclusifs.
- Le bloc (4) spécifie la vue à afficher en cas d'erreur de l'action de Maj demandée par le bloc (5) ou le bloc (6).
- Le bloc (5) facultatif demande une Maj en spécifiant une clef complète pour la Maj.
- Le bloc (6) facultatif demande une Maj avec Jeton Clef. Les blocs (5) et (6) sont mutuellement exclusifs.
6.2. Navigation Ajax
Dans le cas d’une navigation par Ajax, l’historique des
pages reste accessible à la navigation par page précédente / page suivante,
toujours par Ajax, et de manière transparente. En effet, au retour de la
réponse du serveur, le client récupère l’URL canonique qui y est présente et alimente
l’objet Javascript history.
L’URI complète avec action Maj, DivVue… ne s’affiche donc jamais
dans la barre d’adresse du navigateur tant qu’on navigue par Ajax -que la
réécriture d’URL soit active ou pas.
6.3. Amélioration des balises
La navigation par ajax utilise une fonctionnalité plus large
du framework destinée à associer un comportement à un élément de la page
affichée, sans inclure de code Javascript dans le code HTML : C’est
l’amélioration des balises.
Celle-ci utilise la possibilité de créer des attributs HTML. Le principe de
fonctionnement est le suivant :
- On associe en configuration des attributs à des fonctions javascript
- A partir de cette configuration, FrameBeurk génère la fonction javascript qui va, à chaque chargement de page ou de div, associer les fonctions Javascript aux évènements OnClick des éléments portant l’attribut.
A titre d’exemple, pour gérer la navigation ajax, on a la configuration suivante :
$CONFIG['Tissage']['Beurk']['Attribut']['data-ajax'] = 'beurk_lienAmeliore';
Le code de la page sera, dans l’exemple d’un lien vers une vue destinée à saisir une action de modification :
<a href="/forum2/modifie-Commentaire-148" data-ajax="modifieCommentaire148" >Editer...</a>
Lorsque l'utilisateur clique sur un lien ayant l’attribut data-ajax, la fonction « beurk_lienAmeliore »
va lire le contenu de l’attribut pour déterminer dans quelle div devra afficher le résultat de la requête ajax. La fonction va donc recomposer l’URI
à partir du contenu des attributs data-ajax et href.
6.4. Couche de communication avec la DB
Pour donner au framework une interface indépendante de la
base de données SQL utilisée, une couche de communication apporte des fonctions
« chapeaux » aux fonctions standard de l’interface mysql (ou mysqli),
avec principalement 2 améliorations :
- Le cumul du temps passé dans les requêtes SQL de la transaction.
- La possibilité d’écrire ses requêtes sous forme de tableau associatif avec une notation qui reste très proche du sql.
- Le 1er découpage de la requête conduit à placer les clauses SELECT, FROM, WHERE… dans des éléments différents du tableau.
- Le 2nd découpage permet de placer les colonnes d’une clause SELECT, SET ou VALUES dans un sous-tableau. Exemple :
array(
'SELECT' => array('S.IdSection', 'S.Section', 'S.NbrSujets', 'S.NbrSujetsArchives',
'S.IdCreateur', 'U.User', 'S.TsCRE', 'S.TsMAJ', 'S.Etat'),
'FROM' => 'Rhum_Section AS S '
. 'LEFT JOIN Uzers_User AS U ON S.IdCreateur = U.IdUser '
'WHERE' => "S.IdSection = '$IdSection'");
L’usage de requêtes tableaux n’est pas obligatoire, sauf dans le cas de l’utilisation des Permissions (fonctionnalité décrite plus loin)