par
béka » 04 juil. 2007, 17:30
ha oui zut, c'est pas mis à jour les fichiers.
Voilà ce que j'ai maintenant.
page search-engine.php :
<?php
session_name('SEEC');
session_start(session_name());
include('php-includes/common.php');?>
<?
include('html_head.php');
include('header.php');
?>
<script>
function AfficheResult() {
var critInputs = document.criteria.elements;
var myInput;
for ( var i = 0 ; i < critInputs.length ; i++ ) {
myInput = critInputs[i];
if ( myInput.type == 'checkbox' && myInput.checked ) {
var explode = myInput.value.split('/');
var id_cat = explode[0];
var id_crit = explode[1];
getByAjax('result-request.php', document.getElementById('ajax'), 'cat='+id_cat+'&crit='+id_crit);
creerDiv('div_1', '$msg', 'apres', document.getElementById('ajax'));
}
}
}
function creerDiv(id_donne, contenu_donne, avant_ou_apres, emplacement_donne){
// crée un nouveau div
var div = document.createElement("div");
// fixer l'id
div.setAttribute("id", id_donne);
// placer son contenu
var contenu = document.createTextNode(contenu_donne);
div.appendChild(contenu);
// insère le div avant_ou_après l'emplacement donné
if (avant_ou_apres == 'avant') emplacement_donne.parentNode.insertBefore(div, emplacement_donne);
else emplacement_donne.parentNode.insertBefore(div, emplacement_donne.nextSibling);
}
</script>
<div id="content">
<?
echo "<br /><br />Choose the different criteria which correspond to your request : ";
/*---------------------------------*/
//on ouvre le fichier criteria.xml
$criteriaFile = $cfg['ressources_root'].'criteria.xml';
$domCriteria = new DOMDocument('1.0','UTF-8');
$domCriteria->load($criteriaFile);
$xpCriteria = new DOMXPath($domCriteria);
$cat_criteria = $domCriteria->getElementsByTagName('cat');
$result_find_criteria = $domCriteria->getElementsByTagName('criteria');?>
<form name="criteria">
<?
echo "<table align='center'><tr>";
foreach($cat_criteria as $cat){
$name_cat = $cat->getAttribute('name');
$id_cat = $cat->getAttribute('id');
echo "<td valign='top'><br /><strong>".$name_cat." : </strong>";
foreach ($cat->childNodes as $criteria)
{
if ($criteria->nodeType != XML_ELEMENT_NODE) continue;
if ($criteria->tagName == 'criteria')
{
$name_criteria = $criteria->getAttribute('name');
$id_criteria = $criteria->getAttribute('id');
echo "<ul><input type='checkbox' id='crit' name='crit[]' value='$id_cat/$id_criteria'>$name_criteria</input></ul>";
}
}
}
echo "</tr></table>";
?>
</form>
<div align="center"><button onClick="AfficheResult();">Search</button></div>
<div id="ajax"></div>
<?
include('html_foot.php');
?>
page result-request.php :
<?php
session_name('SEEC');
session_start(session_name());
include('php-includes/common.php');
/*-----------------------------------------------------*/
//on affiche le résultat en fonction d'un seul critère //
/*-----------------------------------------------------*/
$link_file = $cfg['ressources_root'].'/matrix/criteria-practice.xml';
$xml = simplexml_load_file($link_file);//on ouvre le fichier xml
//on vérifie l'existence des varaibles passées par le formulaire si elle n'existe pas, on lui affecte une valeur vide
if (!isset($_POST['crit'])) { $_POST['crit'] = ''; }
if (!isset($_POST['cat'])) { $_POST['cat'] = ''; }
//si les variables ne sont pas vides
if ( ($_POST['crit'] != '') && ($_POST['cat'] != ''))
{
foreach($xml->link as $value)
{
if( $value->criteria[0]['idcrit'] == $_POST['crit'] and $value->criteria[0]['idcat'] == $_POST['cat'])
{
$practice[]=( (int)$value->practice[0]['id'] );
if (isset($practice[0]))
{
$id_practice = $practice[0];
}
else $id_practice = '';
}
}
if ( (isset($id_practice)) and ($id_practice != '') ) // si $id_practice n'est pas vide
{
//on ouvre le document xml qui correspond à la recherche
$practiceFile = $cfg['ressources_root'].'content/practice/'.$id_practice.'.xml';
$domPractice = new DOMDocument('1.0','UTF-8');
$domPractice->load($practiceFile);
$xpPractice = new DOMXPath($domPractice);
$item_practice = $domPractice->getElementsByTagName('item');
foreach ($item_practice as $item)
{
foreach ($item->childNodes as $child)
{
if($child->nodeType != XML_ELEMENT_NODE) continue;
if($child->tagName == 'title')
{
$titre = utf8_decode($child->firstChild->nodeValue);
}
elseif ($child->tagName == 'short_description')
{
$short_description = utf8_decode($child->firstChild->nodeValue);
}
}
}
$msg = "<table width='600'><tr><th>Title of the practice</th><th>Short description</th><th>Viewed</th><th>Used</th></tr>";
$msg .= "<tr><td>$titre</td><td>$short_description</td></tr>";
$msg .= "</table>";
}
else
{
$msg = "<p align='center'>There is no practice which correspond to your request. Please refine your search !</p>";
}
echo "<h3>Result of your search : </h3>";
echo "<p>List of practices which correspond to the different criteria you checked : <br /></p>";
echo $msg;
}
?>
et ma fonction ajax est ici :
/*
* Moteur Ajax
*/
function getXhr(){
var xhr = null;
if(window.XMLHttpRequest) // Firefox et autres
xhr = new XMLHttpRequest();
else if(window.ActiveXObject){ // Internet Explorer
try {
xhr = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
}
else { // XMLHttpRequest non supporté par le navigateur
alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
xhr = false;
}
return xhr;
}
/**
* Méthode qui appelle un script serveur et renvoit sa réponse
*
* serveur: l'url du script serveur appelé
* reponse: objet HTML donné par référence à un conteneur HTML de la page chargée
* paramètres: liste des paramètres éventuellement passés au script serveur (param1=valeur1¶m2=valeur2...)
*/
function getByAjax(serveur, reponse, parametres){
var xhr = getXhr(); //Nouvelle instance Ajax
if (xhr && serveur){
// On défini la fonction observant la communication Ajax/serveur
xhr.onreadystatechange = function(){
// le code 4/200: détermine que Ajax a reçu une réponse du serveur
if(xhr.readyState == 4 && xhr.status == 200){
reponse.innerHTML = reponse.innerHTML + xhr.responseText; //renvoit la réponse du serveur dans le conteneur reponse
}
}
// Déclenchement de l'appel Ajax/serveur (avec passage de paramètres en POST)
xhr.open("POST" ,serveur ,true);
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
xhr.send(parametres);
}
}
/*
* fin du moteur AJAX
*/
Et avec tout ça, je n'arrive pas à faire que les résultat soient dans un tableau, dans des lignes les unes après les autres.
ha oui zut, c'est pas mis à jour les fichiers.
Voilà ce que j'ai maintenant.
page search-engine.php :
[php]<?php
session_name('SEEC');
session_start(session_name());
include('php-includes/common.php');?>
<?
include('html_head.php');
include('header.php');
?>
<script>
function AfficheResult() {
var critInputs = document.criteria.elements;
var myInput;
for ( var i = 0 ; i < critInputs.length ; i++ ) {
myInput = critInputs[i];
if ( myInput.type == 'checkbox' && myInput.checked ) {
var explode = myInput.value.split('/');
var id_cat = explode[0];
var id_crit = explode[1];
getByAjax('result-request.php', document.getElementById('ajax'), 'cat='+id_cat+'&crit='+id_crit);
creerDiv('div_1', '$msg', 'apres', document.getElementById('ajax'));
}
}
}
function creerDiv(id_donne, contenu_donne, avant_ou_apres, emplacement_donne){
// crée un nouveau div
var div = document.createElement("div");
// fixer l'id
div.setAttribute("id", id_donne);
// placer son contenu
var contenu = document.createTextNode(contenu_donne);
div.appendChild(contenu);
// insère le div avant_ou_après l'emplacement donné
if (avant_ou_apres == 'avant') emplacement_donne.parentNode.insertBefore(div, emplacement_donne);
else emplacement_donne.parentNode.insertBefore(div, emplacement_donne.nextSibling);
}
</script>
<div id="content">
<?
echo "<br /><br />Choose the different criteria which correspond to your request : ";
/*---------------------------------*/
//on ouvre le fichier criteria.xml
$criteriaFile = $cfg['ressources_root'].'criteria.xml';
$domCriteria = new DOMDocument('1.0','UTF-8');
$domCriteria->load($criteriaFile);
$xpCriteria = new DOMXPath($domCriteria);
$cat_criteria = $domCriteria->getElementsByTagName('cat');
$result_find_criteria = $domCriteria->getElementsByTagName('criteria');?>
<form name="criteria">
<?
echo "<table align='center'><tr>";
foreach($cat_criteria as $cat){
$name_cat = $cat->getAttribute('name');
$id_cat = $cat->getAttribute('id');
echo "<td valign='top'><br /><strong>".$name_cat." : </strong>";
foreach ($cat->childNodes as $criteria)
{
if ($criteria->nodeType != XML_ELEMENT_NODE) continue;
if ($criteria->tagName == 'criteria')
{
$name_criteria = $criteria->getAttribute('name');
$id_criteria = $criteria->getAttribute('id');
echo "<ul><input type='checkbox' id='crit' name='crit[]' value='$id_cat/$id_criteria'>$name_criteria</input></ul>";
}
}
}
echo "</tr></table>";
?>
</form>
<div align="center"><button onClick="AfficheResult();">Search</button></div>
<div id="ajax"></div>
<?
include('html_foot.php');
?>
[/php]
page result-request.php :
[php]<?php
session_name('SEEC');
session_start(session_name());
include('php-includes/common.php');
/*-----------------------------------------------------*/
//on affiche le résultat en fonction d'un seul critère //
/*-----------------------------------------------------*/
$link_file = $cfg['ressources_root'].'/matrix/criteria-practice.xml';
$xml = simplexml_load_file($link_file);//on ouvre le fichier xml
//on vérifie l'existence des varaibles passées par le formulaire si elle n'existe pas, on lui affecte une valeur vide
if (!isset($_POST['crit'])) { $_POST['crit'] = ''; }
if (!isset($_POST['cat'])) { $_POST['cat'] = ''; }
//si les variables ne sont pas vides
if ( ($_POST['crit'] != '') && ($_POST['cat'] != ''))
{
foreach($xml->link as $value)
{
if( $value->criteria[0]['idcrit'] == $_POST['crit'] and $value->criteria[0]['idcat'] == $_POST['cat'])
{
$practice[]=( (int)$value->practice[0]['id'] );
if (isset($practice[0]))
{
$id_practice = $practice[0];
}
else $id_practice = '';
}
}
if ( (isset($id_practice)) and ($id_practice != '') ) // si $id_practice n'est pas vide
{
//on ouvre le document xml qui correspond à la recherche
$practiceFile = $cfg['ressources_root'].'content/practice/'.$id_practice.'.xml';
$domPractice = new DOMDocument('1.0','UTF-8');
$domPractice->load($practiceFile);
$xpPractice = new DOMXPath($domPractice);
$item_practice = $domPractice->getElementsByTagName('item');
foreach ($item_practice as $item)
{
foreach ($item->childNodes as $child)
{
if($child->nodeType != XML_ELEMENT_NODE) continue;
if($child->tagName == 'title')
{
$titre = utf8_decode($child->firstChild->nodeValue);
}
elseif ($child->tagName == 'short_description')
{
$short_description = utf8_decode($child->firstChild->nodeValue);
}
}
}
$msg = "<table width='600'><tr><th>Title of the practice</th><th>Short description</th><th>Viewed</th><th>Used</th></tr>";
$msg .= "<tr><td>$titre</td><td>$short_description</td></tr>";
$msg .= "</table>";
}
else
{
$msg = "<p align='center'>There is no practice which correspond to your request. Please refine your search !</p>";
}
echo "<h3>Result of your search : </h3>";
echo "<p>List of practices which correspond to the different criteria you checked : <br /></p>";
echo $msg;
}
?>
[/php]
et ma fonction ajax est ici :
[quote]/*
* Moteur Ajax
*/
function getXhr(){
var xhr = null;
if(window.XMLHttpRequest) // Firefox et autres
xhr = new XMLHttpRequest();
else if(window.ActiveXObject){ // Internet Explorer
try {
xhr = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
}
else { // XMLHttpRequest non supporté par le navigateur
alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
xhr = false;
}
return xhr;
}
/**
* Méthode qui appelle un script serveur et renvoit sa réponse
*
* serveur: l'url du script serveur appelé
* reponse: objet HTML donné par référence à un conteneur HTML de la page chargée
* paramètres: liste des paramètres éventuellement passés au script serveur (param1=valeur1¶m2=valeur2...)
*/
function getByAjax(serveur, reponse, parametres){
var xhr = getXhr(); //Nouvelle instance Ajax
if (xhr && serveur){
// On défini la fonction observant la communication Ajax/serveur
xhr.onreadystatechange = function(){
// le code 4/200: détermine que Ajax a reçu une réponse du serveur
if(xhr.readyState == 4 && xhr.status == 200){
reponse.innerHTML = reponse.innerHTML + xhr.responseText; //renvoit la réponse du serveur dans le conteneur reponse
}
}
// Déclenchement de l'appel Ajax/serveur (avec passage de paramètres en POST)
xhr.open("POST" ,serveur ,true);
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
xhr.send(parametres);
}
}
/*
* fin du moteur AJAX
*/[/quote]
Et avec tout ça, je n'arrive pas à faire que les résultat soient dans un tableau, dans des lignes les unes après les autres.