(dé)Pot de miel

2010

2009

2008

Accueil

Aller au contenu | Aller au menu | Aller à la recherche

 

Downloads Manager 1.5.0

22 février 2010

Au menu de cette version, la possibilité de mettre à disposition en téléchargements les fichiers qu'on transférera aussi bien depuis l'admin du module que via un client FTP dans un dossier dédié.

Ceci permet de ne plus être dépendant des limitations du protocol HTTP et/ou de la configuration PHP.

Donc à présent on envoi ses fichiers en FTP, on se rend sur la page d'admin, on ajoute une description à un téléchargement et on pioche un fichier à mettre en ligne à disposition. (Bien évidement la liste des fichiers disponibles décroit au fur et à mesure qu'ils sont mis en ligne)

  1. Télécharger le module Downloads 1.5.0
 

HaveFnuBB Hook System

10 novembre 2009

Parmi les forums bien pensés, existent des systèmes d'extension (ou hook)
laissant libre cours à la créativité des développeurs de ces hooks.

Dans HaveFnuBB (le forum que je réalise), il m'aura fallu un plugin de 10 lignes pour permettre à tout developpeur, d'enrichir ses templates avec une souplesse déconcertante.

L'idée derrière ce plugin est la suivante :

Je me créé un portail, blog, forum, et me "contente" d'une petite batteries de fonctionnalités rendant la page à mon goût.

Mais avec ce plugin, je permets à quiconque de rajouter ses propres fonctionnalités à l'endroit où le hook est appelé.

Concrètement comment cela marche ?

Dans mes templates, je pose :

{hook 'event',$params}

où :

  • event est le nom de l'évènement déclenchant la récupération de toutes fonctionnalités
  • $params est le tableau des paramètres passés au plugin hook, (puis au listener).

Pour illustrer ce principe, dans le forum HaveFnuBB, je dispose d'un moteur de recherche permettant de trouver tout mot dans toutes les discussions.

