Documentation PHPBoost 3

Les Notes et le systeme de notations.

Cet article a été mis à jour, vous consultez ici une archive de cet article!
Le systeme de notation fait appel a une partie du kernel qui s'occupe en grande partie de tout.
Pour avoir acces au notation il y a des pré-requis :

Avoir une table propre au module, qui a des chan spécifique au notes.
avoir chargé la classe qui permet son utilisation.

La partie qui concerne la table sql :

Les chan requis dans la table du module sont la pour stocker la note actuelle, et le nombre de note.
on a donc les chan suivant dans notre table :
Code SQL :
  `users_note` text,
  `nbrnote` mediumint(9) NOT NULL DEFAULT '0',
  `note` FLOAT NOT NULL DEFAULT '0',

users_note contiens les info sur les 'noteurs'
nbrnote contiens le nombre de note.
note contiens la note actuelle.

Lors de la recherche d'info en sql il faudra penser a renseigné le chan si on interroge que certain chan et non pas tous. (*)

Je vais prendre comme exemple la galerie.
a la ligne 39 on récupère en $_get la note que l'user aurais envoyer.
Code PHP :
$g_notes = retrieve(GET, 'notes', false);

Placer a cet endroit cette variable est valable dans toutes le conditions possible.

A la ligne 507 on a la présence des chan note et nbrnote dans une interrogation sql.
(le g. est due a une jointure de table et donc a une indexation des chan par table)
Code PHP :
$result = $Sql->query_while("SELECT g.id, g.idcat, g.name, g.user_id, g.views, g.width, g.height, g.weight, g.timestamp, g.note, g.nbrnote, g.nbr_com, g.aprob, m.login
FROM " . PREFIX . "gallery g

A ce niveau des condition on déja reglementer l'acces a ces lignes.

A la ligne 572 on a un import de la classe (ou outils) et mise en variable de $Note.
Code PHP :
//Affichage notation.
import('content/note');
$Note = new Note('gallery', $info_pics['id'], url('.php?cat=' . $info_pics['idcat'] . '&id=' . $info_pics['id'], '-' . $info_pics['idcat'] . '-' . $info_pics['id'] . '.php'), $CONFIG_GALLERY['note_max'], '', NOTE_DISPLAY_NOTE);

On met en variable le résultat d'une fonctions.
Utilisant une class et des objet on dois déclaré une nouvelle instance Note, d'ou le new.
l'utilisation de new remet l'instance a zero, donc attention au condition et au boucle.

La focntion Note a besoin de l'identifiant du module, de l'id, l'url, le nombre max de la notation, le dossier du module, un nombre optionel (en général '0')
Code PHP :
Note($script,$idprov,$script_path,$notation_scale,$module_folder='',$options=0)

$script : nom de la table du module ou sont les chan db (un controle est fait avec le config.ini)
$idprov : id de reference
$script_path : la page d'appel du script
$notation_scale : le nombre d'étoile, l'échèle de notation..
$module_folder : le dossier du module. sert a retrouver le config.ini. et surtout : la section "note="
$option : les option d'affichage

Les option j'ai pas encore très bien compris mais on dois mettre "NOTE_DISPLAY_NOTE".
On a le choix entre : 'NOTE_DISPLAY_NOTE' , 'NOTE_NODISPLAY_NBRNOTES' , 'NOTE_DISPLAY_BLOCK'.
qui sont defini a la volée a l'import de la class.


$module_folder est optionel, le module ayant en principe le meme nom que le dossier si il n'y ai pas c'est prévu de prendre le nom de module pour le nom du dossier.

a la lign 597 on passe dans le template le formulaire comme pour l'editeur :
Code PHP :
'KERNEL_NOTATION' => $activ_note ? $Note->display_form() : '',

Ici il a une condition a la mise en variable. Dans la galerie une option a été faite pour activé ou non les note.
ce n'est que un chan db suplemetaire SET a 0 ou 1.

pour récupérer les info du formulaire le js fait appel a : xmlhttprequest.php.
ce fichier dois etre placer dans la racine de votre module. Celui de la galerie, a d'autre fonctionalité.
une forme minimale et fonctionnelle donne ceci :
Code PHP :
 
<?php
/* xmlhttprequest.php */
define('NO_SESSION_LOCATION', true); //Permet de ne pas mettre jour la page dans la session.
require_once('../kernel/begin.php');
require_once('../kernel/header_no_display.php');
// ici le nom de votre module
$module ='monmodule' ;
 
//Notation.
if (!empty($_GET['note']){
$id = retrieve(POST, 'id', 0);
$note = retrieve(POST, 'note', 0);
//Initialisation  de la class de gestion des fichiers.
import('content/note');
$Note = new Note($module, $id, '', 10, '', NOTE_DISPLAY_NOTE);
if (!empty($note) && !empty($id))
echo $Note->add($note); //Ajout de la note.
}
?> 

:!: Attention de modifier le nom de votre module dans la variable $module