Fork me on GitHub




(1) 2 »


Fullcalendar - essai de création d'un module
Régulier
Inscrit: 21/08/2006 03:21
Messages: 113
Bonjour,

Je tente de créer un nouveau module sur la base de Fullcalendar.

Actuellement je le fait fonctionner hors environnement xoops.

L'extraction des données de la base mysql se fait avec PDO.
Comme ça :
try {

    
$bdd = new PDO($url$username$password);

    
$requete "SELECT id, title, start, end, allday";
    
$requete.= " FROM agenda";
    
$requete.= " ORDER BY id";
    
$result $bdd->prepare($requete);
    
$result->execute();

    echo 
json_encode($result-> fetchALL(PDO :: FETCH_ASSOC)); // !!!!!!!!!!!!!!!

    
exit();

} catch (
PDOException $e){
    echo 
$e->getMessage();
}


donc c'est pas du tout Xoopssien tout ça !

Maintenant, j'ai donc ça dans mon module :

<?php
include "header.php";

$myts =& MyTextSanitizer::getInstance(); // MyTextSanitizer object
include_once XOOPS_ROOT_PATH."/class/xoopstree.php";
$mytree = new XoopsTree($xoopsDB->prefix("agenda"),"id","title","start","end""allday");

include 
XOOPS_ROOT_PATH."/header.php";


$sql "SELECT id, title, start, end, allday";
$sql.= " FROM ".$xoopsDB->prefix("agenda");
$sql.= " ORDER BY id";


$result=$xoopsDB->query($sql) or exit("Erreur");

$events = array();


$year date('Y'); 
$month date('m');

$i 0;
while (
$evenement $xoopsDB->fetchArray($result))
{

    
$id $evenement["id"];
    
$title $evenement["title"];
    
$start $evenement ["start"];
    
$end $evenement ["end"]; 
    
$allday $evenement ["allday"];
 
    
$e = array(
        
'id' => $id,
        
'title' => $title,            
        
'start' => $start,//["Jour"],//$start,
        
'end' => $end,//["Jour"],
        
'allDay' => $allday
    
);
    
$events[$i] = $e;
    
    
$i++;   
         
}
echo (
json_encode($events)); // !!!!!!!!!!!!!!!!

include XOOPS_ROOT_PATH.'/footer.php';
?>


La différence est entre
echo (json_encode($events));

et
echo json_encode($result-> fetchALL(PDO :: FETCH_ASSOC));


LE PROBLEME c'est que ne pas passer par PDO et donc ne pas utiliser
fetchALL(PDO :: FETCH_ASSOC)

semble ne pas convenir pour l'affichage des données par fullcalendar.

Un problème de format je crois.
$xoopsDB->fetchArray
ne semble pas équivalent !

Mon idée (pas sûr que ce soit bien dans l'environnement Xoops mais je veux au moins le voir fonctionner un peu pour l'instant ! ) est de tester le code qui fonctionne dans mon module (avec PDO donc) mais je dois utiliser
$bdd = new PDO($url$username$password);
pour me connecter !!

Il y a-t-il des variables Xoops à mettre à la place de $url, $username et $password ???

J'ai essayé $xoopsDB pour $url et ça n'a pas l'air de fonctionner.


Merci !

Posté le : 23/12/2014 15:12
Partager Twitter Partagez cette article sur GG+
Re: Fullcalendar - essai de création d'un module
Admin Frxoops
Inscrit: 04/03/2011 09:10
De Lot
Messages: 2837
Je te conseillerai d'utiliser la class xoopsDB pour tes connexions à MySQL (même si elle est dépassée ;) )

Pour ton problème, je pense qu'une petite mise en forme de ton tableau est la solution.

Un petit
var_dump($result-> fetchALL(PDO :: FETCH_ASSOC));

et un
var_dump($events);


te donneront 2 tableaux

suffit de mettre au même format le tableau $events pour que cela fonctionne

Posté le : 24/12/2014 08:29
Partager Twitter Partagez cette article sur GG+
Re: Fullcalendar - essai de création d'un module
Régulier
Inscrit: 21/08/2006 03:21
Messages: 113
Oui Montuy, mon intention est bien d'utiliser in fine la classe xoopsDB.


J'ai appliqué le var-dump dans les deux cas.
Alors j'ai une bonne et une mauvaise nouvelle.

