J'ai un service Web externe, auquel on peut accéder à l'aide d'un appel HTTP (avec des paramètres passés comme chaîne de requête), et qui renvoie le résultat au format XML.
Je souhaite utiliser Drupal pour accéder à ce service Web (avec les paramètres souhaités) et afficher le résultat à l'aide de Views.
Il s'agit d'un exemple de requête et du résultat obtenu à partir du service Web que j'utilise.
Requête: http: //localhost/query.php? Cy = in & q = abcd & cat = 22
Résultat:
<?xml version="1.0"?>
<results>
<Jobs>
<Job ID="111">
<Title>Test one</Title>
<Summary>Test one summary</Summary>
<DateUpdated Date="2011-04-04 18:03:00">4/4/2011</DateUpdated>
<Location>
<Country>India</Country>
<City>Delhi</City>
</Location>
<CompanyName>Test Company</CompanyName>
</Job>
<Job ID="222">
<Title>Test two</Title>
<Summary>Test two summary</Summary>
<DateUpdated Date="2011-04-04 18:03:00">4/4/2011</DateUpdated>
<Location>
<Country>India</Country>
<City>Chennai</City>
</Location>
<CompanyName>Test company</CompanyName>
</Job>
</Jobs>
</results>
Les solutions conseillées sont basées sur la première introduction des données dans la base de données, puis sur leur affichage dans les vues.
Une alternative consiste à interroger le service directement à partir de Views, en utilisant un backend de requête personnalisé. Checkout http://drupal.org/node/95827 pour les liens vers des backends personnalisés que vous pouvez utiliser comme exemple pour écrire le vôtre (ce n'est pas beaucoup de travail)
Le module Feeds peut extraire du contenu et le transformer en nœuds. Feeds XPath Parser vous permettra d'analyser le fichier xml et de mapper les balises aux champs. Vous pouvez ensuite utiliser des vues pour afficher le contenu normalement.
Je suis sûr qu'il existe une solution plus élégante, mais je l'ai déjà fait avec des flux Twitter et cela fonctionne très bien. Voici mon point de vue:
La deuxième étape peut être réalisée en créant par programmation les instances de nœud:
$node = new stdClass();
$node->title = 'title';
$node->my_custom_field['und'][0]['value'] = 'my custom value';
// fill all your other fields
node_save($node);
SELECT fdfpi.field_picture_id_value FROM field_data_field_picture_id fdfpi INNER JOIN node n ON fdfpi.entity_id = n.nid AND fdfpi.entity_type = 'node' WHERE n.type = 'picture' ORDER BY n.created DESC LIMIT 1
L'exemple ci-dessus peut sembler un peu déroutant mais ce n'est pas vraiment: j'ai créé un type de contenu "image" qui a un champ personnalisé "image_id". C'est juste un moyen manuel de récupérer l'ID du dernier nœud créé de ce type.
J'espère que cela t'aides!