
Ce didacticiel présente les principales fonctionnalités de FileMaker API for PHP. Il se compose de 6 leçons visant à vous apprendre comment utiliser l'API afin d'intégrer une base de données FileMaker Pro dans une application Web PHP. Chaque leçon aborde une fonction spécifique de l'API et fournit des explications sur l'écriture du code et son fonctionnement.
La base de données du didacticiel est un système de questionnaire FileMaker (questionnaire.fp7). Chaque enregistrement de questionnaire peur disposer de plusieurs questions connexes. Chaque question peut, quant à elle, disposer de plusieurs réponses connexes. Seul un questionnaire est sélectionné comme questionnaire actif. Ce questionnaire actif est celui que les utilisateurs sont invités à prendre lors de l'utilisation de l'application Web PHP. Lorsqu'un utilisateur remplit un questionnaire en ligne, le système ajoute un enregistrement Respondent pour l'utilisateur, ainsi que ses réponses en tant qu'enregistrements liés.
Ce didacticiel permet d'élaborer une application Web PHP petit à petit, chaque leçon venant s'ajouter à la précédente, comme indiqué ci-après :
Ce didacticiel ne couvre pas l'intégralité de l'API. Toutefois, ces leçons permettent d'obtenir de bonnes bases. Afin d'en savoir plus sur l'API, consultez la documentation de FileMaker API for PHP.
Pour afficher la documentation de FileMaker API for PHP, allez à la page de démarrage de la console Admin FileMaker Server et cliquez sur « Outils PHP Site Assistant et XSLT Site Assistant ». Sur la page Outils de publication Web, cliquez sur « Documentation de FileMaker API for PHP ». Cette documentation pourra vous servir de référence pour ce didacticiel. Elle vous permettra de mieux découvrir les possibilités offertes par l'API FileMaker pour PHP.
Vous devriez également vous familiariser avec la base de données questionnaire.fp7. Découvrez la façon dont elle fonctionne et la façon dont sont créés les questionnaires à l'aide de questions à choix multiples. Votre connaissance de la conception questionnaire.fp7 sera essentielle à la bonne compréhension de la façon dont l'application PHP du didacticiel utilise l'API.
FileMaker Server 9 doit être installé et héberger la base de données questionnaire.fp7. Le dossier du didacticiel doit être hébergé sur le même ordinateur que le serveur Web, à l'intérieur de votre déploiement FileMaker.
Pour plus d'informations sur l'installation et le déploiement de FileMaker Server 9, consultez le Guide de démarrage de FileMaker Server. Pour plus d'informations sur l'API FileMaker pour PHP, consultez Publication Web personnalisée FileMaker Server avec PHP.
Vous devez avoir des connaissances en programmation HTML : déclarations HTML, en-têtes et balises d'éléments. Si vous avez besoin d'autres informations sur la programmation des pages Web en HTML, consultez le didacticiel XHTML sur W3Schools.
Vous devez avoir des connaissances en programmation PHP : sortie standard, variables, tableaux, boucles conditionnelles, objets, méthodes et fonctions. Pour plus d'informations sur la programmation en PHP, consultez le didacticiel PHP sur W3Schools.
Vous devez savoir utiliser un éditeur de texte avec HTML et PHP. Ce didacticiel nécessite l'utilisation d'un éditeur de texte pour afficher et modifier le code HTML et PHP.
Vous devez également avoir une connaissance pratique de la conception de la base de données FileMaker Pro : rubriques, liens, modèles, tables externes et objets multimédia. Pour plus d'informations sur la conception des bases de données avec FileMaker Pro, consultez la documentation de FileMaker Pro.
Lors de la modification d'enregistrements dans FileMaker Pro, n'oubliez pas de quitter ou de valider l'enregistrement afin qu'elle soit prise en compte. Les pages Web ne reflètent les modifications saisies dans la base de données que lorsque vous avez quitté l'enregistrement.
Afin d'afficher les pages PHP de chaque leçon dans votre navigateur Web, vous devez fournir l'URL entièrement qualifiée pour que le code PHP soit exécuté. Si, par exemple, les fichiers sont hébergés sur l'ordinateur local, saisissez dans votre navigateur une URL commençant par « http://localhost/... ». N'utilisez pas le chemin de fichier local, qui peut commencer par « file:///Volumes/... ». L'utilisation d'une URL « file:// » entraîne l'affichage du code PHP, et non son exécution. Assurez-vous toujours que l'URL commence par « http », ou « https » si vous avez configuré SSL sur votre serveur Web.
La leçon 1 vous fournit les données essentielles pour utiliser l'API FileMaker pour PHP dans deux fichiers PHP : home.php et dbaccess.php. Le fichier home.php sert de point de départ au navigateur, tandis que le fichier dbaccess.php définit un objet FileMaker représentant la base de données. Ces pages décrivent les étapes de base nécessaires à l'instanciation de l'objet de base de données FileMaker en définissant ses propriétés principales et en effectuant une recherche dans la base de données questionnaire.fp7.
Pour voir l'exemple du didacticiel, dirigez votre navigateur vers home.php, situé dans le dossier Lesson1. Cette page affiche l'écran d'accueil du système de questionnaire FileMaker. Lors du chargement de la page, une connexion est établie entre PHP et le moteur de publication Web, ce qui entraîne un résultat trouvé dans la base de données du questionnaire.p7.
En utilisant votre éditeur de texte, ouvrez le fichier home.php situé dans le dossier Lesson1. Trouvez le code ci-après, juste après la balise body.
<?php include ("dbaccess.php"); ?>
L'instruction PHP inclut, ou charge, le fichier dbaccess.php. Le fichier dbaccess.php contient des fonctions permettant de définir l'objet de base de données FileMaker et de le préparer à des opérations de base de données. En conséquence, les méthodes API contenues dans home.php ne fonctionneront pas sans lui. Les méthodes contenues dans le fichier dbaccess.php auraient pu être écrites dans le fichier home.php, mais elles ont été placées dans un autre fichier pour un débogage et une maintenance plus faciles.
Le fichier dbaccess.php contient le code permettant de définir l'objet de base de données FileMaker. Il joue un rôle essentiel dans la création de l'application du questionnaire. Suivez la procédure ci-après pour définir l'objet FileMaker :
En utilisant votre éditeur de texte, ouvrez le fichier dbaccess.php situé dans le dossier Lesson1 et suivez chacune des instructions détaillées ci-dessous.
Pour utiliser l'API FileMaker, elle doit d'abord être chargée dans la mémoire PHP. Cette opération est effectuée à l'aide de l'instruction require.
require_once ('FileMaker.php');
Une fois l'API chargée, vous pouvez créer des instances de la classe de base de données FileMaker et les utiliser pour des connexions à la base de données dans votre application Web. Si vous essayez d'utiliser l'API sans la charger au préalable, vous obtiendrez une erreur.
Il est nécessaire de créer une instance de la classe de base de données FileMaker avant de pouvoir l'utiliser. Il faut également l'affecter à une variable afin de pouvoir y faire référence dans le code.
$fm = new FileMaker();
Le code ci-dessus crée une instance de l'objet de base de données FileMaker. Cette instance est affectée à la variable $fm.
L'objet de base de données FileMaker dispose d'un ensemble de propriétés qui peuvent être définies à tout moment. Toutefois, certaines de ces propriétés doivent être définies avant de pouvoir effectuer des opérations de base de données. Vous trouverez ci-dessous le code permettant de définir les propriétés requises pour ce didacticiel.
$fm->setProperty('database', 'questionnaire');
$fm->setProperty('username', 'web');
$fm->setProperty('password', 'web');
Remarque : il n'est pas nécessaire d'ajouter l'extension fp7 au nom de base de données questionnaire dans le paramètre.
Remarque : consultez la documentation de FileMaker API for PHP pour une liste des propriétés de la classe de base de données FileMaker et leurs descriptions.
Le fichier dbaccess.php ne contient que peu de code, mais il permet de préparer l'objet Filemaker à des fins d'utilisation. Une fois le fichier chargé, l'objet FileMaker est utilisable sous la variable $fm et les principales propriétés sont définies aux valeurs requises. Le fichier dbaccess.php permet au fichier home.php de communiquer avec la base de données questionnaire.fp7.
Le fichier home.php exécute deux opérations de base de données : Rechercher tout (Afficher tous les enregistrements) et Rechercher. Pour afficher le code de ces opérations, ouvrez le fichier home.php dans votre éditeur de texte. Pour afficher la base de données pour ces opérations, ouvrez le fichier questionnaire.fp7 hébergé sur FileMaker Server.
La base de données questionnaire.fp7 contient un modèle appelé Active Questionnaire. Ce modèle fait office d'interface. Sa table ne contient qu'un enregistrement. Dans ce modèle, les utilisateurs choisissent le questionnaire actif. L'application Web doit récupérer l'ID de ce questionnaire actif.
L'ID du questionnaire actif est récupéré à l'aide de la fonction Rechercher tout (Afficher tous les enregistrements) du modèle Active Questionnaire. Cette opération utilise l'objet de commande FileMaker_Command_FindAll.
Remarque : consultez la documentation de FileMaker API for PHP pour une liste des objets de commande et de leurs méthodes.
Une instance de l'objet FileMaker_Command_FindAll est créée de par l'exécution de la méthode newFindAllCommand() de $fm (instance de base de données FileMaker), en spécifiant (entre parenthèses) le nom du modèle Active Questionnaire. Le modèle détermine l'occurrence de table à utiliser (contexte) et les rubriques à renvoyer (résultats).
L'instance FileMaker_Command_FindAll doit être affectée à une variable, comme le montre l'exemple ci-après.
$findCommand = $fm->newFindAllCommand('Active Questionnaire');
Dans le code ci-dessus, on attribue un nouvel objet FileMaker_Command_FindAll à la variable $findCommand. La commande Rechercher tout est exécutée avec la méthode execute() . Les résultats de la recherche doivent être affectés à une variable.
$result = $findCommand->execute();
Il se peut qu'une erreur se produise après l'exécution d'une commande. Si c'est le cas (ou si aucun enregistrement n'a été trouvé), la variable $result est affectée à un objet FileMaker_Error. Vérifiez l'objet FileMaker_Error à l'aide du code ci-après. Le message d'erreur s'affiche avec la méthode getMessage().
if (FileMaker::isError($result)) {
echo "<p>Erreur : " . $result->getMessage() . "</p>";
exit;
}
Si aucune erreur ne s'est produite, la variable $result contient un tableau d'objets FileMaker_Record, un pour chaque enregistrement de l'ensemble trouvé. Utilisez la variable $result pour récupérer le premier enregistrement du résultat de la commande Rechercher tout. Les tableaux PHP étant indexés numériquement par défaut, on peut obtenir le premier enregistrement à l'aide du code suivant.
$record = $records[0];
Ce code affecte un objet FileMaker_Record contenant le premier enregistrement du jeu d'enregistrements trouvés à la variable $record. Vous pouvez récupérer le contenu du questionnaire_id à partir de cet enregistrement à l'aide de la méthode getField(). Les résultats de la méthode getField() doivent être affectés à une variable.
$active_questionnaire_id = $record->getField('questionnaire_id');
Cette variable contient désormais l'ID du questionnaire actif. Elle est utilisée à l'étape suivante comme paramètre de la prochaine recherche.
Remarque : consultez la documentation de FileMaker API for PHP pour une liste des objets et de leurs méthodes.
A présent que vous avez l'ID du questionnaire actif, vous pouvez l'utiliser pour rechercher l'enregistrement du questionnaire. Le code permettant d'exécuter cette opération est situé vers le bas du fichier home.php. Cette opération utilise l'objet de commande FileMaker_Command_Find.
Une instance de l'objet FileMaker_Command_Find est créée de par l'exécution de la méthode newFindCommand() de $fm (instance de base de données FileMaker), en spécifiant (entre parenthèses) le nom du modèle Active Questionnaire. Le modèle détermine l'occurrence de table à utiliser dans la recherche et les rubriques à renvoyer dans les résultats.
L'instance FileMaker_Command_Find doit être affectée à une variable, comme le montre l'exemple ci-après.
$findCommand =& $fm->newFindCommand('questionnaire');
Pour ajouter des critères à la recherche, utilisez la méthode addFindCriterion(). La méthode addFindCriterion() prend deux paramètres : fieldName et searchParameter. Passez le nom de rubrique « Questionnaire ID » (défini dans FileMaker Pro) et la variable $active_questionnaire_id comme paramètres.
$findCommand->addFindCriterion('ID Questionnaire', $active_questionnaire_id);
Remarque : la méthode addFindCriterion() peut être appelée plusieurs fois, en simulant le AND logique utilisé lors de la saisie de plusieurs critères de recherche en une seule requête dans FileMaker Pro.
Une fois les critères de recherche ajoutés, la méthode execute() est utilisée pour effectuer la recherche. Les résultats de la méthode execute() doivent être affectés à une variable.
$result = $findCommand->execute();
La variable $result contient maintenant un tableau d'objets FileMaker_Record. La recherche ayant été effectuée sur le modèle questionnaire, chaque enregistrement de $result contient les valeurs de chaque rubrique du modèle questionnaire.
Le code final de cette page utilise les instructions echo de PHP, ainsi que la méthode getField() pour afficher les rubriques Questionnaire Name et Description sur la page home.php.
La leçon 2 aborde le code nécessaire à l'affichage des images multimédia de FileMaker Pro sur le Web. Si vous stockez des images compatibles avec le Web dans une base de données FileMaker Pro, vous pouvez utiliser l'API FileMaker pour PHP pour les récupérer et les afficher sur votre site Web.
Ouvrez la base de données questionnaire.fp7 du didacticiel de l'API FileMaker et assurez-vous que le questionnaire actif dispose d'une image compatible avec le Web dans la rubrique multimédia. Affichez ensuite l'exemple du didacticiel PHP en ouvrant le fichier home.php de la Lesson2 dans votre navigateur Web. Remarquez que la page affiche l'image du questionnaire actif. Essayez de changer l'image multimédia dans la base de données FileMaker. Assurez-vous de quitter l'enregistrement lorsque vous avez terminé. Actualisez votre navigateur. Le site Web devrait se mettre à jour avec la nouvelle image.
Pour voir comment l'API est utilisée pour cette opération, ouvrez le fichier home.php dans le dossier Lesson2. Regardez les dernières instructions PHP du fichier, en faisant particulièrement attention à la balise <img> (image) et à son attribut src (source).
Veuillez noter les points suivants à propos de cette technique.
echo '<img src="ContainerBridge.php?path=' . urlencode($record->getField('Graphic')) . '">';
Une balise HTML <img> (image) devant avoir un chemin d'accès au fichier comme attribut src (source), cette leçon utilise un fichier séparé pour récupérer l'image. Le fichier qui récupère l'image multimédia s'appelle ContainerBridge.php et son nom de fichier s'affiche dans l'attribut src (source) de la balise <img> (image).
Le fichier ContainerBridge.php ne sait pas quelle image vous souhaitez afficher. Pour spécifier l'image, vous devez ajouter la valeur de la rubrique Graphic à la fin de l'URL de l'attribut src (source). En HTML, cela s'appelle la méthode GET.
A l'aide d'une paire name/value, concaténez la chaîne souhaitée en commençant par un point d'interrogation. Le name est défini sur le chemin, tandis que la value est définie sur le résultat de la méthode getField() , en passant le nom de rubrique multimédia (Graphic) entre parenthèses.
Remarque : le résultat de getField() est passé à la fonction PHP urlencode() afin de garantir le bon codage des caractères spéciaux pour une URL.
En utilisant votre éditeur de texte, ouvrez le fichier ContainerBridge.php situé dans le dossier Lesson2. Ce script simple utilise la méthode FileMaker_Record getContainerData() pour récupérer l'image.
Afin que getContainerData() fonctionne, vous devez passer les résultats de rubriques de getField() (d'une rubrique multimédia) à la méthode getContainerData() entre parenthèses. Dans home.php, le résultat de getField() pour la rubrique Graphic a été passé par l'URL. Dans ContainerBridge.php, le résultat est récupéré de l'URL via l'élément path du tableau $_GET et passé à la méthode getContainerData().
echo $fm->getContainerData($_GET['path']);
Le fichier ContainerBridge.php récupère simplement le chemin d'accès de la base de données FileMaker Pro de façon à ce que le fichier home.php puisse l'utiliser dans la balise <img> pour afficher l'image dans le navigateur Web.
Remarque : consultez la documentation de FileMaker API for PHP pour une liste des méthodes de l'objet FileMaker_Record.
La leçon 3 aborde le code nécessaire à la création d'un formulaire Web dynamique à l'aide d'objets du modèle FileMaker. Il aborde également le code nécessaire à l'ajout d'un nouvel enregistrement FileMaker à partir d'un formulaire Web. Cette leçon utilise deux autres fichiers PHP : Respondent.php et handle_form.php. Le fichier Respondent.php permet de générer dynamiquement un formulaire Web, tandis que le fichier handle_form.php est utilisé pour valider les entrées de formulaire et les entrer comme nouveaux enregistrements dans la base de données questionnaire.fp7.
Ouvrez le site Web du questionnaire en dirigeant votre navigateur vers le fichier home.php dans le dossier Lesson3. Cette version de la page affiche un bouton Continue qui permet de démarrer l'application de questionnaire. Lorsque vous cliquez sur ce bouton, vous êtes redirigé vers le fichier Respondent.php. Saisissez vos informations dans le formulaire Web et cliquez sur Submit ; recommencez l'opération si vous n'avez pas saisi toutes les informations nécessaires. Lorsque le formulaire est validé, un message de remerciement s'affiche et les informations saisies sont ajoutées à la base de données questionnaire.fp7 comme nouvel enregistrement.
Pour voir comment fonctionne cette application, ouvrez la page Respondent.php dans votre éditeur de texte. Notez que le fichier dbaccess.php est inclus vers le début. Comme nous l'avons vu dans la leçon 1, cette instruction include garantit une instance de la classe de base de données FileMaker pouvant être utilisée comme variable $fm.
Vous remarquerez l'élément de formulaire cercle d'option Respondent.php appelé « prefix ». Cet élément dérive ses valeurs de la base de données FileMaker Pro questionnaire.fp7 en utilisant sa liste de valeurs du même nom. Cette technique vous permet d'élaborer un élément de formulaire dynamique basé sur une liste de valeurs définie dans la base de données FileMaker. Il n'est donc pas nécessaire de mettre à jour votre code PHP à chaque fois que la liste de valeurs change dans la base de données. Cette technique est implémentée dans les étapes ci-après :
$layout =& $fm->getLayout('Respondent');
$values = $layout->getValueList('prefixes');
foreach($values as $value){
echo '<input type= "radio" name= "prefix" value= "'. $value .'">' . $value . ' ';
}
Remarque : consultez la documentation de FileMaker API for PHP pour une liste des méthodes de l'objet FileMaker_Layout.
Remarque : le formulaire de Respondent.php contient également plusieurs éléments de formulaire masqués. L'un d'eux, appelé « active_questionnaire_id » contient l'ID de questionnaire de home.php. Ce formulaire passe l'ID à handle_form.php où il sera utilisé dans la leçon 4.
Lorsque le formulaire Respondent.php a soumis les données, les valeurs sont passées à la page d'action handle_form.php via la méthode POST. En utilisant votre éditeur de texte, ouvrez le fichier handle_form.php situé dans le dossier Lesson3.
Notez que les données soumises par l'utilisateur sont regroupées dans un tableau et affectées à la variable $respondent_data. Dans ce tableau associatif, la clé de chaque élément est le nom exact de la rubrique FileMaker vers laquelle les données doivent être envoyées. La valeur de chaque élément correspond aux valeurs soumises de l'élément de formulaire HTML dans le tableau $_POST. Le tableau $respondent_data est utilisé par l'objet FileMaker lors de la création de l'enregistrement de la base de données.
Une fois le tableau de données créé, le code PHP effectue quelques vérifications simples. Ces méthodes de validation utilisent le code PHP de façon explicite. Aucune validation n'est effectuée par FileMaker Server au cours de cette opération.
Une fois les données de l'utilisateur validées, un nouvel enregistrement peut être créé en deux étapes simples :
$newRequest =& $fm->newAddCommand('Respondent', $respondent_data);
$result = $newRequest->execute();
Lors de la création du nouvel objet FileMaker_Command_Add, n'oubliez pas de spécifier le nom du modèle. Le nom du modèle détermine l'occurrence de table à utiliser (contexte) et les rubriques à renvoyer (résultats). Les rubriques utilisées pour saisir les données doivent se trouver sur le modèle.
Dans la leçon 4, la page handle_form.php sera agrandie afin d'utiliser l'enregistrement ajouté et d'afficher la première question.
La leçon 4 aborde le code nécessaire à la récupération d'un enregistrement FileMaker par ID et à la récupération des enregistrements liés dans une table externe. Les tables externes sont des contrôles puissants utilisés dans les solutions FileMaker Pro. L'API FileMaker pour PHP comporte des méthodes spécifiques conçues pour une utilisation avec les données de tables externes. Cette leçon présente certains aspects de cette fonctionnalité.
Ouvrez la base de données FileMaker Pro questionnaire.fp7 hébergée sur FileMaker Server. Cliquez sur le bouton Modifier le questionnaire et assurez-vous que le questionnaire actif comporte au moins un enregistrement dans la table externe Question. Ouvrez ensuite le fichier home.php de la Lesson4 dans votre navigateur Web. Cliquez sur le bouton Continue et saisissez les informations de la personne interrogée.
La première question du questionnaire actif s'affiche alors. Ouvrez à nouveau la base de données FileMaker Pro questionnaire.fp7. Localisez la première question du questionnaire actif. Essayez de changer le type de la première question. Cliquez sur le bouton Modifier réponses et ajoutez les réponses possibles. Rafraîchissez votre navigateur Web pour afficher la question mise à jour.
Cette leçon vous présente les deux nouvelles tâches suivantes : obtenir un enregistrement par son ID et récupérer un jeu d'enregistrements liés dans une table externe.
Avec votre éditeur de texte, ouvrez le fichier handle_form.php situé dans le dossier Lesson4. Faites défiler la page jusqu'à un tiers, à l'endroit où le fichier handle_form.php s'est terminé à la leçon 3. Notez que cette leçon ajoute du code nécessitant l'objet d'enregistrement de la nouvelle personne interrogée. Cette requête est nécessaire car la rubrique Respondent ID est définie avec l'option Auto Enter Serial Number de FileMaker Pro et que vous devez récupérer le nombre Entrée automatique.
Tout comme avec les fonctions Rechercher de la leçon 1, il est possible de récupérer un nouvel enregistrement en utilisant les méthodes getRecord() et getField().
$records = $result->getRecords();
$record = $records[0];
$respondent_recid = $record->getField('Respondent ID');
La tâche suivante consiste à récupérer le nom du questionnaire actif. Pour cela, utilisez la méthode getRecordById() de l'instance FileMaker ($fm).
Lors de l'utilisation de getRecordById(), passez l'ID d'enregistrement FileMaker et le nom du modèle. Le modèle détermine l'occurrence de table à utiliser (contexte) à utiliser et les valeurs de rubriques à renvoyer (résultats). Le code de cette page passe l'active_questionnaire_id du tableau $_POST à cette page à partir du formulaire de la personne interrogée de Respondent.php.
$active_questionnaire_id = $_POST['active_questionnaire_id'];
$active_questionnaire = $fm->getRecordById('questionnaire',$active_questionnaire_id);
$questionnaire_name = $active_questionnaire->getField('Questionnaire Name');
Remarque : chaque objet d'enregistrement d'une opération d'API contient l'ID d'enregistrement FileMaker internet pouvant être récupéré avec la méthode getRecordId().
La tâche suivante consiste à récupérer les enregistrements de questionnaire et à afficher la première question. Recherchez toutes les questions correspondant à l'ID du questionnaire actif. Cette recherche est effectuée à partir du modèle Questions.
$findCommand =& $fm->newFindCommand('Questions');
$findCommand->addFindCriterion('Questionnaire ID', $active_questionnaire_id);
$result = $findCommand->execute();
$records = $result->getRecords();
$question = $records[0];
La base de données du questionnaire a été conçue de façon à ce que chaque question ait un type différent (par exemple text, radio et checkbox). Si le type est celui d'une réponse à choix multiples, chaque question peut avoir plusieurs choix de réponses. Le modèle Questions contient une table externe affichant les réponses possibles. Si une question dispose d'une ou de plusieurs réponses, le code ci-après affiche les choix de réponses à l'aide du « type » spécifié.
Pour expliquer ce code, supposons que la question est de type radio. Faites défiler le document handle_form.php jusqu'à la condition else if qui permet de vérifier les types de questions radio ou ranking.
else if ($question_type =="radio" || $question_type =="ranking")
Si la condition est vraie, le code ci-après récupère les choix de questions correspondants et les affiche comme éléments de formulaire cercles d'options. Les enregistrements de réponses de la table externe peuvent être récupérés à l'aide de la méthode getRelatedSet() de l'objet FileMaker_Record.
Lors de l'appel de la méthode getRelatedSet(), le nom de la table liée doit être passé entre parenthèses et la table externe définie avec cette relation doit se trouver sur le modèle utilisé lors de la récupération de l'enregistrement $question.
$relatedSet = $question->getRelatedSet('question_answers');
La variable $relatedSet contient désormais un tableau d'objets d'enregistrements de la table externe liée. Faites une boucle dans le tableau et sortez les valeurs de rubrique de chaque enregistrement trouvé.
foreach ($relatedSet as $relatedRow)
{
$possible_answer = $relatedRow->getField('question_answers::answer');
echo '<input type= "radio" name= "radio_answer" value= "'. $possible_answer .'">' . $possible_answer . '<br/>';
}
Vous auriez pu récupérer les enregistrements liés en effectuant une recherche, mais il est beaucoup plus facile d'utiliser la méthode getRelatedSet() avec une table externe contenant déjà le jeu d'enregistrements liés.
La leçon 5 aborde le code nécessaire à l'ajout d'enregistrements liés. Si une table externe est définie sur un modèle permettant la création d'enregistrements liés, vous pouvez utiliser l'API FileMaker pour PHP pour ajouter des enregistrements liés à partir du Web.
Ouvrez votre navigateur Web à la page home.php hébergée dans le répertoire Lesson5. Cliquez sur le bouton Continue et remplissez le questionnaire en ligne. Ouvrez la base de données FileMaker questionnaire.fp7 hébergée sur FileMaker Server. Dans le questionnaire actif, sélectionnez le bouton Review Responses et atteignez le dernier enregistrement de la table. Cet enregistrement contient les informations que vous avez saisies sur la personne interrogée. Chaque réponse est consignée comme enregistrement dans la table externe Responses.
Il est possible d'ajouter des rangées supplémentaires à la table externe avec l'API FileMaker pour PHP en quatre étapes :
Avec votre éditeur de texte, ouvrez le fichier handle_form.php situé dans le dossier Lesson5 du didacticiel. Faites défiler la page et recherchez le code permettant de récupérer l'enregistrement de la personne interrogée :
$respondent_rec = getRespondentRecordFromRespondentID($respondent_recid);
Ce code utilise une fonction qui a été ajoutée au fichier dbaccess.php. Si vous ouvrez le fichier dbaccess.php dans votre éditeur de texte, vous verrez la définition de cette fonction vers la fin du fichier. Dans la définition de la fonction, notez que la méthode newFindCommand() utilise le modèle Respondent comme contexte.
$find = $fm->newFindCommand('Respondent');
Cette fonction affecte l'objet d'enregistrement de la personne interrogée à la variable $respondent_rec. La variable est référencée au modèle Respondent car ce dernier était le contexte de la commande de recherche. En conséquence, toute méthode utilisée par la variable $respondent_rec démarre du contexte du modèle Respondent.
De retour au fichier handle_form.php, la ligne de code suivante commence par créer le nouvel enregistrement lié.
$new_response = $respondent_rec->newRelatedRecord('Responses');
Lors de l'exécution de cette ligne, il est affecté à la variable $new_response un objet d'enregistrement vierge (un nouvel enregistrement n'a pas encore été créé dans la base de données FileMaker).
Il est important de comprendre le contexte de cette opération. Ce code commence à partir du modèle de l'objet d'enregistrement d'appel (Responses) et spécifie la relation d'une table externe sur ce modèle. Le code passe ensuite le nom de la table liée à la méthode newRelatedRecord().
Une fois le nouvel enregistrement vierge créé et que vous savez à quel contexte de table externe il appartient, vous pouvez commencer à saisir des données grâce à la méthode setField(). Cette méthode prend deux paramètres : field name et field value. Cet enregistrement étant lié, le nom de la rubrique doit être exprimé avec le nom de la relation et le nom de la rubrique séparés par deux fois deux points.
$new_response->setField('Responses::Question ID', $cur_question);
$new_response->setField('Responses::Response', $translatedAnswer);
Après avoir créé le nouvel enregistrement lié et ajouté les données aux rubriques appropriées, vous êtes prêt à valider l'entrée.
Remarque : il n'est pas nécessaire de définir les données de rubrique avant de valider un nouvel enregistrement vierge.
Aucun nouvel objet d'enregistrement ne sera créé dans la base de données FileMaker tant qu'il n'aura pas été validé. La méthode commit() insère l'objet FileMaker_Record dans la base de données FileMaker questionnaire.fp7.
$result = $new_response->commit();
La variable $result est désormais affectée à l'objet FileMaker_Record du nouvel enregistrement et ce dernier a été créé dans la base de données FileMaker. Si une erreur se produit, la variable $result contient un objet FileMaker_Error. Il est judicieux de rechercher les éventuelles erreurs après l'exécution de la méthode commit().
La leçon 6 aborde le code nécessaire à l'affichage des rubriques liées d'une table externe. Elle présente également des instructions de base pour l'utilisation des feuilles de style en cascade (CSS) pour modifier l'apparence de votre application Web.
Ouvrez votre navigateur Web à la page home.php hébergée dans le répertoire Lesson6. Remarquez le nouvel aspect du site. Cette mise en forme provient d'une page CSS séparée. Les styles CSS, qui peuvent être utilisés pour formater le code HTML de votre application Web, sont présentés à la fin de cette leçon.
Cliquez sur le bouton Continue et remplissez le questionnaire en ligne. Notez que la page thankyou.php affiche un récapitulatif des questions auxquelles vous avez répondu. Ces questions et réponses proviennent d'une table externe du modèle Respondent dans la base de données questionnaire.fp7. Si un modèle FileMaker contient des données d'une table externe, il peut être affiché sur le Web à l'aide de FileMaker API for PHP.
En utilisant votre éditeur de texte, ouvrez la page thankyou.php située dans le répertoire Lesson6. Faites défiler le fichier jusqu'à la fin et localisez le dernier tableau HTML.
Remarquez le code au-dessus du tableau, qui permet de récupérer l'enregistrement de la personne interrogée.
$respondent_record = getRespondentRecordFromRespondentID($respondent_recid);
La fonction getRespondentRecordFromRespondentID() est définie à la page dbaccess.php. Elle a pour contexte le modèle Respondent de la base de données questionnaire.fp7.
Dans le tableau HTML, notez que la variable $respondent_record est utilisée pour récupérer le jeu d'enregistrements liés. Cette opération est effectuée à l'aide de la méthode getRelatedSet(). Pour utiliser la méthode getRelatedSet(), vous devez préciser le nom de table liée de la table externe souhaitée, tandis que cette dernière doit être sur le modèle Respondent.
$response_related_set = $respondent_record->getRelatedSet('Responses');
Le code ci-dessus permet d'affecter un tableau contenant les enregistrements de la table externe Responses à la variable $response_related_set. Chaque réponse est un objet FileMaker_Record. Ce code utilise la méthode getField() de l'objet FileMaker_Record pour sortir les rangées de la table externe dans un tableau HTML. N'oubliez pas d'utiliser le nom complet de la table liée et le nom de la rubrique séparés par deux fois deux points lors de la sortie des rubriques liées.
Voici la boucle permettant d'afficher le jeu d'enregistrements liés en HTML :
foreach ($response_related_set as $response_related_row)
{
$question = $response_related_row->getField('Questions 2::question');
$answer = $response_related_row->getField('Responses::Response');
//convertit les retours à la ligne de la réponse en virgules
$answer = str_replace("\n",", ",$answer);
echo '<tr><td>' . $question . '</td>';
echo '<td>' . $answer . '</td></tr>';
}
Vous pouvez mettre en forme vos applications Web à l'aide des feuilles de style en cascade (CSS). Dans votre éditeur de texte, ouvrez le fichier style.css situé dans le dossier Lesson6 et examinez les styles définis pour certaines des balises HTML. Il est possible d'appliquer des styles CSS à n'importe quelle balise HTML, ce qui vous permet de mettre en forme plusieurs éléments de plusieurs pages grâce à une seule définition.
Pour appliquer une mise en forme à une balise HTML spécifique, vous devez déclarer le nom de la balise. Après le nom de la balise, vous devez indiquer les attributs de style dans des accolades. Comme en PHP, chaque instruction doit se terminer par un point-virgule.
body {
background-color: #333333;
padding: 20px;
color: #ffffff;
font-family:Verdana, Arial, Helvetica, sans-serif;
}
Une fois le fichier CSS créé, vous pouvez l'appliquer à n'importe quel document HTML ou PHP. Pour appliquer des styles externes, vous devez inclure ou lier la feuille de style à votre document : pour cela, utilisez la balise de lien <link> dans l'en-tête de votre document HTML de sortie.
Avec votre éditeur de texte, ouvrez le fichier thankyou.php situé dans le dossier Lesson6. Dans les balises de l'en-tête, remarquez la balise <link> (lien) qui indique au navigateur Web d'utiliser la mise en forme style.css. Lorsque vous utilisez la balise <link>, assurez-vous de fournir le bon chemin d'accès ou href à votre page CSS.
<link rel="stylesheet" type="text/css" href="style.css" />
Les feuilles de style peuvent être utilisées dans de nombreuses applications et chacune de ces dernières peut utiliser plusieurs feuilles de style. Pour plus d'informations sur les styles CSS et leurs attributs, consultez les références CSS2 sur W3Schools.