7
votes

Dynamic ical créé à partir de la base de données ne fonctionne pas

J'ai construit un site dans PHP 5 et MySQL avec une table qui garde une trace des pousses de photos planifiées. Je veux pousser un flux de ces "événements" programmés dans un fichier ical.

i à l'origine a posé cette question et obtenu une bonne réponse de s. Gehrig . J'ai eu un exemple de fichier ical fonctionnant et mettez à jour régulièrement dans Google Calendar chaque fois que je ajuste manuellement le fichier dans Dreamweaver. Cependant, maintenant que j'ai ajouté Dynamic PHP tirant de la base de données, cela ne fonctionnera pas. P>

Voici le PHP: P>

BEGIN:VCALENDAR 
VERSION:2.0 
PRODID:-//hacksw/handcal//NONSGML v1.0//EN 
BEGIN:VEVENT 
UID:21@homewoodphoto.jhu.edu 
DTSTAMP:20090929T212141Z 
DTSTART:20091001T230000Z 
DTEND:20091001T230000Z 
SUMMARY:little title 
END:VEVENT 
BEGIN:VEVENT 
UID:22@homewoodphoto.jhu.edu 
DTSTAMP:20090929T212141Z 
DTSTART:20090926T230000Z 
DTEND:20090927T010000Z 
SUMMARY:A big photo shoot 
END:VEVENT 
BEGIN:VEVENT 
UID:23@homewoodphoto.jhu.edu 
DTSTAMP:20090929T212141Z 
DTSTART:20091003T230000Z 
DTEND:20091004T010000Z 
SUMMARY:A big photo shoot 
END:VEVENT 
END:VCALENDAR


2 commentaires

Dans Google Calendar, je reçois une erreur avec un titre d'erreur "Paramètres" et texte: "Nous ne pouvions pas analyser le calendrier à l'URL demandée."


Entourage ne l'ouvre pas du tout, et ICAL dit: "Ce fichier de calendrier est illisible. Aucun événement n'a été ajouté à votre calendrier ICAL."


3 Réponses :


2
votes

Guess initial serait votre tableau n'est pas renseigné correctement. Donc, pour le tester, je commencerais à supprimer xxx pré>

et modification $ Slots = Slot :: Find_All (); à p> xxx pré>

pour vous assurer que votre réseau d'objet est en cours de réglage. p>

puis exécutez-le à partir de la ligne de commande ou du navigateur pour vous assurer que cela est prévu. avant de soumettre à Google. p>

Essayez le code suivant pour éviter l'espace blanc: P>

<?php
require_once('../../_includes/initialize.php');

$ical = "BEGIN:VCALENDAR\nVERSION:2.0\nPRODID:-//hacksw/handcal//NONSGML v1.0//EN";

$slots = Slot::find_all();
foreach($slots as $slot) {
    $job = Job::find_by_id($slot->job_id);

    $start_stamp = strtotime($slot->start);
    $end_stamp = strtotime($slot->endtime);
    $dtstart = gmdate('Ymd', $start_stamp).'T'. gmdate('His', $start_stamp) . "Z"; // converts to UTC time
    $dtend = gmdate('Ymd', $end_stamp).'T'. gmdate('His', $end_stamp) . "Z"; // converts to UTC time

    $summary = $job->title;

    $ical .= "BEGIN:VEVENT\n";
    $ical .= "UID:" . $slot->id . "@homewoodphoto.jhu.edu\n";
    $ical .= "DTSTAMP:" . gmdate('Ymd').'T'. gmdate('His') . "Z\n";
    $ical .= "DTSTART:" . $dtstart . "\n";
    $ical .= "DTEND:" . $dtend . "\n";
    $ical .= "SUMMARY:" . $summary . "\n";
    $ical .= "END:VEVENT\n";
}

$ical .= "\nEND:VCALENDAR";

//set correct content-type-header
header('Content-type: text/calendar; charset=utf-8');
header('Content-Disposition: inline; filename=homewoodphoto_master.ics');
echo $ical;
exit;

?>


5 commentaires

Mohammad, merci. En fait, j'ai enlevé les en-têtes et je viens de le faire écho à echo $ ical pour voir ce qui était en cours de production. C'était exactement la même chose que le test codé dur, juste avec différentes dates et résumés. ??


D'accord, il semble étrange, alors j'ai commencé à tester votre sortie avec un validateur ICS: Severinghaus.org/projects/icv < / a> et semble être un espace blanc à la fin de chaque noeud le causant! (Dans votre boucle, pour formater des raisons pour lesquelles vous avez indenté votre code qui dans des chaînes ouvertes, il crée un espace blanc) UID: ". $ $ Slot-> id." @ homewoodphoto.jhu.edu dtpritam: ". Gmdate ('YMD') . N'T '. Gmdate ("Son')." Z DTSTART: ". $ DTSTART." DTEND: ". $ DTEND." SOMMAIRE: ". $ SOMMAIRE"; Je vais mettre à jour la réponse originale avec le code correct.


Mohammad, quand j'ai vu votre réponse, quelque chose a cliqué et j'étais sûr que vous alliez avoir raison. Mais ça n'a pas fonctionné. J'ai donc supprimé vos chevreakes \ N et des lignes manuelles, sans l'indent et d'une manière ou d'une autre, cela semble fonctionner! Je posterai le code dans la réponse. Merci.


En fait, je vais juste répondre à la question pour que cela soit répertorié comme répondu.


Cool :) La question était que je savais que c'était le problème de l'espace mais que je ne pouvais pas le tester sans repos de votre base de données et de votre code, alors je suis inscrit à l'aide de \ n pour y remédier. Mais je suis content que vous ayez pu travailler maintenant.



1
votes

Grâce à l'aide de Mohammad, nous avons déduit que c'était le code indenté ajoutant des espaces avec le fichier ICS qui causait les erreurs. La suggestion de M d'utiliser \ N Linebreaks n'a pas fonctionné, mais frapper manuellement dans l'entrée pour créer des chevreaks, mais sans indenter la ligne suivante, semble l'avoir fait. Voici le code qui fonctionne:

<?php
require_once('../../_includes/initialize.php');

$ical = "BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//hacksw/handcal//NONSGML v1.0//EN
";

$slots = Slot::find_all();
foreach($slots as $slot) {
$job = Job::find_by_id($slot->job_id);

$start_stamp = strtotime($slot->start);
$end_stamp = strtotime($slot->endtime);
$dtstart = gmdate('Ymd', $start_stamp).'T'. gmdate('His', $start_stamp) . "Z"; // converts to UTC time
$dtend = gmdate('Ymd', $end_stamp).'T'. gmdate('His', $end_stamp) . "Z"; // converts to UTC time

$summary = $job->title;

$ical .= "BEGIN:VEVENT
UID:" . $slot->id . "@homewoodphoto.jhu.edu
DTSTAMP:" . gmdate('Ymd').'T'. gmdate('His') . "Z
DTSTART:" . $dtstart . "
DTEND:" . $dtend . "
SUMMARY:" . $summary . "
END:VEVENT
";
}

$ical .= "END:VCALENDAR";

//set correct content-type-header
header('Content-type: text/calendar; charset=utf-8');
header('Content-Disposition: inline; filename=homewoodphoto_master.ics');
echo $ical;
exit;
?>


0 commentaires