Pour ce faire, il convient de prendre nos objectifs à rebours, commençons donc par l'arborescence. Nous allons classer nos librairies par site, ce qui est une méthode assez courante. Admettons que vous ayez une arborescence de base (plus de précisions sur l'arboresence basique dans un prochain article):

app/
library/
	Zend/
	Zend.php
www/

Nous allons stocker nos librairies dans library/ext/, comme externe, et en fonction du domaine où on peut les trouver. Prenons le cas de l'excellent PHPMailer, qui est hébergé sur http://phpmailer.sourceforge.net/. Nous stockerons cette librairie dans library/ext/net/sourceforge/phpmailer/, ce qui résoud la problèmatique de l'arborescence.

Pour attaquer la 2ème problèmatique (convention de nommage), nous allons créer un nouveau répertoire dans library qui contiendra nos extensions au framework. Ce répertoire nous sera très utile par la suite. Nous l'appellerons ici Extensions, mais cela peut-être n'importe quel nom qui peut vous sembler approprié, Monappli par exemple. Une fois ce répertoire créé, nous pouvons passer aux choses sérieuses, et créer notre classe Extensions_Mailer dans library/Extensions/Mailer.php:

require_once dirname(__FILE__).'/../ext/net/sourceforge/phpmailer/class.phpmailer.php';

class Extensions_Mailer extends PHPMailer {

}

Et voilà, tous nos problèmes sont résolus. Notre classe est désormais reconnue par Zend::loadClass, ce qui finalement était bien le but de l'opération:

Zend::loadClass('Extensions_Mailer');
$mailer = new Extensions_Mailer;

L'objet $mailer est donc une instance de Extensions_Mailer, qui n'est finalement que la classe PHPMailer renommée ! Cela permet également au passage de surclasser PHPMailer pour y ajouter nos propres fonctions.