AllEvents - AllEvents - A Joomla Component by Christophe Avonture
mardi, 19 mars 2013 00:58

Nouvel installateur pour AllEvents 3.0

Écrit par

Le nouvel installateur de AllEvents 3 est fonctionnel !  

Si vous vous souvenez, jusqu'à AllEvents 2.5.2, il y avait quatre fichiers :

  • Un package Free "partial" qui reprennait le composant, les deux modules et tous les plugins gratuits.   Ce fichier ne reprennait pas les médias car autrement la taille du fichier était supérieure à 2MB ce qui est une limite d'upload pour la plupart des serveurs web.
  • Un package Free "full" qui lui reprennait les médias
  • Un package Premium "partial" qui incluait donc tous les plugins commerciaux
  • Un package Premium "full" dont la taille dépassait de très loin la limite des 2MBs.

C'est dorénavant de l'histoire ancienne.

L'unique fichier a télécharger fait à peu près 900Ko et reprend uniquement le composant.   Pendant l'installation, une connexion sera établie vers le serveur de AllEvents afin de télécharger les modules, les plugins et les medias soit environ 2,20MB.  Les fichiers seront immédiatement installés.

Le serveur web de AllEvents va authentifier la demande de download et si elle émane d'un site pour lequel il y a une licence valide et en cours, les fichiers Premium seront alors poussés vers le serveur client et les plugins commerciaux seront installés.

Tout cela de manière totalement transparente.

Seule contrainte technique : l'installation de AllEvents doit se faire connecté à internet.

Installation de AllEvents 3.0

Informations supplémentaires

  • Package Free Ce billet concerne le package Free et est donc immédiatement disponible dans la version gratuitement téléchargeable de AllEvents.
Évaluer cet élément
(1 Vote)

Liste d'évènements depuis un téléphone portableAllEvents afficne un grand nombre de listes dans son administration : liste des évènements, liste des agendas, liste des sections, ...

Toutes ces listes reprennent un grand nombre de colonnes et, sur un téléphone portable, pas évident de s'y retrouver car il faut scroller horizontalement pour pouvoir avoir accès à l'information.

Ceci fera partie du passé : AllEvents 3 va détecter grâce à Bootstrap la résolution de l'écran et va, pour chaque colonne, déterminer si la colonne doit s'afficher ou pas.

AE applique pour cela un paramétrage qui est défini dans le manifest de la vue; par exemple, pour la liste des évènements :

Une valeur "0" indique que le champs doit être invisile sur ce type d'appareil.

La capture d'écran illustre la liste des évènements depuis un téléphone portable : strictement l'essentiel.

<fields>
   <field name="ordering" phone="0" tablet="0" desktop="1" caption="JGLOBAL_FIELD_FIELD_ORDERING_LABEL"/>
   <field name="form_checkbox" skip="1" phone="0" tablet="0" desktop="1" caption=""/> <!-- skip=1 car il ne s'agit pas d'un champs de la table-->
   <field name="published" phone="1" tablet="1" desktop="1" caption="JPUBLISHED"/>
   <field name="titre" phone="1" tablet="1" desktop="1" caption="JGLOBAL_TITLE"/>
   <field name="vignette" phone="0" tablet="0" desktop="1" caption="COM_ALLEVENTS_VIGNETTE"/>
   <field name="hot" phone="0" tablet="0" desktop="1" caption="COM_ALLEVENTS_HOT" />
   <field name="date" phone="1" tablet="1" desktop="1" caption="COM_ALLEVENTS_STARTDATE"/>
   <field name="enddate" phone="0" tablet="1" desktop="1" caption="COM_ALLEVENTS_ENDDATE" />
   <field name="lastmod" phone="0" tablet="1" desktop="1" caption="JGLOBAL_FIELD_MODIFIED_LABEL"/>
   <field name="proposal" phone="0" tablet="1" desktop="1" caption="COM_ALLEVENTS_PROPOSAL"/>
   <field name="cancelled" phone="0" tablet="1" desktop="1" caption="COM_ALLEVENTS_CANCELLED"/>
   <field name="hits" phone="0" tablet="0" desktop="1" caption="JGLOBAL_HITS"/>
   <field name="access" phone="0" tablet="1" desktop="1" caption="JFIELD_ACCESS_LABEL" />
   <field name="langue" phone="0" tablet="1" desktop="1" caption="JGRID_HEADING_LANGUAGE" plugin="language" /> <!-- Uniquement si le plugin est publié -->
   <field name="id" phone="0" tablet="1" desktop="1" caption="JGLOBAL_FIELD_ID_LABEL"/>