La bonne : Les tableaux sont strictement identiques ! (avec les mêmes valeurs rentrées dans les deux Bdd pour être plus sûr).
La mauvaise : l'affichage des données dans Fullcalendar ne fonctionne pas dans l'environnement xoops.

Résumons.
J'ouvre la page index.php de mon module dont le template doit afficher Fullcalendar en lisant les données de la BDD via une page get-events.php dont l'adresse est transmise dans une propriété events: "http://etc.... " de mon template.

La page get-events.php est bien ouverte et lue (j'ai vérifié en faisant des tests de variables). Mais echo dans cette page ne renvoie pas le tableau pourtant correctement mis en forme.
Et Fullcalendar ne se charge pas avec les données de la BDD alors que ça fonctionne hors environnement xoops.

Grat, grat, grat...

Je suis parti pour vérifier mon code à la loupe.

Posté le : 24/12/2014 13:50
Partager Twitter Partagez cette article sur GG+
Re: Fullcalendar - essai de création d'un module
Régulier
Inscrit: 21/08/2006 03:21
Messages: 113
Damned !!

Je ne sais pas ce qui m'a pris, j'ai ajouté exit à la fin de mon code comme ça :

echo (json_encode($events)); 

exit();

include 
XOOPS_ROOT_PATH.'/footer.php';


et ça fonctionne !!
C'est le miracle de Noël !

: )

En réalité c'est le footer.php qui met la pagaille.
Je le supprime et ça fonctionne.

Je sens que je vais mieux digérer ma dinde ce soir.

Posté le : 24/12/2014 14:11
Partager Twitter Partagez cette article sur GG+
Re: Fullcalendar - essai de création d'un module
Admin Frxoops
Inscrit: 04/03/2011 09:10
De Lot
Messages: 2837
Pour information, c'est footer.php qui à le rôle d'afficher tout ce qui s'est passé pendant l'exécution (sauf si tu utilise echo). Et oui, une fois intégré dans Xoops, il faudrait l'intégrer à Smarty pour une intégration totale et dans les règles de l'art.


Posté le : 24/12/2014 15:01
Partager Twitter Partagez cette article sur GG+
Re: Fullcalendar - essai de création d'un module
Régulier
Inscrit: 21/08/2006 03:21
Messages: 113
Je continue avec mes questions. Je pense que les problèmes que je rencontre et les réponses apportées dans ce forum pourront être utiles à toute personne qui comme moi se lance dans la création d'un premier module (sans vraiment être un as en programmation).

Après la lecture des données, ce qui suit concerne l'écriture dans la BDD.

Pour ajouter un évènement de l'agenda, dans un premier temps, ça ne fonctionnait pas. Je pensais que c'était un problème de syntaxe. J'ai donc récupéré ma variable $sql
$sql 'INSERT INTO '.$xoopsDB->prefix('agenda');
$sql.=  ' (id,title,start,end,allday) '
$sql.= " VALUES (NULL,$title,$start,$end,$allday)";
echo 
$sql;

et je l'ai testée dans phpMyAdmin. En constatant que ça fonctionnait j'ai décidé de forcer l'écriture avec queryF :

$result=$xoopsDB->queryF($sql) or exit("Erreur");


Donc ça écrit dans la BDD, mais uniquement si je fourni en dur dans le code la valeur des variables :
$title $xoopsDB->quoteString("toto");
etc...

En fonctionnement normal les valeurs doivent être fournies par prompt (js dans le template) :

$.ajax({
 
type"POST",
 
url'http://localhost/modules/fullcalendar/add_events.php',
 
data'title='title+'&start='start +'&end='end ,
 
success: function(json) {
 
alert('OK');
 }
 });


Mon problème c'est que j'utilise la méthode post pour récupérer dans mon fichier add_events.php mes valeurs pour $title, $start etc
if (isset($_POST['title'])) {
    
$title $_POST['title'];
}

et que là ça ne fonctionne pas. Toutes les valeurs sont vides !!

Why ?
Merci

Posté le : 26/12/2014 19:13
Partager Twitter Partagez cette article sur GG+
Re: Fullcalendar - essai de création d'un module
Régulier
Inscrit: 21/08/2006 03:21
Messages: 113
Pour supprimer un éléments de la BDD ça fonctionne !

if (isset($_POST['id'])) {
    
$id $_POST['id'];
}

$sql "DELETE from " .$xoopsDB->prefix('agenda'); 
$sql .= " WHERE id = $id";

$result=$xoopsDB->queryF($sql) or exit("Erreur");


