Archives de la catégorie Elgg

WikiMOOC: Une expérience intéressante

Qu’est-ce que WikiMOOC?
J’ai participé pendant le mois de février-mars au WikiMOOC, qui proposait d’apprendre à contribuer sur Wikipedia. Bien entendu, je savais que je m’engageais aussi dans du pratique: la semaine 4 vous invitait à proposer un brouillon d&r… – http://vincianeamorini.be/?p=6987

Publicités

, , ,

Poster un commentaire

Elgg: URL Rewriting ou comment faire de belles URL de base

Si vous avez besoin de personnaliser les URL de votre plugin et ne pas laisser des mod/plugin/fichier.php,vous devez les spécifier dans le fichier start.php de ce que vous êtes en train de développer.

Je ne parlerai pas des menus, je garde cette matière pour plus tard.

 

S’il s’agit d’une action qui est liée à un formulaire (c’est-à-dire au fichier qui traite les données de celui-ci), vous avez la fonction register_action().

register_action("grr/save", false, $CONFIG->pluginspath."grr/actions/save.php");

 

Il suffira d’indiquer dans votre balise form le code suivant:

<form action="<?php echo $vars['url']; ?>action/grr/save" method="post">

 

Si par contre, il s’agit d’une autre url, comme l’affichage d’une liste, l’affichage d’un formulaire ou tout autre chose, créez votre propre page_handler().

register_page_handler('grr','grr_page_handler'); //register_page_handler(nom_du_plugin, nom_de_la_fonction

 

Ensuite, plus loin, vous créez cette fameuse fonction:

function grr_page_handler($page) {

switch ($page[0]) {

//liste des ressources
case "ressources":
case "choix_ressource":
include(dirname(__FILE__) . "/list.php");
break;

//liste des réservations de l'utilisateur connecté
case "mes_reservations":
include(dirname(__FILE__) . "/my_reservations.php");
break;

//liste des réservations
case "reservations":
include(dirname(__FILE__) . "/list_reservation.php");
break;

//modifier une ressource
case "edit":
set_input('id', $page[1]);
include(dirname(__FILE__) . "/edit.php");
break;

//ajouter une ressource
case "add":
include(dirname(__FILE__) . "/add.php");
break;

//lien réserver dans la fiche ressource
case "reserver":
set_input('id', $page[1]);
include(dirname(__FILE__) . "/reservation.php");
break;

default:
return false;
}

return true;
}

 

  • $page[0] = ce qui vient après le nom du plugin (ex: pg/grr/add => add = $page[0])
  • C’est donc bien une comparaison du $page[0] et c’est donc bien les noms choisis qui iront dans les URL
  • $page[1] = ce qui suit page[0] (ex: pg/grr/edit/15 => $page[1] = 15)
  • on inclut le fichier qui est à la racine de votre plugin et qui contient les données ainsi que les inclusions des vues nécessaires
  • on peut parfaitement inclure des fichiers qui seraient dans d’autres dossiers à condition de bien renseigner le chemin
  • set_input(‘nom_input’,$page[1]) = indique que l’on envoie un paramètre permettant de retrouver ce dont on a besoin ($_GET en php) qui se trouve à la place de $page[1]
  • pour que set_input serve à quelque chose, vous devez avoir dans le fichier qui est inclus un get_input(« paramètre ») et l’utilisation de ce que vous récupérez permettant l’affichage de certaines données
  • il n’est pas interdit d’utiliser $page[2], $page[3], etc.., surtout si vous avez plus d’un objet.

Ensuite, à chaque lien, vous devrez changer en pg/nom_du_plugin/$page[0]/$page[1]:

[...]

<a href="<?php  echo $vars['url']?>pg/grr/edit/<?php echo $reservation->guid; ?>">
<?php echo elgg_echo("grr:edit");?>
</a>

[...]

 

Vous pouvez aussi pour la fiche de vos objets améliorer l’url (je prends l’exemple du module blog d’Elgg) grâce à register_entity_url_handler():

register_entity_url_handler('blog_url','object','blog');//nom de la fonction, type, nom

 