</fields>

dimanche, 17 mars 2013 10:43

Programmer plus vite avec NetBeans

Écrit par

Code template pour NetBeansSi vous développez sous NetBeans, que ce soit en PHP ou un autre langage supporté, connaissez-vous la notion de "Code Templates" ?   Il s'agit d'une sorte d'abréviation que vous spécifiez dans l'écran Tools -> Options -> Editor -> Code Templates et qu'il est ensuite très simple d'utiliser.  Exactement comme la notion des "Autotext" sous MS Word.

Durant le développement de AllEvents, je dois très régulièrement afficher le contenu d'une variable ou simplement un texte "Je suis ici" afin de suivre l'exécution de AE : je suis passé dans cette fonction, puis dans celle-ci, je suis repassé, etc.

J'ai aussi une fonction "deprecated" que j'utilise afin de mettre en évidence, lors du développement, les méthodes que j'ai dépréciée et dont je veux m'assurer qu'elles ne sont plus utilisées.

Une fonction "die" aussi pour stopper net l'exécution du code.

Et ainsi de suite...  

Parce qu'un développeur est par nature fainéant, il n'est pas efficace de garder quelque part des snippets de code qu'il faut retrouver puis copier/coller dans NetBeans.

Pour créer votre premier Code Template,

  • Cliquez sur le menu Tools puis Options de NetBeans.  
  • Dans la fenêtre "Options", cliquez sur Editor puis sur Code Templates.   Si besoin, sélectionnez PHP comme langage de programmation.  
  • Cliquez sur New
  • Encodez une abréviation
  • Dans la zone texte "Expanded Text" introduisez; pour la dernière fois, votre code.  Celui-ci peut faire plusieurs lignes.
  • Au besoin, encodez une description dans l'onglet Description.
  • Faites attention au bas de la zone texte : laissez "Expand Template on:" sur "Tab".

Un exemple : l'abbréviation j3 pour le code if(version_compare(JVERSION,'3.0.0','ge')) {

Cliquez sur Ok pour fermer la fenêtre.

Dans un document php, allez sur un ligne vierge et tapez exactement votre abréviation (j3) immédiatement suivi par la touche Tab et hop, votre code apparaît.

Reste le plus dur : créer votre dictionnaire d'abbréviations ;-)

Informations supplémentaires

  • Package Free Ce billet concerne le package Free et est donc immédiatement disponible dans la version gratuitement téléchargeable de AllEvents.
jeudi, 14 mars 2013 16:42

Responsive design - AllEvents 3.0

Écrit par
Évaluer cet élément
(1 Vote)

La partie de droite de l'écran disparaît sous les résolutions inférieures à 600pxAfin d'adapter le panneau de contrôle de AllEvents à la résolution de l'écran de l'utilisateur, la partie de droite du panneau de contrôle s'escamote dès lors que la résolution est inférieure ou égale à 600px.

Les écrans d'édition tel que "Édition d'un évènement" perdent quant à eux la zone des menus qui permettent de naviguer dans les écrans de l'application; ceci afin d'économiser la place disponible à l'écran.

D'autres fonctionnalités responsives seront ajoutées au fûr et à mesure. 

N'hésitez pas à me faire part de vos suggestions.

 

 

Lorsque le contrôleur de AllEvents reçoit une demande pour exécuter une tâche ; le nom de la tâche doit être en deux parties : « controlleur.tâche ».

La première partie est le nom du contrôleur qui va gérer la tâche ; deux exemples :

  • « main.display » : le contrôleur est « main.php » et la tâche « display »
  • « settings.apply » : le contrôleur est « settings.php » et la tâche est « apply »

