Hello, I’m Vinch

And this is my website.

Mon premier site réalisé avec symfony…

09/02/08

This post is more than 8 years old. It might not reflect my current skills and convictions.

Il s’agit du nouveau site de Wrangler Europe, réalisé pour Emakina.

Je tenais à faire ce billet, non pas pour vanter le site en lui-même mais pour dire que je suis particulièrement convaincu par le framework PHP symfony !

C’est la première fois que je m’amuse autant en programmant, la première fois que je réalise un site Web ultra-dynamique sans faire une seule requête SQL, la première que j’apprécie vraiment PHP. Oui, c’est un peu ce que ressentent 99% des gens lors de leur premier projet en Ruby on Rails. Oui, mais moi, je n’ai pas accroché à RoR même si je reconnais que c’est franchement pas mal (je ne suis peut-être pas encore assez mûr pour ça).

Même si ça peut passer pour un avis “à chaud” et peu raisonné, je pense parler en connaissance de cause car j’ai déjà réalisé des projets avec CakePHP et Code Igniter mais il n’y a rien à faire, symfony les surpasse largement !

Bref, j’y reviendrai sans doute plus tard dans des billets plus techniques (j’ai déjà quelques idées de plugins) mais pour l’instant, il faut que vous reteniez juste une chose : symfony, c’est génial !

Générez vos fichiers KML automatiquement avec l’aide de PHP

05/17/07

This post is more than 10 years old. It might not reflect my current skills and convictions.

Ça pourrait vous être utile. Il s’agit d’un fichier PHP auquel vous passez les coordonnées GPS d’un point et qui vous crée automatiquement un fichier KML pour Google Earth.

<?php
header("Content-Type: application/vnd.google-earth.kml+xml");
header("Content-Disposition: attachment; filename=location.kml");
$x = $_GET['x'];
$y = $_GET['y'];
echo('<?xml version="1.0" encoding="utf-8"?>');
?>

<kml xmlns="http://earth.google.com/kml/2.1">
  <Document>
		<Placemark>
			<Point>
				<coordinates><?php echo $x; ?>,<?php echo $y; ?></coordinates>
			</Point>
		</Placemark>
	</Document>
</kml>

Note : j’ai placé la déclaration XML dans un echo car ça entrait en conflit avec les déclarations PHP.

Un exemple ici (ma maison) : http://www.vinch.be/attic/kml.php?x=4.186022&y=50.636758

Templates PHP et Smarty pour créer des flux RSS 2.0

04/01/07

This post is more than 10 years old. It might not reflect my current skills and convictions.

Comme promis dans un précédent billet, voici les templates en PHP et via la syntaxe Smarty pour générer des flux RSS 2.0 (minimaux).

Vous devez d’abord vous assurer de transmettre à votre template un array nommé articles qui ressemble à peu près à ceci (si vous utilisez MySQL comme SGBDR, un mysql\_fetch\_assoc devrait vous donner ce genre de résultat) :

Array
(
    [0] => Array
        (
            [title] => Vous allez bien ?
            [url_title] => vous-allez-bien
            [creation_date] => 2007-04-01 00:00:01
            [description] => C'est juste une question comme ça, en passant...
        )

    [1] => Array
        (
            [title] => Bonjour la compagnie !
            [url_title] => bonjour-la-compagnie
            [creation_date] => 2007-03-31 23:59:59
            [description] => Ceci est un exemple d'article qui ne sert à rien, c'est juste pour montrer...
        )

    [2] => Array
	(
		...
	)
    ...
)

* title correspond au titre de l’article.
* url\_title est un identifiant unique de l’article. Il s’agit du titre transformé en quelque chose pouvant « se trouver » dans une URL. Il est composé uniquement des caractères qui y sont autorisés, c’est-à-dire des chiffres, des lettres et des tirets (préférés aux underscores). Par exemple, si le title est « Bonjour la compagnie ! », on aura « bonjour-la-compagnie » comme url\_title. On préfère afficher un identifiant unique de cette forme plutôt qu’un simple identifiant numérique pour améliorer le référencement naturel.
* creation_date correspond à la date de création de l’article, au format DATETIME (car provenant en général de MySQL).
* description est une introduction de l’article voire l’article tout entier (il y a beaucoup de débats à ce propos sur le Web).

Vous pouvez bien sûr adapter les noms à votre convenance, ça n’a absolument aucune importance, à condition que ça corresponde avec ce qui se trouve dans le template.

N’oubliez pas de spécifier le type MIME dans le fichier PHP qui appelle le template. Vous pouvez le faire en ajoutant cette ligne de code tout en haut du fichier :

<?php header('Content-Type: text/xml; charset=UTF-8'); ?>

Ou encore mieux :

<?php header('Content-Type: application/rss+xml; charset=UTF-8'); ?>

Cette ligne a pour but de dire à votre navigateur de considérer votre flux comme étant de type XML (et de l’afficher en conséquence). Si vous ne dites rien, il l’affichera comme du HTML (text/html étant le type MIME par défaut).

Le template en PHP est le suivant :

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>Les articles de Vincent Battaglia</title>
		<link>http://www.vinch.be/articles/</link>
		<description>Ceci est un exemple !</description>
		<?php foreach($articles as $article) : ?>
		<item>
			<guid>http://www.vinch.be/articles/view/<?php echo $article['url_title']; ?></guid>
			<title><?php echo $article['title']; ?></title>
			<link>http://www.vinch.be/articles/view/<?php echo $article['url_title']; ?></link>
			<description><?php echo $article['description']; ?></description>
			<pubDate><?php echo date("D, j M Y H:i:s", $article['creation_date'];);?></pubDate>
		</item>
		<?php endforeach; ?>
	</channel>
</rss>

Avec la syntaxe Smarty, on a :

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>Les articles de Vincent Battaglia</title>
		<link>http://www.vinch.be/articles/</link>
		<description>Ceci est un exemple !</description>
		{foreach from=$articles item=article}
		<item>
			<guid>http://www.vinch.be/articles/view/{$article.url_title}</guid>
			<title>{$article.title}</title>
			<link>http://www.vinch.be/articles/view/{$article.url_title}</link>
			<description>{$article.description}</description>
			<pubDate>{$article.created_on|date_format:"%a, %d %b %Y %H:%M %Z"}</pubDate>
		</item>
		{/foreach}
	</channel>
</rss>

Vous devez tout d’abord entrer manuellement les informations concernant votre flux, à savoir le titre (title), l’URL vers la page principale (link) et une description du flux (description). Il existe beaucoup d’autres balises enfants de channel mais seules les trois citées précédemment sont obligatoires.

D’après la recommandation RSS 2.0, tous les enfants de la balise item sont facultatifs, à condition que soit le titre (title), soit la description (description) soit présent.

Cependant, pour chaque item, je recommande de renseigner au moins les éléments suivants :

* guid : l’identifiant unique de l’item, sous forme d’une chaîne de caractère. En pratique, on utilise souvent l’URL vers l’article comme guid.
* title : le titre.
* description : le contenu (synopsis, résumé ou article tout entier).
* link : lien vers l’article sur le site concerné.
* pubDate : date de publication de l’article au format RFC 822.

La dernière chose à faire est de valider votre flux et de le tester dans votre agrégateur préféré.

Je suis ouvert à vos questions/suggestions 😉