Comme c'est loin d'être satisfaisant pour tout à chacun (c'est volontaire, le module de recherche étant générique et extensible),

je pose le hook 'Search' pour que quiconque puisse rajouter tout ce qui lui convient.

le template de recheche est le suivant :

{hook 'BeforeSearch'}
<div class="box">
    <h2>{@hfnusearch~search.search.perform@}</h2>
    <div class="block">        
        <div id="post-message">{jmessage}</div>
        <form action="{formurl 'hfnusearch~default:query'}" method="post">  
        <fieldset>
        <legend>{@hfnusearch~search.in.all.forums@}</legend>
        <div class="form_row">
            {formurlparam 'hfnusearch~default:query'}
            <input type="hidden" name="perform_search_in" value="words"/>
            <div class="form_property">{@hfnusearch~search.hfnu_q.search@}</div>            
            <div class="form_value">
                <input type="text" id="hfnu_q" name="hfnu_q" size="31" />    
            </div>
            <div class="clearer">&nbsp;</div>  
        </div>
        <div class="form_row form_row_submit">    
            <div class="form_value">
                <input class="submit" type="submit" name="validate" 
                        value="{@hfnusearch~forum.search.okBt@}" />
            </div>
            <div class="clearer">&nbsp;</div>
        </div>
      </fieldset> 
    </form>
    {hook 'Search'}
    </div>     
</div>
{hook 'AfterSearch'}

A présent je veux pouvoir chercher des auteurs de discussions ou, chercher dans un forum particulier.
Donc je me rends dans mon listener et j'ajoute de quoi effectuer tout ceci :

class hookListener extends jEventListener{
   function onSearch ($event) {
	// appel des zones 
	$author =  jZone::get('hfnusearch~searchAuthor');
	$forum  =  jZone::get('hfnusearch~searchForum');
	$zone = $author . $forum;
	$event->add( $zone );
   } 
}

et la zone author :

class searchAuthorZone extends jZone {
    protected $_tplname='zone.searchAuthor';    
    protected function _prepareTpl(){
        $form = jForms::create('hfnusearch~author');
        $form->setData('perform_search_in','authors');
        $this->_tpl->assign('form',$form);         
    }    
}

et le template zone.searchAuthor :

{form $form , 'hfnusearch~default:query'}
<fieldset>
    <legend>Author</legend>
    <div class="form_row">
        <div class="form_value">
            <strong>Author</strong>
        </div>
        <div class="clearer">&nbsp;</div>
    </div>    
    <div class="form_row">
        <div class="form_property">
            {ctrl_label 'hfnu_q'}
        </div>
        <div class="form_value">
             {ctrl_control 'hfnu_q'}
        </div>
        <div class="clearer">&nbsp;</div>
    </div>
    <div class="form_row form_row_submit">
        <div class="form_value">
            {formsubmit 'validate'}
        </div>
        <div class="clearer">&nbsp;</div>        
    </div>    
</fieldset>
{/form}

Et c'est tout !

Pour résumer "la puissante simplicité" :

Hook Process

  1. appel du hook dans le template hfnusearch
  2. dans le listener, appel de la zone
  3. dans la zone, instanciation du formulaire de recherche et affichage du template
  4. retour du rendu au hook


Résultat avant / après :
Page before a hook process Page after a hook process

en savoir plus sur jEvent qui a permit ce hook.

 

Jelix et le module jCommunity

15 septembre 2009

En PHP, si une classe ou API existante vous plait mais que vous souhaitez y apporter votre touche personnelle vous inclurez cette dernière et la surchargerez pour éviter d'y toucher.

Exactement le même principe s'applique avec les modules Jelix. On parlera alors "d'overload".

Un module n'étant pas une simple classe (mais composé de contrôleurs, daos, forms, template, zones, classes, fichiers de traductions) tout ne peut-être surchargé.

Qu'est ce qui peut faire l'objet d'overload ?

  • Les templates : pour modifier le rendu
  • les Dao : pour ajouter des propriétés (des colonnes/ tables ) et des factories (méthodes d'accès aux tables)
  • les forms : pour ajouter des champs de formulaires et leurs règles de contrôle associées
  • les locales : fichiers de traductions


Avantages de l'"Overload" :

  • Extension des fonctionnalités du module original
  • Adaptabilité de tous les aspects du module (exception faite du contrôleur)
  • Facilité de mise à jour du module originel, puisqu'on ne change aucune ligne de code de ce dernier

Lire la suite...

 

HfnuSearch, le moteur de recherche made in Jelix

6 juin 2009

Dans ce précédant billet, je détaillais une feuille de route pour produire ce module.

Sa souplesse en fait sa force pour être intégré aisément au sein de vos applications Jelix.

En effet il suffit d'une seule ligne de code pour ajouter vos données au moteur de recherche !

jEvent::notify('HfnuSearchEngineAddContent',array('id'=>$id_post,'datasource'=>'havefnubb~posts'));



Cette ligne émet un évènement HfnuSearchEngineAddContent avec 2 paramètres :

  • la source de données à lire pour trouver les infos à injecter dans le moteur
  • la clé primaire permettant de trouver ces mêmes données.

le module HfnuSearch se charge ensuite de lire sa configuration pour savoir quelles sont les colonnes de vos tables contenant les données et les injecter dans son moteur.

Et ... c'est tout !

L'interrogation de vos données se faisant par le biais du module HfnuSearch lui-même, je ne pousserai pas plus loin ici son usage ;)

Pour tester le moteur de recherche en live, je vous invite à vous rendre sur HaveFnuBB!.

Enfin pour en trouver les sources, ceux ci sont, soit sur le dépôt subversion de HaveFnuBB!, soit dans l'archive HaveFnuBB 1.0.0RC3

 

Un moteur de recheche avec Jelix

17 février 2009

A faire le tour de la toile à la recherche d'un "Search Engine" pour HaveFnuBB, Laurent sur la mailing list de Jelix m'a montré un tuto de Symfony avec les mêmes désiderata que mézigues ;)

A savoir, créer un moteur de recherche qui ne soit pas dépendant :

  • d'un soft tiers (tels Lucene, Xapian, Sphinx, nécéssitant parfois de compiler un module php)
  • d'un SGBD spécifique (par exemple en utilisant le FULLTEXT spécifique à MySQL et surtout à MyISAM)

Le tuto de symfony reprend des idées de Roscripts.com, quant à l'algo Stemmer, et des Stopwords évoqués.

Ce que je retiens donc pour la roadmap de ce module de moteur de recherche :

  • une table search_words composée des colonnes id (pour conserver le lien avec la table contenant les messages), words (contenant les mots du message), weight (étant le poids de chaque mot).
  • une méthode permettant d'alimenter / mettre à jour la table search_words (Quand on ajoute un message au forum ? via une réponse à jEvent::notify('PostAfterSave') ? )
  • une méthode permettant la recherche
  • une méthode permettant d'épurer les mots inutiles (stopwords) du message (1)
  • 2 templates : un pour le formulaire de recherche ; un pour l'affichage du résultat.

Reste à tester tout cela !

(1) ps : je n'ai pas (encore) trouvé d'implem' PHP à l'algo Porter Stemmer pour les frenchies (en UTF-8) ;-).