Le contrôleur de AllEvents va d’abord vérifier si le contrôleur se trouve dans le dossier controllers du composant (dans administrator/components/com_allevents/controllers si la tâche est lancée depuis l’administration).

Lorsque le contrôleur n’est pas trouvé, il va faire appel au plugin de AllEvents et lancer une requête « Est-ce qu’un plugin gère la tâche controlleur.php ? »   A chaque plugin de déterminer si c’est le cas.   La fonction « onExecuteTask » sert à cette fin (voir le fichier /plugins/allevents/agenda/agenda.php p.ex.).    

Si la tâche est « agendas.display », le plugin Agenda devrait réagir de cette façon :

  1. Il va isoler le nom du contrôleur (agendas) puis le nom de la tâche (display)
  2. Il va regarder si le fichier /controllers/agendas.php existe dans son dossier /plugins/allevents/agenda/controllers.
  3. Si c’est le cas, il va regarder s’il y a une méthode nommée display() qui est déclarée dans le contrôleur.
  4. Si c’est toujours le cas, il va indiquer au contrôleur principal de AllEvents qu’il gère la tâche « agendas.display » et qu’il est prêt à recevoir la demande d’exécution.  

Une fois que le contrôleur reçoit la demande d’exécution de la tâche, il va d’abord déterminer le nom du manifest où la tâche est déclarée : le manifest est le fichier nommé metadata.xml qui se trouve dans le dossier d’une vue.   Parce que toutes les tâches sont toujours liées à une vue ; cette méthode permet de déterminer l’ensemble des tâches d’une vue.

Si la tache est « agendas.display » ; le nom de la vue va être « agendas ».   Le contrôleur du plugin va donc lire le fichier /plugins/allevents/agenda/views/agendas/metadata.xml.    

Attention : parce que le plugin doit gérer autant les tâches émises depuis l’administration que depuis le site, les vues d’administrations sont préfixées par « be_ ».  Ainsi, ce sera « /plugins/allevents/agenda/view/be_agendas/metadata.xml » pour la vue d’administration.

Le manifest contient la déclaration de la vue, comment elle doit s’afficher, quels sont les boutons qui doivent se retrouver dans la barre d’outils et quelles sont les tâches qui sont attachées au boutons ; entre autre.

Le manifest déclare aussi un  nœud <tasks> qui va reprendre toutes les tâches gérées par la vue :

<tasks>
        <!-- Définition des tâches déclenchées par la vue "main".  Définit quelle est la vue et le layout qui suivra l'exécution de la tâche -->
        <task name="agendas.csv" view="agendas" layout="list" msg="" />
        <task name="agendas.delete" view="agendas" layout="list" />
        <task name="agendas.display" view="agendas" layout="list" />
        <task name="agendas.publish" view="agendas" layout="list" msg="" />
        <task name="agendas.unpublish" view="agendas" layout="list" msg=""/>
        
        <!-- L'attribut msg n'est pas supporté pour les fonctionnalités ajax -->
        <task name="agendas.ajax_publish" view="agendas" layout="list" tablename="allevents_agenda" />
        <task name="agendas.ajax_unpublish" view="agendas" layout="list" tablename="allevents_agenda" />        
        <task name="agendas.ajax_accessregistered" view="agendas" layout="list" tablename="allevents_agenda" />
        <task name="agendas.ajax_accessspecial" view="agendas" layout="list" tablename="allevents_agenda" />
        <task name="agendas.ajax_accesspublic" view="agendas" layout="list" tablename="allevents_agenda" />        
     </tasks>     

Lorsque la tâche à exécuter est « agendas.display », le contrôleur du plugin sait donc que :

  • le contrôleur est agendas.php (première partie du nom de la tâche)
  • la tâche se nomme display.  Cette tâche est programmée dans le contrôleur agendas.php
  • la tâche doit afficher une vue nommée « agendas » et le layout doit être « list ».


Le manifest (fichier metadata.xml) ne reprenait pas seulement la liste des tâches.  Vu qu’il s’agit du manifest de la vue « agendas » ; il reprend la description de l’affichage de la vue :

