developer.jelix.org n'est plus utilisée, et existe uniquement pour son historique. Postez les nouveaux tickets sur le compte github.
Opened 13 years ago
Closed 13 years ago
#507 closed new feature (fixed)
plugin history
Reported by: | Lipki | Owned by: | Lipki |
---|---|---|---|
Priority: | normal | Milestone: | Jelix 1.1 beta 1 |
Component: | jelix:plugins | Version: | 1.0.2 |
Severity: | minor | Keywords: | |
Cc: | Blocked By: | ||
Blocking: | Documentation needed: | no | |
Hosting Provider: | Php version: |
Description
The history plugin uses the sessions to keep in mind the actions associated with their argument.
Very practical to run an event without leaving the page.
Example of use.
$GLOBALS['gJCoord']->getPlugin('history')->back( $this->getResponse('redirect') );
Attachments (4)
Change History (20)
comment:1 Changed 13 years ago by Lipki
- Owner set to Lipki
- Status changed from new to assigned
- Type changed from bug to new feature
Changed 13 years ago by Lipki
comment:2 Changed 13 years ago by Lipki
comment:3 Changed 13 years ago by laurentj
- review changed from review? to review-
private $_timeStart; ... function time() { return microtime(true) - $this->_timeStart; }
je ne vois pas trop l'utilité de ce code.
$_SESSION['ACTIONS'][] = $GLOBALS['gJCoord']->action->toString(); $actionparam = $GLOBALS['gJCoord']->request->params; unset( $actionparam['module'] ); unset( $actionparam['action'] ); $_SESSION['PARAMS'][] = $actionparam;
Pourquoi ne pas regrouper dans une même variable de session ? (et pourquoi ne pas la nommer HISTORY ou quelque chose comme ça ?)
$_SESSION['HISTORY'][] = array($GLOBALS['gJCoord']->action->toString(), $actionparam);
D'autres remarques :
- ne pas enregistrer toutes les actions :
- celles qui aboutissent à une redirection, car alors on part en boucle infinie si on redirige vers l'action précédente qui serait elle même une redirection
- celles qui sont appelées avec une requête POST ? je pense, car en général on effectue des enregistrements etc. Faire un back pourrait alors refaire ces enregistrements. De plus, on ne peut rediriger vers une action précedente POST.
- on pourrait prendre en compte un paramètre de plugin dans les controleurs, qui autoriserait ou non (en plus des critères précédents), le stockage dans l'historique.
comment:4 Changed 13 years ago by Lipki
Pour l'instant, ce n'était qu'un bout de code rapide pour régler mon problème.
Mais tu a raison, je pense qu'il ne faut stocker par défaut, mais seulement a la demande.
Sinon pour la fonction time, qui a un nom bien banale, je m'en sert pour savoir combien de temps les clients prenne pour commander. Il doit y avoir d'autre utilisation.
comment:5 Changed 13 years ago by Lipki
http://jelix.toopi.info/page/history
Effectivement la fonction time() ne servait a rien :)
Changed 13 years ago by Lipki
comment:6 Changed 13 years ago by Lipki
- review changed from review- to review?
comment:7 Changed 13 years ago by Lipki
voir aussi : http://developer.jelix.org/ticket/527
comment:8 Changed 13 years ago by laurentj
- Milestone set to Jelix 1.1
- review changed from review? to review-
je pense qu'on pourrait l'améliorer, en particulier:
- limiter le nombre d'url stockée (une dizaine ?), car au bout d'un moment, ça peut être beaucoup trop lourd à tout stocker en session
- vérifier qu'il n'y a pas l'url en doublon dans toute la liste, et si oui, le supprimer, avant de mettre l'url à la fin de la liste.
comment:9 Changed 13 years ago by Lipki
limiter le nombre d'url stockée (une dizaine ?), car au bout d'un moment, ça peut être beaucoup trop lourd à tout stocker en session
Un paramètre dans defaultconfig, fera l'affaire ?
vérifier qu'il n'y a pas l'url en doublon dans toute la liste, et si oui, le supprimer, avant de mettre l'url à la fin de la liste.
L'interet de l'historique, c'est de garder l'historique ... Le fil d'ariane ce sert de cet information redondante pour afficher le trajet du visiteur.
Ce que je peut faire, c'est une liste qui contient l'ensemble des pages sans doublon, et un autres qui contient l'historique, et qui fait des "liens" vers la première liste.
Changed 13 years ago by Lipki
comment:10 Changed 13 years ago by Lipki
Un paramètre dans defaultconfig donc.
pour le reste je sait pas si ça vaut vraiment le coup de créer deux listes.
comment:11 Changed 13 years ago by Lipki
- review changed from review- to review?
comment:12 Changed 13 years ago by laurentj
- review changed from review? to review-
- chaque plugin de coordinateur peuvent avoir leur propre fichier de config, donc créer un fichier de conf spécifique history.coord.ini.php.dist dans le repertoire du plugin
- ce n'est pas maxleng mais maxlength. Peut etre que maxsize est préférable d'ailleurs
- il manque la declaration des fichiers dans le manifest jelix-lib.mn
- plein de problème d'indentation (tab au lieu d'espace etc)
+ $_SESSION['HISTORY'][] = $page; + + $this->double();
Pourquoi mettre la page, et ensuite verifier si elle n'existe pas déjà ? Je pense que faire ceci serait plus efficace et rend inutile cette fonction double()
if(count($_SESSION['HISTORY'])) { if(end($_SESSION['HISTORY']) != $page) $_SESSION['HISTORY'][] = $page; }else{ $_SESSION['HISTORY'][] = $page; }
Pareil dans change()
public function change( $key, $val ) { $page = array_pop($_SESSION['HISTORY']); $page[$key] = $val; if(end($_SESSION['HISTORY']) != $page) $_SESSION['HISTORY'][] = $page; }
À mon avis, il y a un problème là, tu fais un end sur un des elements d'un item de l'historique, plutôt qu'un end sur l'historique (pour avoir le dernier item):
+ public function reload( $rep ) { + $rep->action = end($_SESSION['HISTORY']['action']); + $rep->params = end($_SESSION['HISTORY']['params']); + return $rep; + } + + public function back( $rep ) { + array_pop($_SESSION['HISTORY']); + $rep->action = end($_SESSION['HISTORY']['action']); + $rep->params = end($_SESSION['HISTORY']['params']); + return $rep; + }
ce serait plutôt
$last = end($_SESSION['HISTORY']); $rep->action = $last['action']; $rep->params = $last['params'];
À part ça, vu que l'on a un fichier de config, on pourrait avoir un parametre de conf qui indique le fonctionnement de l'historique :
- soit on montre rééllement l'historique comme indiqué
- soit on a check si l'item à ajouter n'est pas dans la liste, et dans ce cas on le met à la fin plutôt que de le dupliquer. Ainsi tu n'as pas 2 listes ;-)
comment:13 Changed 13 years ago by bballizlife
Ce n'est peut-être qu'un détail mais le nom de la variable de session (HISTORY) est ici en dur apparemment. Je pense qu'il serait bien, tout comme c'est le cas dans le plugin auth, que ce nom soit configurable depuis le fichier de conf du plugin.
Changed 13 years ago by Lipki
comment:14 Changed 13 years ago by Lipki
- review changed from review- to review?
voila voila
les paramêtres
; session variable name session_name = "HISTORY" ; max size of the history maxsize = 10 ; if single = true if each page will be registered only once in history ; the latter will be retained. single = false ; If double = false pages will not appear twice a follow time in history. double = false ; if time = true a variable record time spent on site time = true ; the name of this variable session_time_name = "HISTORYTIME"
comment:16 Changed 13 years ago by Lipki
- Resolution set to fixed
- Status changed from assigned to closed
commited !
+ une méthode time() qui retourne le temps écoulé depuis le début de la session