Surcharge et héritage
Par où commencer ?
Vous venez de réaliser votre première mouture de votre fichier XSD et vous souhaitez savoir ce que vous avez généré. Rendez-vous dans le repertoire de la librairie pdomap, puis dans le sous-repertoire cache. Dans celui-ci vous trouverez un fichier portant le même nom que votre fichier XSD avec l'extension PHP. Vous pouvez l'ouvrir et le consulter, la structure de celui-ci sera similaire a ce schéma :

Votre plan de travail
Créez un repertoire annexe dans lequel vous allez stocker toutes les classes re-définissant l'héritage. Dans le projet pdoBlog vous les trouverez dans includes/mapping.
Ce n'est qu'un conseil, mais je préconise de créer un fichier par classe car sinon vous pouvez rapidement vous retrouver à scroller 10 pages pour retrouver une simple fonction.
On attaque l'héritage
Faut pas apréhender cette partie, pdoMap est conçu de manière à pouvoir facilement hériter les classes générées. La première des choses à faire c'est de créer votre propre schéma, héritant du schéma de votre mapping - il porte le même nom que votre fichier XSD.
Le principe de l'objet schéma comme vous pouvez le voir sur le diagramme UML est de charger une instance de chaque Table Adapter. Si vous souhaitez spécialiser un Item ou un Table Adapter vous devrez donc spécialiser le schema.
Pour cela définissez les instances vers les différents Table Adapters en surchageant la fonction Initialize. Voici un exemple de code :
class myBlog extends pdoBlog {
public function Initialize() {
$this->authors = new pdoBlog_authors('myBlog_author');
$this->posts = new pdoBlog_posts('myBlog_post');
$this->categories = new pdoBlog_categories('myBlog_category');
$this->comments = new pdoBlog_comments('myBlog_comment');
parent::Initialize();
}
}
Spécialiser l'item
Dans la plupart des cas vous n'aurez pas besoin de spécialiser l'adapter, mais juste son item. Si c'est le cas, vous n'avez pas besoin de redéfinir l'adapter. Instanciez celui-ci en lui indiquant en paramètre sous forme de chaîne caractères le nom de la classe à utiliser en tant que template lors du chargement d'un item. Les fonctions retournant un recordset ou la fonction CreateNew utilisera alors votre classe.
Une chose interessant pouvant être mappée, c'est les fonctions spécifiques à un enregistrement définies dans l'adapter. Vous avez une table articles, ainsi qu'une table commentaires. Vous pouvez définir une fonction de type COUNT dans le table adapter des Articles, ayant pour paramètre l'id d'un Article. Ce serais bien d'avoir cette fonction assignée directement à un item :
function CountComments() {
return $this->getAdapter()->CountComments($this->GetID());
}
A vous d'utiliser les surcharges et les fonctions du système selon vos besoins et le plus judicieusement possible.
Spécialiser l'adapter