<views>
   <view name="agendas" >
      <layout name="list" isList="true" permissions="isAdmin" tablename="allevents_agenda" img="agenda" title="COM_ALLEVENTS_AGENDAS_MGT" subtitle="" tip="COM_ALLEVENTS_EVENT_AGENDAS_MGT" action="index.php?option=com_allevents" editTask="agenda.edit">
         <toolbar>
            <button name="add" permissions="canAdd" task="agenda.add" />
            <button name="edit" permissions="canEdit" task="agenda.edit" />
            <button name="publish" permissions="canEdit" task="agendas.publish" />
            <button name="unpublish" permissions="canEdit" task="agendas.unpublish" />
            <button name="delete" permissions="canDelete" task="agendas.delete" />
            <button name="csv" permissions="isAdmin" task="agendas.csv" icon="download" iconOver="" alt="EVENT_CSV" />    
            <button name="help" url="http://allevents.avonture.be/agenda" />      
         </toolbar>
         <menu>
            <entry label="COM_ALLEVENTS_CONTROL_PANEL" task="main.display" />
            <entry label="COM_ALLEVENTS_EVENT_EVENTS" task="events.display"  />
            <entry label="COM_ALLEVENTS_PERMISSIONS" task="groups.display" permissions="isAdmin" />
         </menu>    
         <filters>
            <filter name="published" label="JOPTION_SELECT_PUBLISHED" />
            <filter name="access" label="JOPTION_SELECT_ACCESS" />                   
            <filter name="language" label="JOPTION_SELECT_LANGUAGE" />-->               
         </filters>               
      </layout>           
   </view>
</views>

Il s’agit donc de la vue de type « list » (et donc la liste des agendas).   Cette liste peut être affichée aux utilisateurs qui ont un niveau d’accès type administrateur.   La table gérée par la liste est allevents_agenda.   

Si une icône doit s’afficher vers la liste depuis le panneau de contrôle de AllEvents, l’icône sera « agenda » qui correspond à une classe définie dans le css de AllEvents.  

Le titre est « COM_ALLEVENTS_AGENDA_MGT » (soit « Gestion des agendas ») ; il y aura un sous-titre.   

Chaque action exécutée lancera une requête vers le contrôleur de AllEvents et, pour finir, la tâche associée à chaque entrée de la liste (soit à chaque agenda affiché) sera « agenda.edit » ce qui permettra de cliquer sur un enregistrement et de basculer dans la vue d’édition dudit agenda.

La liste devra proposer une barre d’outils avec les boutons :

  • « add » soit Nouveau.   Il faut avoir un niveau de permissions permettant de créer un enregistrement.  La tâche qui sera exécutée sera « agenda.add ».
  • « edit » soit Modifier.   Permission : canEdit et Tâche : agenda.edit
  • « publish » et « unpublish » pour permettre de publier / dépublier les agendas.
  • « delete » pour permettre la suppression d’un agenda.   Ici il fautt avoir un niveau d’autorisation canDelete.   La tâche associé sera agendas.delete.
  • « csv » qui permet d’exporter les données sous forme de fichier texte.   
  • « help » qui va ouvrir une page du site de AllEvents.

Lors de l’affichage de la liste, un menu doit être proposé et qui va reprendre, au minimum, trois entrées :

  • Un lien vers le panneau de contrôle de AllEvents (tâche main.display)
  • Un lien vers la liste des évènements (tâche events.display)
  • Un lien vers la gestion des permissions (tâche groups.display).   Le lien ne peut s’afficher que pour une personne disposant d’une permission Administrateur.

Enfin, la liste des agendas fera apparaître trois listes pour filtrer les enregistrements :

  • Une liste qui permettra de filtrer sur le statut (publié / non publié)
  • Une liste pour filtrer sur le niveau d’accès (public, enregistré, …)
  • Une liste pour filtre sur la langue

Informations supplémentaires

  • Package Free Ce billet concerne le package Free et est donc immédiatement disponible dans la version gratuitement téléchargeable de AllEvents.
Page 4 sur 69