Vous devez créer ensuite la fonction:

function blog_url($blogpost) {

global $CONFIG;
$title = $blogpost->title;
$title = elgg_get_friendly_title($title);
return $CONFIG->url . "pg/blog/read/" . $blogpost->getGUID() . "/" . $title;
}

 

Comme vous le voyez, vous avez plusieurs possibilités de faire et une fois que vous avez compris le principe, ce qui vous semblait incompréhensible devient très clair (quoique certaines pages start.php restent nébuleuses dans Elgg).

Poster un commentaire

Tildee.net: créer des tutoriels simples et rapides

Une des personnes que je suis sur Twitter a envoyé un message à propos de Tildee, un site permettant de faire des tutoriels simples et rapides. Je dois avouer que la version est très minimaliste mais néanmoins, permet de mettre en ligne des explications simples.

Pour l’utiliser, vous devez d’abord vous inscrire. Une fois ceci fait, vous pourrez commencer à faire vos tutoriels. Comment cela marche?

En fait, Tildee sépare chaque partie en étapes, bien indiquées par un numéro et et un barre verte symbolisant la longueur de chacune d’entre elles.

Début de l'écriture du tutoriel

Vous pouvez donc aisément partager votre tutoriel en plusieurs sections. Pour la mise en forme de votre texte, la seule balise autorisée est {b}{/b} pour mettre en gras ce que vous voulez mettre en évidence.

 

Vous pouvez aussi ajouter une image ou une vidéo ou une carte de Google Maps par étape. Ici, je ne teste qu’avec l’image.

Ajouter une image

Vous aurez une prévisualisation de l’image qui a été sauvée (vous pouvez donc fermer cette fenêtre pour plus de confort).

Sachez que l’image se mettra d’office à gauche du texte, ce qui peut être désagréable si on a un long texte ou si vous faites du copier/coller, votre ponctuation sera mauvaise. L’insertion d’une image seule sans texte est impossible, ce qui est quelque part dommage pour la mise en page. L’insertion des images n’est intéressante dans Tildee que si vous mettez une légende plutôt qu’un texte normal. A ce moment-là, vous mettez le texte dans une étape et l’image avec légende dans une autreImage ajoutée

Une fois votre tutoriel fini, cliquez sur le bouton bleu « Voilà c’est fini » pour publier votre travail. Vous arriverez à une page avec l’adresse de celui-ci pour pouvoir le partager avec vos contacts.

Lien du tuto

 

Vous pouvez admirer votre oeuvre et la modifier au besoin (en sachant que Tildee compte le nombre de mises à jour, indiqué dans « Version » en haut à droite).

Exemple de tuto

Ce site est donc à utiliser pour des tutoriels simples ne concernant pas les langages de programmation (bonne chance pour le respect de l’indentation et pour mettre en évidence certains passages).

 

Voici mes deux premiers essais (sans mise en forme particulière):

Tuto 1 (exemple du post)

Tuto 2 (test avec la première page du tuto symfony)

Mon profil

, ,

Poster un commentaire

Elgg: input pulldown et attribut selected

Derrière ce nom barbare se trouve en fait la question: Comment faire en sorte que dans un formulaire, une valeur d’une liste de choix soit déjà sélectionnée car associée à l’objet concerné?

 

Imaginez une seconde que vous avez un objet à classer dans une catégorie: une voiture dans la catégorie « voiture ». Vous avez ajouté l’objet dans la base de données mais vous devez faire une modification dans sa fiche. Par conséquent, vous avez besoin d’un formulaire d’édition contenant l’ensemble de ses données mais aussi les différentes catégories qui existent si vous devez changer la catégorie (vous avez mis la voiture dans la catégorie « salle » par exemple).

 

Dans mon fichier de départ, je récupère la ressource à modifier ainsi que les différentes catégories de ressource pour mon pulldown. Je prépare ce dernier tableau comme indiqué dans l’article Principe de l’input pulldown.

$area2 = elgg_view("grr/form_edit", array("types"=>$titles, "ressource"=>$ressource));

