Génération d’un index A-Z selon le contenu de ma base de données

Dans ce mini article, je vais vous montrer la manière utilisée pour réaliser une liste A-Z avec des hyperliens sur certaines lettres. Je réalise une requête sql me récupérant uniquement la première lettre de chaque titre et de manière unique puis je construis un tableau me permettant de contrôler l’existence de celle-ci dans ma boucle.

Index à produire:
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Fonction réalisée dans mon modèle:

$results = Doctrine_Query::create()
->select('r.id, SUBSTRING(t.name,1,1) letter')
->from('Resource r')
->where()
->orderBy('t.name')
->groupBy('t.name')
->execute();

$letters = array();
foreach($results AS $result)
{
  $letters[] = $result->letter;
}
return $letters;

Je reçois en retour un tableau avec les lettres disponibles.

Génération de la liste dans mon Template:

<?php for($i = 65; $i < 91; $i++): ?> <?php $letter = strtoupper(chr($i)); ?> <?php echo (in_array($letter, $results)) ? link_to($letter, '/resources/index') : $letter; if($i < 91) { echo " "; } ?> <?php endfor; ?>

J’espère que cet exemple vous sera utile dans un de vos développements.

Share

En vrac 02

Share

En vrac 01

  • Robotstxt, informations sur ce que l’on peut mettre dans le fameux fichier robots.txt
  • OdtPHP, une classe php permettant la manipulation de document OpenOffice
  • ThickBox, un plugin jquery pour la réalisation de dialogues
  • Rsync, synchronisation de répertoires en une machine locale un serveur distant
  • iPhone, développement d’interface pour le téléphone Apple
  • Attributs alt et title en HTML, explication de la bonne utilisation de ces deux balises
  • GoogleMaps API, une classe php pour l’utilisation de Google Maps
  • Mapicon factory, génération de logo pour l’intégration dans Google Maps
  • Regex, Interface de tests pour vos expressions régulières
  • Doctrine pour les nulle, un petit tutorial sur l’utilisation de doctrine
  • Symfony: observe_field, utilisation de prototype avec la mise à jour d’un champ input
  • PHP: cURL, récupération parallèle de données
  • Comparatif de gestionnaires de fichiers en php
Share

Assignation du langage dans la balise html

De base, symfony ne fourni pas une fonction de récupération du langage de l’interface utilisateur mais seulement la culture. Dans le layout par défaut, vous trouvez cette balise:

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

Sur un site multilingue, cette information est très importante pour les robots de recherche. Elle permet de classer son contenu selon la langue affichée. Dans mon cas, j’utilise fr_CH comme culture par défaut et comme j’aimerai garder uniquement les deux premiers caractères, j’ai inséré une fonction dans la classe myUser.class.php se trouvant dans le dossier lib de l’application:

class myUser extends sfBasicSecurityUser
{
  ... 
  public function getLanguage()
  {
    $result = explode('_', $this->getCulture());
    return $result[0];
  }
  ...
}

Ensuite, il suffit de personnaliser la balise html avec la fonction ci-dessus:

<html xmlns="http://www.w3.org/1999/xhtml"
      xml:lang="<?php echo $sf_user->getLanguage(); ?>"
      lang="<?php echo $sf_user->getLanguage(); ?>">

J’espère que cette petite astuce vous servira…

Share

iTerm et les caractères accentués

Vous vous êtes souvent posé la question concernant la non possibilité de saisie des caractères accentuées. En faite, iTerm chercher un contante LANG qui n’est pas déclarée par défaut dans votre profile.

Pour visualiser votre configuration:

$ locale

Vous constaterez que la constante LANG est vide.

Voici la solution pour retrouver les accents:

$ cd
$ vi .profile
export LANG=fr_CH.UTF-8
export LC_ALL=fr_CH.UTF-8

Pour connaître les choix possibles:

$ locale -l

Relancer le programme iTerm et le tour est joué.

Share

Subversion: Réglage automatique de propriétés

Le serveur Subversion n’a pas d’option pour l’activation du réglage automatique de propriétés. Vous pouvez cependant activer ces éléments directement sur votre poste client.

Lorsque je développe mes scripts, j’ai en général, un portion de mon entête qui se présente sous cette forme:

* @package    Nom du projet
* @subpackage Nom du module
* @author     Nom de l'auteur
* @version    SVN: $Id$

Rendez-vous dans votre terminal:

$ cd (vous devriez vous retrouver dans votre répertoire)
$ cd .subversion
$ vi config

Décommenter la ligne suivante dans la section [miscellany]:

enable-auto-props = yes

Ajouter la ligne suivante dans la section [auto-props]:

*.php = svn:eol-style=native;svn:keywords=Id

Au prochain commit (svn ci), le tag $Id$ devrait être renseigné.

Share

Doctrine 1.0 publié

On l’attendais depuis quelques temps, l’ORM doctrine a été publié en version 1.0 finale le 1 septembre 2008.

Son intégration officielle dans symfony est prévue pour le mois d’octobre 2008. Cela va être également la publication de l’excellent framework en version 1.2.

Un exemple de requête DQL:

$user = Doctrine_Query::create()
        ->from('User u')
        ->leftJoin('u.Email e')
        ->leftJoin('u.Phonenumber p')
        ->leftJoin('u.Group g')
        ->execute();

Récupération des valeurs:

print $user->Email['address'];

print $user->Phonenumber[0]->phonenumber;

print $user->Group[0]->name;
Share