version 0.5.3
- encore plus rapide
- meilleure gestion du cache, un seul appel à redis nécessaire
- support natif des langues
- support natif et automatique des url canoniques
- url rewriting 'interne'
- support de fichiers de 'constantes' contenant des bouts de page ne méritants pas un fichier à part entier
- ajout d'une fonction générique de remplissage de design depuis un tableau de tableaux de données, fillDesign
et de diverses autre fonctions l'utilisant qui importent les données depuis redis,
les version mysql viendrons quant je me serais decidé à le réinstaller
- optimisation de la détection et l'appel de modules
- ajout de nouveaux mot clef pour le render, [url] et [lang], il n'y à pas de fonction associées à ces mots clef contrairement aux autres
[lang] dans votre template se fera remplacer par la langue courante, idéalement à mettre dans la balise html : <html lang="[lang]">
[url] quant à lui se fera remplacer par la "racine" du site définie dans fastIce.php, exemple : <img src="[url]img/boldas-post-thumb.png"> il est la pour simplifier le rewriting d'url, qu'il soit fait par htaccess ou délégué à fastIce.
la prochaine version devrais contenir une gestion des dépendances entre modules,
le module "user" et "admin" arriverons très bientôt, après un petit regroupement et nettoyage de la partie "user", les droits utilisateurs sont également gérés.
fillDesign($data, $design, $callback=false)
data contient le tableau de tableau, design contient le nom du design à utiliser et remplir
callback contient soit une fonction qui va récupérer l'ensemble de la "ligne" de donnée et le mot clef à remplacer dans le design
}
});
exemple print fillDesign($data,'designtest',function($w,$d)
{ switch($w)
{ case 'txt': return '<br><i>'.$d['txt'].'</i>'; break;
case 'title': return '<br><b style="color:red;">'.$d['title'].'</b>'; break;
soit, un array de fonction,
$c = array( 'title' => function($dta){ return '<br><span style="color:red;">'.$dta.'</span>'; },
'txt' => function($dta){ return '<br><i>'.$dta.'</i>'; },
'toto' => 'nl2br'
);
print fillDesign($data,'designtest',$c);
si le mot clef existe dans les données, la fonction reçois son contenu, sinon elle récupère l'ensemble de la ligne de donnée (mots clefs "virtuels")
si callback n'est pas défini, la fonction remplacera simplement les mot par leur contenus, un mot sans données sera remplacé par rien, ''
comme suggéré dans les exemples, la fonction retourne la série de designs remplis
redisHashFill($hashkey, $design, $callback=false)
cette fonction se charge de récupérer un hash redis et de remplir un design avec, similaire à fillDesign sauf le premier argument qui est la clef d'un hash redis
sredisHashFill($setkey, $design, $callback=false, $kprefix='', $ksuffix='')
cette fonction recupere un set redis, charge les hash pointé par celui ci et rempli une serie de design avec, le premier argument est la clef du set,
kprefix est le préfixe nécessaire pour recréer la clef des hash, ksuffix est la même chose mais son suffixe
exemple : le set contient "riri" "fifi" et "loulou" les hash corespondants selon le 'protocole' que vous avez choisi pour votre application est par exemple pour riri : "monsite:disney:riri:user" ici le prefixe sera "monsite:disney:", le suffixe quant à lui sera ":user"
bien évidement, si vous remplissez le set avec les clef complète, laissez le prefixe et le suffixe vide.
lredisHashFill($listkey, $design, $callback=false, $kprefix='', $ksuffix='', $start=0, $end=-1, &$size=0)
cette fonction récupère une liste redis (ou une partie de celle ci), va récupérer les hash correspondants et remplis une série de design avec, le premier argument est la clef de la liste
les préfixe et suffixe fonctionnent de la même manière qu'avec sredisHashFill
start et end définisse les limites de la partie à récupérer, les offset négatif fonctionnerons comme dans redis.
la variable passé en référence, si vous la passez, se fera remplir avec la taille totale de la liste (la gestion des pages vous est délégué)
je n'ai pas pour le moment réalisé de fonction équivalente pour les zset, leur utilisation pouvant être assez varié, vous pouvez néanmoins très facilement utiliser fillDesign pour afficher des données provenant de ce type de source.
getlang()
retourne la langue actuelle
getUrlPath()
retourne le path actuel (rewriting interne)
le rewriting par default considère que le premier sous répertoire est une langue, si la taille fait 2 char, autrement il sera le début du path
la dernière partie de l'url sera la page en elle même, avec .html ou sans extension,
concrètement : /fr/toto/titi/tata/truc/machin42/index correspondra à une page française, la page index sera traité, et elle recevra le path "toto/titi/tata/truc/machin42" attention, car /fr/toto/index ou /fr/index appellera exactement la même page, index, veuillez donc à traiter le path et afficher des données en conséquence.
chaque page sera mise en cache en tenant compte de sa langue et son path.
la langue "initiale" est à définir dans fastIce.php,
si celle ci est "fr" par exemple, les pages /fr/index, /index, /fr/index.html et /index.html serons équivalentes, leur meta url canonique pointerons toute vers /index
bien évidement si un path est aussi dans l'histoire, celui ci se rajoutera dans tous ce bordel et la canonique en tiendra compte.
le moteur va également chercher des designs dédié à la langue, si par exemple le squelette de page va chercher une partie nommé "content", il cherchera en priorité fr.content.php puis ensuite content.php, ceci est valable autant dans les répertoire commun que ceux spécifiques aux pages.
concernant les nouveaux fichiers de constantes, il peu y en avoir un collectif, dans le répertoire du template, nommé par default "constants.ini" et un par page, écrasant au besoin des constantes communes, il porte le même nom et doit se trouver dans le répertoire de la page,
ces fichiers ini contiennent plusieurs sections, une commune entre les langues, appelé "common" et une par langue disponible, nommé par deux lettre suivant donc, la langue
l = "truc bidule en"
exemple de fichier :[common]
designtest = "<span><b>$title$</b>$txt$</span>"
prddesign = "<div><span>$ref$, $nom$ : $prix$</span><div>$txt$</div></div>"
listdesign = "<div>$toto$</div>"
[fr]
blablacontact = "blabla"
animal = "truc bidule fr"
[en]
blablacontact = "en blabla !"
anima