Ensuite, dans mon formulaire, ma ligne sera:

<?php echo elgg_view('input/pulldown', array('internalname'=>'domaines', 'options_values'=>$vars['types']));?>

 

Ceci affiche bien ma liste de choix avec les catégories mais la catégorie à laquelle ma ressource appartient n’est pas celle qui apparaît (par défaut, il a affiché la première catégorie du tableau $vars[‘type’]).

 

Comment faire?

 

Il suffit d’ajouter ‘value’=>$vars[‘ressource’]->domaines dans le tableau des options (mon objet a comme metadata domaines qui correspond à la catégorie à laquelle il appartient):

<?php echo elgg_view('input/pulldown', array('internalname'=>'domaines', 'options_values'=>$vars['types'], 'value'=>$vars['ressource']->domaines));?>
  • internalname = nom de l’input
  • options_values = tableau des options de la liste de choix
  • value = valeur qui doit être sélectionnée (par défaut ou correspondant à l’objet concerné)

 

Maintenant, vous savez comment faire en sorte qu’une valeur de la liste de choix soit sélectionnée par votre propre vouloir.

, , ,

Poster un commentaire

Elgg: Principe de l’input puldown

L’input pulldown fonctionne comme tous les inputs: il lui faut un nom, des valeurs, etc.. Mais le pulldown représente un <select>, par conséquent, il y a des différences par rapport à un input normal.

Voici l’exemple d’utilisation d’un pulldown:

<?php
echo elgg_view('input/pulldown', array('internalname'=>'r',
                                       'options_values'=>array('1'=>'A','2'=>'B')
                                       )
               );
?>

elgg_view aide à la mise en page mais pour l’affichage réel de votre liste de choix, vous devez ajouter l’instruction php echo.

Comme paramètres, vous passez ce que vous voulez voir, dans notre cas, un input/pulldown et les attributs de celui-ci dans un tableau:

  • internalname = nom du<select>
  • options_values = ce qui sera inscrit entre les balises <option></option> et l’attribut value de celle-ci, également dans un tableau

La structure peut être comprise ainsi:

<?php
echo elgg_view('input/pulldown',
                      array('internalname'=>'name_select',
                             'options_values'=>array('value_option'=>'texte_entre_les_balises_option',
                                                      'value_option'=>'texte_entre_les_balises_option'
                                                     )
                            )
               );
?>

Ceci donnera, en HTML:

<select name="r">
<option value="1">A</option>
<option value="2">B</option>
</select>

Mais comment faire un pulldown quand des données viennent de la base de données?

Dans Elgg, vous devez d’abord récupérer vos objets concernant votre liste de choix, en utilisant elgg_get_entities (on précise le type d’entité à récupérer ainsi que son genre)

$ressources = elgg_get_entities(array('type'=>'object','subtype'=>'ressource'));

Ensuite, pour être sûr de traiter le bon objet, vous avez besoin de son GUID (numéro unique dans toute la base de données) et de son nom (title dans Elgg). Pour cela, il suffit de faire un tableau de cette manière:

foreach ($ressources as $r){
$titles[$r->guid] = $r->title;
}

Alors pourquoi mettre comme indice le GUID? Si vous ne le faites pas, au moment de construire le pulldown, Elgg considérera comme « value » à mettre l’indice par défaut (0,1,2,3, etc.), ce qui ne correspondra pas au GUID de votre objet. Cela rendra donc le traitement de celui-ci plus compliqué s’il s’agit d’une mise à jour: il vous sera quasi-impossible de le trouver. Aussi, pour qu’Elgg prenne comme « value » le GUID, vous devez remplacer l’index par défaut par celui-ci.

Ensuite, il ne restera plus qu’à coder l’input de cette manière:

<?php echo elgg_view('input/pulldown', array('internalname'=>'ressource', 'options_values'=>$titles));?>

$titles est bien un tableau, comme requis dans le principe de base.

Vous obtiendrez alors ce que vous voulez:

<select name="ressource">
<option value="13">Caméra 11</option>
<option value="8">Caméra 23</option>
</select>

Cette ligne-là est donc très importante dans votre foreach:

$titles[$r->guid] = $r->title;

A présent, vous pouvez manipuler l’input pulldown et passer au moins le GUID et le title de vos objets!

, , , ,

Poster un commentaire

Check-list: Installer Elgg dans Wamp

Installer Elgg semble simple de prime abord mais certains détails font qu’il faut passer plus de temps qu’il n’en faut pour tout résoudre. La plupart de mes erreurs sont:

– pas d’activation du mod_rewrite

– mauvaise écriture de l’url dans .htaccess

– mauvais placement du dossier data

 

Voici donc une checklist pour installer Elgg dans Wamp. J’utilise la version 1.7.9 d’Elgg et Wamp 2.1e.

 

1) Vérifiez si mod_rewrite est bien activé dans le fichier httpd.conf d’Apache. Sinon, retirez # devant la ligne.

LoadModule rewrite_module modules/mod_rewrite.so

2) Créez votre base de données via phpMyAdmin.

 

3) Ouvrez le fichier engine/settings.example.php et fournissez les paramètres de connexion à la base de données (« user », « password », « host »). N’oubliez pas de retirer les deux paires d’accolades. Renommez le fichier en settings.php. Voici à quoi doit ressembler le contenu.

[...]

// Database username
$CONFIG->dbuser = 'root';

// Database password
$CONFIG->dbpass = '';

// Database name
$CONFIG->dbname = 'elgg';

// Database server
// (For most configurations, you can leave this as 'localhost')
$CONFIG->dbhost = 'localhost';

// Database table prefix
// If you're sharing a database with other applications, you will want to use this
// to differentiate Elgg's tables.
$CONFIG->dbprefix = 'elgg_';

[...]

4) Ouvrez le .htaccess dans le dossier racine d’Elgg et activez le RewriteBase. Si vous avez installé les fichiers dans www/elgg/elgg-1.7.9, vous devez avoir le code qui suit:

 

RewriteBase /elgg/elgg-1.7.9/

 

Si vous avez comme chemin www/elgg, alors, vous vous limitez à:

 

RewriteBase /elgg/

 

5) Créez un dossier data en dehors de l’installation. Imaginez que vous avez le chemin www/elgg/elgg-1.7.9. Votre dossier data devra être le suivant: C://wamp/www/elgg/data. Dans l’interface d’installation, Elgg demandera le chemin vers ce dossier, il doit commencer par C://wamp/www.

 

Bon amusement avec Elgg ensuite!

 

, , ,

Poster un commentaire

Utilisation d’un bouton radio dans Elgg

Je dois avouer que j’ai mis du temps à comprendre comment fonctionnait les boutons radio – du moins comment les faire apparaître – dans Elgg. Après avoir consulté plusieurs blogs, posts de forum, etc., j’ai finalement trouvé la raison pour laquelle rien ne voulait s’afficher sur mon écran.

 

Voici comment insérer des boutons radios dans un formulaire:

<?php echo elgg_view('input/radio', array('internalname'=>'est_disponible',
                                          'options'=>array('Oui'=>'1'),
                                          'value'=>'checked'
                                         )) ?>
<?php echo elgg_view('input/radio', array('internalname'=>'est_disponible',
                                          'options'=>array('Non'=>'0')
                                         )) ?>

 

En fait, pour faire apparaître les boutons, ‘options’=>array(…) est obligatoire. Dans ce tableau, nous trouverons la valeur qui doit être affichée à l’écran (le label quelque part) et la valeur contenue dans l’attribut value de l’input.

<?php echo_elgg_view('input/radio', array('internalname'=>'nom_input',
                                          'options'=>array('label_valeur_ecran'=>'valeur_attribut_value')
                                          )) ?>

 

 

Enfin, si le gras de ce qui est affiché à l’écran vous gêne, allez dans views/default/input/radio.php et retirez les balises <label></label> dans la dernière ligne du fichier (echo …).

Poster un commentaire