Pourquoi ?????
Pourquoi la méthode POST fonctionne là et pas ailleurs ?

J'ai essayé de passer un seul élément pour update (les autres écrits en dur dans mon code php) et ça ne fonctionne toujours pas.

Suis perplexe. :/

Posté le : 27/12/2014 09:21
Partager Twitter Partagez cette article sur GG+
Re: Fullcalendar - essai de création d'un module
Régulier
Inscrit: 21/08/2006 03:21
Messages: 113
Mais pourquoi je m'embête autant avec ajax ??? Uniquement pour transmettre des données type string à une page php.

Ça fonctionne hors environnement Xoops mais là franchement je me prends la tête.

Qu'est-ce que je peux donc utiliser à la place pour transmettre des variables de mon template à une page php ??

Les valeurs sont récupérées dans mon template (et affichées par Fullcalendar), je veux juste les filer à mon php pour enregistrement dans la BDD.
Misère...


Posté le : 27/12/2014 10:29
Partager Twitter Partagez cette article sur GG+
Re: Fullcalendar - essai de création d'un module
Admin Frxoops
Inscrit: 04/03/2011 09:10
De Lot
Messages: 2837
sans la structure de ta table, je ne peux pas te répondre pourquoi l'insertion ne fonctionne pas quand tu utilises les variables.
Mais vu comme, c'est écrit, je suis sûr que cela vient d'un problème de conformité de variables. Tu ne peux envoyer une données de type string dans un champs de type numérique, et vice-et-versa. Pour envoyer un champs string on mais 'string' et pas string. En résumé, il suffit qu'une de tes variables n'a pas le bon type par rapport au type de champs correspondant, cela ne fonctionnera pas.

Ajax est utilisé pour une exploitation en direct. Par exemple dès que tu quitte un champs de ton formulaire (vu que tu as des champs $_POST, il doit y en avoir un quelque part), il fait les modification directement. Ou quand par exemple, tu sais que l'exécution de ta page PHP sera longue (par exemple, une recherche sur très grosse BDD)

Sinon pour envoyer d'une page à l'autre, il y a la technique du formulaire avec $_POST, les $_SESSION, tu peux envoyer quasiment de tout même des tableaux, ensuite Ajax

Posté le : 27/12/2014 10:49
Partager Twitter Partagez cette article sur GG+
Re: Fullcalendar - essai de création d'un module
Régulier
Inscrit: 21/08/2006 03:21
Messages: 113
Merci Montuy.

Je vais essayer la méthode formulaire parce que là je ne comprends pas ce qui se passe avec Ajax et l'envoi de variables par POST.

Citation :

Mais vu comme, c'est écrit, je suis sûr que cela vient d'un problème de conformité de variables. Tu ne peux envoyer une données de type string dans un champs de type numérique, et vice-et-versa. Pour envoyer un champs string on mais 'string' et pas string. En résumé, il suffit qu'une de tes variables n'a pas le bon type par rapport au type de champs correspondant, cela ne fonctionnera pas.


Pour ce qui concerne le type de données il faudrait que Ajax transforme le type des variables avant de les envoyer au php car les variables de départ sont de type string et elle sont attendues en type string également.

Je n'ai pas de souci avec l'enregistrement dans la BDD. Exemple, quand je fais le test en dur :

// ----------------TEST -------------------------
$title $xoopsDB->quoteString("TOTO"); 
$start $xoopsDB->quoteString("2014-12-03 00:00:00"); 
$id $xoopsDB->quoteString("11");
$allday $xoopsDB->quoteString("1");
$end $xoopsDB->quoteString("2014-12-09 00:00:00"); 
// ----------------------------------------------


$sql "UPDATE ".$xoopsDB->prefix('agenda');
$sql.= " SET title = $title, start = $start, end = $end " 
$sql.= " WHERE id = $id";

$result=$xoopsDB->queryF($sql) or exit("Erreur");


et que j'exécute la page php seule, l'enregistrement s'effectue correctement.

Posté le : 27/12/2014 11:59
Partager Twitter Partagez cette article sur GG+

 Haut   Précédent   Suivant
(1) 2 »



Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

Propulsé avec XOOPS | Graphisme adapté par Tatane, Grosdunord, Montuy337513

37 Personne(s) en ligne (29 Personne(s) connectée(s) sur Forum) | Utilisateur(s): 0 | Invité(s): 37 | Plus ...