malgré tout un billet interessant sur ce dernier sujet.

 

Jelix Downloads 1.2.0

8 janvier 2009

Ce nouveau (dé)pot de miel concerne une mise à jour du gestionnaire de téléchargement.

Basiquement, ce module permet de mettre en téléchargement des fichiers.

Mais au delà de cela, il convient très bien à des sites hébergeant plusieurs projets.

En effet les auteurs de projets peuvent utiliser ce module pour mettre en téléchargement les nouvelles versions de leur création.

Chaque auteur peut décider d'autoriser des visiteurs à télécharger ses fichiers ou bien uniquement les membres de son site.

Il peut également permettre (ou non) de télécharger ses fichiers depuis un site distant.

Les retours sont les bienvenus ;)

  1. Télécharger le module Downloads 1.2.0

dl_admin_list-1.2.0.png

 

Jelix Downloads 1.1.0

15 décembre 2008

Annoncé dans ce billet, voici donc la version 1.1.0 du module Downloads.

Cette version n'a carrément plus rien à voir avec la précédente ;) Mais amplement plus souple et efficace.

  1. Télécharger le module Downloads 1.1.0

Hav3 Fnu !

 

Jelix Downloads 1.1.0 sur les rails

13 décembre 2008

Une nouvelle version du Gestionnaire de Téléchargements est sur les rails et bientôt disponible.

Actuellement l'application est "monolithique" avec dépôt des fichiers dans un seul répertoire pour un site.

La nouvelle mouture permettra, pour un site hébergeant plusieurs projets/sous domaine/etc..., pour chaque utilisateur de gérer ses téléchargements distincts par répertoire.

L'hébergeur attribue donc à l'utilisateur les droits d'accès à 'n' répertoires. Puis l'utilisateur ajoute ses fichiers dans ses répertoires. Et les visiteurs retrouveront les fichiers téléchargeables par ces répertoires.

à suivre;)

Liste des fichiers téléchargeables

 

Jelix Downloads 1.0.0

6 décembre 2008

Bonsoir,

Chose promise chose due, voici la première version de ce module de téléchargement de fichiers.

Rappel des prérequis indispensables :

  • jelix 1.1 (version trunk) (cela va sans dire ;)
  • module jacl2

Recommandé :

  • module jcommunity 0.1 ou plus

Deux archives sont téléchargeables :

  • une archive contenant l'application tout entière (incluant jelix jacl2 et jcommunity )
  • une archive contenant le module tout seul et s'intégrant parfaitement à une application existante (testé avec jbugtracker)
  1. Télécharger le module Downloads 1.0.0
  2. Télécharger l'application Downloads 1.0.0
 

Jelix Download Module 1.0.0 s00n

5 décembre 2008

Bonsoir,

Bientôt je publierai un minuscule module Jelix pour gérer et partager des fichiers en téléchargement.

- pour l'utiliser il faut un minimum de prérequis qui sont :

  • jelix 1.1 (version trunk)
  • module jacl2
  • module jcommunity 0.1 ou plus

Je dois finir la doc d'installation mais voici quelques snapshots en attendant.

Liste des fichiers téléchargeables Un Fichier téléchargeable dl_admin_index.jpg Gestion des fichiers téléchargeables

 

Jelix - AppMgr - ou l'installeur de modules Jelix

3 novembre 2008

Voici un snapshot d'un module de gestion de ... modules Jelix

appmgr.jpg

Celui ci permet d'installer, activer, désactiver, supprimer, rechercher une mise à jour sur le site d'origine du module.

Techniquement, Il s'occupe de parcourir l'arborescence des modules définis dans le fichier defaultconfig.ini.php dans la variable modulesPath et lit le fichier module.xml de chaque module.

Si un tel module vous interesse faites vous connaître (un commentaire ?).