Annonce

Important : WordPress 2.5.1 est disponible.
Annonce 1 : Le Codex en français a besoin de vous pour avancer !
Annonce 2 : Avant de poster, n'oubliez pas de faire une petite Recherche et de lire les règles de ce forum.

#1 25-06-2007 20:25:17

argentik
Membre WP
Lieu: Paris FR
Date d'inscription: 19-04-2007
Messages: 4
Site web

Faire apparaître des articles dont la date est future : comment ???

Bonjour,

Ma configuration WP actuelle blog normal 3 colonnes dt 2 sidebars
- Version de WordPress : 2.1.3 (enfin je crois? comment faire pour savoir?) c était l avant dernière version dispo sur le site de WP fr
- Thème utilisé : iblogR
- Plugins en place : une quinzaine dont postthumb revisited etc...
- Nom de l'hebergeur : ovh
- Adresse du site : (en test et design non fini) http://www.altermusica.net/blog

Problème(s) rencontré(s) :

ds le blog d une webradio, je souhaite faire apparâitre des articles - émissions programmés pour des dates futures à la date d'aujourd'hui ( exemple : ns sommes le 25 juin et je prépare une série d articles pour la semaine en cours, articles que je souhaite faire apparaître DES AUJOURD'HUI comme étant daté du 26 juin ou du 1er juillet)
malgré la fonction d'horodatage décalé que je trouve super, je souhaite :

1) garder la date de l article (ie le 5 juillet 07)
2) et surtout le faire apparaître dès aujourd'hui le 25 Juin


y a t il une ligne de code à ajouter ? un plugin ? j ai essayé, mais n ai rien trouvé..
idem ds le forum
je suis sure que c possible...

Merci de votre aide à tous
wp


si vous aimez le vrai bon disco : http://www.discoqueer.com - next le samedi 11 août au Nouveau Caz (Paris)

Hors ligne

 

#2 26-06-2007 00:56:08

Many
Blogodépendant
Lieu: Paris
Date d'inscription: 26-06-2006
Messages: 1784
Site web

Re: Faire apparaître des articles dont la date est future : comment ???

Bonsoir argentik,

[Mode reflexion]bien que ça ne rentre pas en compte, je ne vois pas l'intérêt d'une telle chose.[/Mode reflexion]

Sinon pour revenir à la question, ce n'est pas possible en natif, et je ne connais pas (encore) de plugin qui le fasse.

Pas d'une grande aide désolé smile


Manyland | Blog futile ... donc indispensable

http://manalina1.free.fr/src/images/userbar_madareprez.png
http://www.wordpress-fr.net/wp-content/uploads/jmwp.jpg

Hors ligne

 

#3 26-06-2007 08:11:40

DavidR
Membre WP
Date d'inscription: 20-06-2007
Messages: 8
Site web

Re: Faire apparaître des articles dont la date est future : comment ???

Il y a des blogs qui font apparaître des articles dans la colonne principale et d'autres dans une barre latérale (comme celui de Koz : http://www.koztoujours.fr/).
Je ne sais pas comment cela est fait mais cela peut être la solution à ton pb :
affichage des annonces futures dans la barre latérale et non affichage de ceux-ci dans la colonne principale (on doit pouvoir trier l'affichage selon la catégorie) ; du coup les billets antidatés ne prennent pas la première place.

Maintenant je ne peux pas t'en dire plus, étant loin d'être expert. Par exemple je ne sais pas quel greffon permet de mettre les articles d'une certaine catégorie dans une barre latérale.

En espérant avoir fait avancé le machin.

Hors ligne

 

#4 26-06-2007 10:41:23

argentik
Membre WP
Lieu: Paris FR
Date d'inscription: 19-04-2007
Messages: 4
Site web

Re: Faire apparaître des articles dont la date est future : comment ???

merci pour vos infos... donc ça ne semble pas possible sad((

bon autres questions :
- est il possible que j ajoute un bouton ou autre qui mette une date que je décide à l interieur du post (je ne vx pas l écrire en manuel à chaque fois sad((( )

- Est ce que les "champs personnalisés" peuvent m'aider ? à quoi servent-ils ?

- Quel bout de code je pourrais enlever pour ne plus prendre en compte la date prévue de publication ?

merci les WP people... wp


si vous aimez le vrai bon disco : http://www.discoqueer.com - next le samedi 11 août au Nouveau Caz (Paris)

Hors ligne

 

#5 26-06-2007 10:45:41

Xavier
Photogénique en noir et blanc
Lieu: Paris
Date d'inscription: 19-09-2005
Messages: 1696
Site web

Re: Faire apparaître des articles dont la date est future : comment ???

Les posts ne sont pas sensé dater un évènement. Il te faut un calendrier pour ça.
http://garrickvanburen.com/wordpress-plugins/wpical/ ?


Mainteneur de la traduction de WordPress
http://xavier.borderie.net/wp-fr/

Hors ligne

 

#6 26-06-2007 18:31:17

Damino
Modo Furtif !
Lieu: Paris
Date d'inscription: 19-09-2005
Messages: 1551
Site web

Re: Faire apparaître des articles dont la date est future : comment ???

Tu avais View Future Post mais qui date un peu.
Egalement Future Posts Calendar ou My Events.
Events Plugin
Event Calendar
Upcoming Events

Attention certains datent un peu et il faudra tester avant installation.

J'avais lancé une discussion il y a ... longtemps.

Dernière modification par Damino (26-06-2007 18:34:00)

Hors ligne

 

#7 27-06-2007 19:04:45

Stan
Passionné WP
Lieu: Cherbourg
Date d'inscription: 13-05-2007
Messages: 161
Site web

Re: Faire apparaître des articles dont la date est future : comment ???

Le calendrier reste tout de même la fonction la plus adaptée non ?

Hors ligne

 

#8 05-09-2007 20:36:32

Ellaurenzovfoot
Expert WP
Lieu: Paname
Date d'inscription: 15-11-2006
Messages: 217
Site web

Re: Faire apparaître des articles dont la date est future : comment ???

Bon ma réponse est tardive, mais tant pis, au moins il y aura réponse c'est toujours ça :p

Koztoujours utilise je crois miniblog ou sideblog, c'est un pluging qui sert à avoir un service de blog indépendant en quelque sorte des autres catégories. Pour ma part je le qualifierais sur un site d'information comme d'un service de brève. Article ne méritant pas une place de premier plan mais que l'on veut afficher. Un peu comme un dépêche AFP. Genre.... "Sarko de retour de Wolfeboro" information capitale, n'est-ce pas, mais qui ne mérite pas un article. Enfin voili voilou.

Hors ligne

 

#9 06-09-2007 10:42:48

djdoxy
Membre WP
Date d'inscription: 14-05-2007
Messages: 7

Re: Faire apparaître des articles dont la date est future : comment ???

J'ai un probleme similaire.
Je compte mettre en place WP pour m'en servir comme CMS pour un club auto.
Il y aura 3 types d'articles: les infos ("jean claude vient d'avoir un bébé") et les comptes rendus d'evenements ("les photos de la balade de weekend dernier ") et les annonces d'evenements ("nouvelle balade prevue le 25 decembre").

Pour les 2 premiers types, aucun souci, WP est parfaitement adapté à notre besoin... Par contre pour ce qui est de l'annonce d'evenements c'est moins evident.

En effet si je poste aujourd'hui (date de publication) un article sur la sortie du 25 décembre, il va apparaitre tout de suite (ce que je veux) mais la date du 25.12 ne sera pas en gras dans mon calendrier (ce que j'aimerai)

Si je le date du 25.12, et bien mon article ne paraitra pas avant (peu d'interet) par contre il sera bien à la bonne date dans mon calendrier...

L'ideal serait pour chaque article de pouvoir preciser une date d'evenement (en plus de la date de publication) et d'avoir un calendrier qui affiche de deux couleurs differentes les articles (date de publication) et les evenements (date d'evenement)

Connaissez vous un plugin qui ferai cela ?

Hors ligne

 

#10 20-09-2007 17:19:16

djdoxy
Membre WP
Date d'inscription: 14-05-2007
Messages: 7

Re: Faire apparaître des articles dont la date est future : comment ???

Hop voila des nouvelles...

Alors j'ai modifié mon WP pour que l'on puisse définir un article comme étant un évènement.
Du coup un même article apparait 2 fois lors de la recherche: à sa date de publication, et à la date de l'evenement.

J'ai également modifié le calendrier de mon theme (Silver Lexus) pour qu'il affiche les evenements (en rouge) même si ceux ci sont futur.

Je n'ai pas essayé, mais je pense que si un article a une date de publication future et qu'il a une date d'évènement il sera visible via sa date d'évènement.

Alors pour ceux que ca interessent, voila les modifs que j'ai fait:



Insertion de la date de l'evenement dans la base de donnée.
Ceci nécessite bien évidemment la création d'une colonne evenement_date dans la table qui contient vos posts (par defaut c'est wp_posts )

Dans le fichier wp-includes/post.php
Dans la fonction wp_insert_post

Remplacer

Code:

  1.   if ($update) {
  2.     $wpdb->query(
  3.       "UPDATE IGNORE $wpdb->posts SET
  4.       post_author = '$post_author',
  5.       post_date = '$post_date',
  6.       post_date_gmt = '$post_date_gmt',
  7.       post_content = '$post_content',
  8.       post_content_filtered = '$post_content_filtered',
  9.       post_title = '$post_title',
  10.       post_excerpt = '$post_excerpt',
  11.       post_status = '$post_status',
  12.       post_type = '$post_type',
  13.       comment_status = '$comment_status',
  14.       ping_status = '$ping_status',
  15.       post_password = '$post_password',
  16.       post_name = '$post_name',
  17.       to_ping = '$to_ping',
  18.       pinged = '$pinged',
  19.       post_modified = '".current_time('mysql')."',
  20.       post_modified_gmt = '".current_time('mysql',1)."',
  21.       post_parent = '$post_parent',
  22.       menu_order = '$menu_order'
  23.       WHERE ID = $post_ID");
  24.   } else {
  25.     $wpdb->query(
  26.       "INSERT IGNORE INTO $wpdb->posts
  27.       (post_author, post_date, post_date_gmt, post_content, post_content_filtered, post_title, post_excerpt,  post_status, post_type, comment_status, ping_status, post_password, post_name, to_ping, pinged, post_modified, post_modified_gmt, post_parent, menu_order, post_mime_type)
  28.       VALUES
  29.       ('$post_author', '$post_date', '$post_date_gmt', '$post_content', '$post_content_filtered', '$post_title', '$post_excerpt', '$post_status', '$post_type', '$comment_status', '$ping_status', '$post_password', '$post_name', '$to_ping', '$pinged', '$post_date', '$post_date_gmt', '$post_parent', '$menu_order', '$post_mime_type')");
  30.       $post_ID = (int) $wpdb->insert_id;
  31.   }

par

Code:

  1.       "UPDATE IGNORE $wpdb->posts SET
  2.       post_author = '$post_author',
  3.       post_date = '$post_date',
  4.       post_date_gmt = '$post_date_gmt',
  5.       post_content = '$post_content',
  6.       post_content_filtered = '$post_content_filtered',
  7.       post_title = '$post_title',
  8.       post_excerpt = '$post_excerpt',
  9.       post_status = '$post_status',
  10.       post_type = '$post_type',
  11.       comment_status = '$comment_status',
  12.       ping_status = '$ping_status',
  13.       post_password = '$post_password',
  14.       post_name = '$post_name',
  15.       to_ping = '$to_ping',
  16.       pinged = '$pinged',
  17.       post_modified = '".current_time('mysql')."',
  18.       post_modified_gmt = '".current_time('mysql',1)."',
  19.       post_parent = '$post_parent',
  20.       menu_order = '$menu_order',
  21.       evenement_date = '$evenement_date'
  22.       WHERE ID = $post_ID");
  23.   } else {
  24.     $wpdb->query(
  25.       "INSERT IGNORE INTO $wpdb->posts
  26.       (post_author, post_date, post_date_gmt, post_content, post_content_filtered, post_title, post_excerpt,  post_status, post_type, comment_status, ping_status, post_password, post_name, to_ping, pinged, post_modified, post_modified_gmt, post_parent, menu_order, post_mime_type, evenement_date)
  27.       VALUES
  28.       ('$post_author', '$post_date', '$post_date_gmt', '$post_content', '$post_content_filtered', '$post_title', '$post_excerpt', '$post_status', '$post_type', '$comment_status', '$ping_status', '$post_password', '$post_name', '$to_ping', '$pinged', '$post_date', '$post_date_gmt', '$post_parent', '$menu_order', '$post_mime_type', '$evenement_date')");
  29.       $post_ID = (int) $wpdb->insert_id;
  30.   }


Modification de la recherche, pour qu'une recherche de type http://www.monblog.net/wp/?m=20070923 renvoie les articles et évènements de ce jour là

Dans le fichier wp-includes/query.php
Dans la classe WP_Query
Danbs la  fonction &get_posts()


Remplacer

Code:

  1.     if ( $q['m'] ) {
  2.       $q['m'] = '' . preg_replace('|[^0-9]|', '', $q['m']);
  3.       $where .= ' AND YEAR(post_date)=' . substr($q['m'], 0, 4);
  4.       if (strlen($q['m'])>5)
  5.         $where .= ' AND MONTH(post_date)=' . substr($q['m'], 4, 2);
  6.       if (strlen($q['m'])>7)
  7.         $where .= ' AND DAYOFMONTH(post_date)=' . substr($q['m'], 6, 2);
  8.       if (strlen($q['m'])>9)
  9.         $where .= ' AND HOUR(post_date)=' . substr($q['m'], 8, 2);
  10.       if (strlen($q['m'])>11)
  11.         $where .= ' AND MINUTE(post_date)=' . substr($q['m'], 10, 2);
  12.       if (strlen($q['m'])>13)
  13.         $where .= ' AND SECOND(post_date)=' . substr($q['m'], 12, 2);
  14.     }

Par

Code:

  1.     if ( $q['m'] ) {
  2.       $q['m'] = '' . preg_replace('|[^0-9]|', '', $q['m']);
  3.       // pour la gestion des evenements, on ajoute 2 parentheses
  4.       // L'idée etant d'avoir
  5.       // AND ( (copnditions post) OR (conditions evenement) )
  6.       $where .= ' AND (( YEAR(post_date)=' . substr($q['m'], 0, 4);
  7.       if (strlen($q['m'])>5)
  8.         $where .= ' AND MONTH(post_date)=' . substr($q['m'], 4, 2);
  9.       if (strlen($q['m'])>7)
  10.         $where .= ' AND DAYOFMONTH(post_date)=' . substr($q['m'], 6, 2);
  11.       if (strlen($q['m'])>9)
  12.         $where .= ' AND HOUR(post_date)=' . substr($q['m'], 8, 2);
  13.       if (strlen($q['m'])>11)
  14.         $where .= ' AND MINUTE(post_date)=' . substr($q['m'], 10, 2);
  15.       if (strlen($q['m'])>13)
  16.         $where .= ' AND SECOND(post_date)=' . substr($q['m'], 12, 2);
  17.      // Gestion des evenements
  18.         if (strlen($q['m'])>5)
  19.         $where .= ' ) OR ( MONTH(evenement_date)=' . substr($q['m'], 4, 2);
  20.       if (strlen($q['m'])>7)
  21.         $where .= ' AND DAYOFMONTH(evenement_date)=' . substr($q['m'], 6, 2);
  22.       if (strlen($q['m'])>9)
  23.         $where .= ' AND HOUR(evenement_date)=' . substr($q['m'], 8, 2);
  24.       if (strlen($q['m'])>11)
  25.         $where .= ' AND MINUTE(evenement_date)=' . substr($q['m'], 10, 2);
  26.       if (strlen($q['m'])>13)
  27.         $where .= ' AND SECOND(evenement_date)=' . substr($q['m'], 12, 2);
  28.       // on ferme les parentheses uniquement si on a ouvertes...
  29.       if (strlen($q['m'])>5)
  30.         $where .= ' ))';
  31.        
  32.       }


Modification de la page de saisie d'articles afin de pouvoir definir une date d'evenement pour un article

Dans le fichier wp-admin/edit-form-advanced.php

Trouver

Code:

  1. <?php if ( current_user_can('edit_posts') ) : ?>
  2. <fieldset id="posttimestampdiv" class="dbx-box">
  3. <h3 class="dbx-handle"><?php _e('Post Timestamp'); ?></h3>
  4. <div class="dbx-content"><?php touch_time(($action == 'edit')); ?></div>
  5. </fieldset>
  6. <?php endif; ?>

Et y ajouter (ne pas le remplacer), juste apres

Code:

  1. <?php
  2. /* Nouvelle boiboite
  3.  * Permet de saisir la date d'un evenement
  4. */
  5. if ( current_user_can('edit_posts') ) : ?>
  6. <fieldset id="evenementdiv" class="dbx-box">
  7. <h3 class="dbx-handle"><?php _e('Date si evenement'); ?></h3>
  8. <div class="dbx-content"><?php touch_evenement(($action == 'edit')); ?></div>
  9. </fieldset>
  10. <?php endif; ?>


Charge de la date de l'evenement depuis la page dans l'objet _POST qui sera ensuite inseré dans la base

Dans le fichier wp-admin/admin-functions.php
Dans la methode wp_write_post()

Trouver

Code:

  1.   if (!empty ( $_POST['edit_date'] ) ) {
  2.     $aa = $_POST['aa'];
  3.     $mm = $_POST['mm'];
  4.     $jj = $_POST['jj'];
  5.     $hh = $_POST['hh'];
  6.     $mn = $_POST['mn'];
  7.     $ss = $_POST['ss'];
  8.     $jj = ($jj > 31 ) ? 31 : $jj;
  9.     $hh = ($hh > 23 ) ? $hh -24 : $hh;
  10.     $mn = ($mn > 59 ) ? $mn -60 : $mn;
  11.     $ss = ($ss > 59 ) ? $ss -60 : $ss;
  12.     $_POST['post_date'] = sprintf( "%04d-%02d-%02d %02d:%02d:%02d", $aa, $mm, $jj, $hh, $mn, $ss );
  13.     $_POST['post_date_gmt'] = get_gmt_from_date( $_POST['post_date'] );
  14.   }

Et y ajouter (ne pas le remplacer), juste apres

Code:

  1.   /* Gestion des evenements
  2.    *
  3.    */
  4.   if (!empty ( $_POST['edit_evenement'] )) {
  5.     $evenement_aa = $_POST['evenement_aa'];
  6.     $evenement_mm = $_POST['evenement_mm'];
  7.     $evenement_jj = $_POST['evenement_jj'];
  8.     $evenement_hh = $_POST['evenement_hh'];
  9.     $evenement_mn = $_POST['evenement_mn'];
  10.     $evenement_ss = $_POST['evenement_ss'];
  11.     $evenement_jj = (evenement_$jj > 31 ) ? 31 : evenement_$jj;
  12.     $evenement_hh = ($evenement_hh > 23 ) ? $evenement_hh -24 : $evenement_hh;
  13.     $evenement_mn = ($evenement_mn > 59 ) ? $evenement_mn -60 : $evenement_mn;
  14.     $evenement_ss = ($evenement_ss > 59 ) ? $evenement_ss -60 : $evenement_ss;
  15.     $_POST['evenement_date'] = sprintf( "%04d-%02d-%02d %02d:%02d:%02d", $evenement_aa, $evenement_mm, $evenement_jj, $evenement_hh, $evenement_mn, $evenement_ss );
  16.  
  17.   }

Rajouter la fonction suivante (ou vous voulez dans le code de admin-functions.php, personellement je l'ai mise juste apres la fonction touch_time)

Code:

  1. /* Nouvelle methode
  2.  * Genere un fomulaire pour declarer si l'article est un evenement 
  3.  */
  4. function touch_evenement( $edit = 1 ) {
  5.   global $wp_locale, $post, $comment;
  6.  
  7.   echo '<fieldset><legend><input type="checkbox" class="checkbox" name="edit_evenement" value="1" id="dateEvenement" /> <label for="dateEvenement">'.__( 'Edit timestamp' ).'</label></legend>';
  8.  
  9.   $time_adj = time() + (get_option( 'gmt_offset' ) * 3600 );
  10.   $evenement_date = $post->evenement_date;
  11.   $jj = ($edit) ? mysql2date( 'd', $evenement_date ) : gmdate( 'd', $time_adj );
  12.   $mm = ($edit) ? mysql2date( 'm', $evenement_date ) : gmdate( 'm', $time_adj );
  13.   $aa = ($edit) ? mysql2date( 'Y', $evenement_date ) : gmdate( 'Y', $time_adj );
  14.   $hh = ($edit) ? mysql2date( 'H', $evenement_date ) : gmdate( 'H', $time_adj );
  15.   $mn = ($edit) ? mysql2date( 'i', $evenement_date ) : gmdate( 'i', $time_adj );
  16.   $ss = ($edit) ? mysql2date( 's', $evenement_date ) : gmdate( 's', $time_adj );
  17.  
  18.   echo "<select name=\"evenement_mm\" onchange=\"edit_evenement.checked=true\">\n";
  19.   for ( $i = 1; $i < 13; $i = $i +1 ) {
  20.     echo "\t\t\t<option value=\"$i\"";
  21.     if ( $i == $mm )
  22.       echo ' selected="selected"';
  23.     echo '>' . $wp_locale->get_month( $i ) . "</option>\n";
  24.   }
  25. ?>
  26. </select>
  27. <input type="text" id="evenement_jj" name="evenement_jj" value="<?php echo $jj; ?>" size="2" maxlength="2" onchange="edit_evenement.checked=true"/>
  28. <input type="text" id="evenement_aa" name="evenement_aa" value="<?php echo $aa ?>" size="4" maxlength="5" onchange="edit_evenement.checked=true" /> @
  29. <input type="text" id="evenement_hh" name="evenement_hh" value="<?php echo $hh ?>" size="2" maxlength="2" onchange="edit_evenement.checked=true" /> :
  30. <input type="text" id="evenement_mn" name="evenement_mn" value="<?php echo $mn ?>" size="2" maxlength="2" onchange="edit_evenement.checked=true" />
  31. <input type="hidden" id="evenement_ss" name="evenement_ss" value="<?php echo $ss ?>" size="2" maxlength="2" onchange="edit_evenement.checked=true" />
  32. <?php
  33.   if ( $edit ) {
  34.     // 01-01-1970 est la date par defaut (0000-00-00 00:00:00) des posts non enregistrés comme evenements
  35.     if ($aa=1970) {
  36.       printf( __('Article non enregistr&eacute; comme un evenement. Pour en faire un evenement: changez en l\'horodatage.' ));
  37.     }
  38.     else {
  39.       printf( __('Evenement initialement prevu le: %1$s %2$s, %3$s @ %4$s:%5$s' ), $wp_locale->get_month( $mm ), $jj, $aa, $hh, $mn );
  40.     }
  41.   }
  42. ?>
  43. </fieldset>
  44.   <?php
  45.  
  46. }



Dans wp-admin/upgrade-functions.php
Dans la fonction upgrade_130()

Remplacer

Code:

  1.   $posts = $wpdb->get_results("SELECT ID, post_title, post_content, post_excerpt, guid, post_date, post_name, post_status, post_author FROM $wpdb->posts");

Par

Code:

  1.   $posts = $wpdb->get_results("SELECT ID, post_title, post_content, post_excerpt, guid, post_date, post_name, post_status, post_author, evenement_date FROM $wpdb->posts");



Modification du calendrier du theme Silver Lexus

Dans le fichier wp-content\themes\silver-lexus-08\functions.php il faut mettre à jour la fonction de calendrier pour qu'elle prenne en compte des dates d'evenements pour
- le mois courant (affichage en rouge des dates passées ou futures ayant un evenement)
- l'affichage des liens mois precedent/mois suivant*.

Voila la methode complete:

Code:

  1. function get_newcalendar($daylength = 1) {
  2.   global $wpdb, $m, $monthnum, $year, $timedifference, $month, $month_abbrev, $weekday, $weekday_initial, $weekday_abbrev, $posts;
  3.  
  4.   $now = current_time('mysql');
  5.  
  6.   // Quick check. If we have no posts yet published, abort!
  7.   if ( !$posts ) {
  8.     $gotsome = $wpdb->get_var("SELECT ID from $wpdb->posts WHERE post_status = 'publish' AND post_date < '$now' ORDER BY post_date DESC LIMIT 1");
  9.     if ( !$gotsome )
  10.       return;
  11.   }
  12.  
  13.   if ( isset($_GET['w']) )
  14.     $w = ''.intval($_GET['w']);
  15.  
  16.   // week_begins = 0 stands for Sunday
  17.   $week_begins = intval(get_settings('start_of_week'));
  18.   $add_hours = intval(get_settings('gmt_offset'));
  19.   $add_minutes = intval(60 * (get_settings('gmt_offset') - $add_hours));
  20.  
  21.   // Let's figure out when we are
  22.   if ( !empty($monthnum) && !empty($year) ) {
  23.     $thismonth = ''.zeroise(intval($monthnum), 2);
  24.     $thisyear = ''.intval($year);
  25.   } elseif ( !empty($w) ) {
  26.     // We need to get the month from MySQL
  27.     $thisyear = ''.intval(substr($m, 0, 4));
  28.     $d = (($w - 1) * 7) + 6; //it seems MySQL's weeks disagree with PHP's
  29.     $thismonth = $wpdb->get_var("SELECT DATE_FORMAT((DATE_ADD('${thisyear}0101', INTERVAL $d DAY) ), '%m')");
  30.   } elseif ( !empty($m) ) {
  31.     $calendar = substr($m, 0, 6);
  32.     $thisyear = ''.intval(substr($m, 0, 4));
  33.     if ( strlen($m) < 6 )
  34.         $thismonth = '01';
  35.     else
  36.         $thismonth = ''.zeroise(intval(substr($m, 4, 2)), 2);
  37.   } else {
  38.     $thisyear = gmdate('Y', current_time('timestamp'));
  39.     $thismonth = gmdate('m', current_time('timestamp'));
  40.   }
  41.   // Simplifie la requete SQL en prenant les posts ou evenements dont la date
  42.   // est superieur au dernier jour du mois.
  43.   // Pour cela il faut determiner si le dernier jour est le 28,29,30 ou 31
  44.  
  45.  
  46.   switch ($thismonth) {
  47.     case 1:
  48.     case 3:
  49.     case 5:
  50.     case 7:
  51.     case 8:
  52.     case 10:
  53.     case 12:
  54.       $dernierJourDuMois = 31;
  55.     break;
  56.     case 2 :
  57.         // Fevrier: 28 sauf si annee bisextile. Algo simple [et faux] qui ne tiens pas compte des siecles mutliples de 400
  58.         
  59.         if ($thisyear%4) { // Renvoie 0 (false) si mutlitple de 4 (bisextile)
  60.           $dernierJourDuMois = 28;
  61.         }
  62.         else {
  63.           $dernierJourDuMois = 29;
  64.         }
  65.         break;
  66.     default:
  67.        $dernierJourDuMois = 30;
  68.       
  69. }
  70.  
  71.  
  72.  
  73.   $unixmonth = mktime(0, 0 , 0, $thismonth, 1, $thisyear);
  74.  
  75.   // Get the next and previous month and year with at least one post
  76.   $previous = $wpdb->get_row("SELECT DISTINCT MONTH(post_date) AS month, YEAR(post_date) AS year,
  77.     MONTH(evenement_date) AS evenement_month, YEAR(evenement_date) AS evenement_year
  78.     FROM $wpdb->posts
  79.     WHERE (post_date < '$thisyear-$thismonth-01' OR evenement_date <  '$thisyear-$thismonth-01')
  80.     AND evenement_date >  '0000-00-00'
  81.     AND post_status = 'publish'
  82.       ORDER BY post_date DESC
  83.       LIMIT 1");
  84.   $next = $wpdb->get_row("SELECT  DISTINCT MONTH(post_date) AS month, YEAR(post_date) AS year,
  85.     MONTH(evenement_date) AS evenement_month, YEAR(evenement_date) AS evenement_year
  86.     FROM $wpdb->posts
  87.     WHERE ( post_date > '$thisyear-$thismonth-$dernierJourDuMois' OR evenement_date >  '$thisyear-$thismonth-$dernierJourDuMois')
  88.     AND post_status = 'publish'
  89.       ORDER BY post_date ASC
  90.       LIMIT 1");
  91.  
  92.   echo '<table summary="calendar" id="wp-calendar">
  93.   <caption>' . $month[zeroise($thismonth, 2)] . ' ' . date('Y', $unixmonth) . '</caption>
  94.   <thead>
  95.   <tr>';
  96.  
  97.   $day_abbrev = $weekday_initial;
  98.   if ( $daylength > 1 )
  99.     $day_abbrev = $weekday_abbrev;
  100.  
  101.   $myweek = array();
  102.  
  103.   for ( $wdcount=0; $wdcount<=6; $wdcount++ ) {
  104.     $myweek[]=$weekday[($wdcount+$week_begins)%7];
  105.   }
  106.  
  107.   foreach ( $myweek as $wd ) {
  108.     echo "\n\t\t<th abbr=\"$wd\" scope=\"col\" title=\"$wd\">" . $day_abbrev[$wd] . '</th>';
  109.   }
  110.  
  111.   echo '
  112.   </tr>
  113.   </thead>
  114.  
  115.   <tfoot>
  116.   <tr>';
  117.  
  118.   if ( $previous ) {
  119.     echo "\n\t\t".'<td abbr="' . $month[zeroise($previous->month, 2)] . '" colspan="3" id="prev"><a href="' .
  120.     get_month_link($previous->year, $previous->month) . '" title="' . sprintf(__('View posts for %1$s %2$s'), $month[zeroise($previous->month, 2)],
  121.       date('Y', mktime(0, 0 , 0, $previous->month, 1, $previous->year))) . '">&laquo; ' . $month_abbrev[$month[zeroise($previous->month, 2)]] . '</a></td>';
  122.   } else {
  123.     echo "\n\t\t".'<td colspan="3" id="prev" class="pad">&nbsp;</td>';
  124.   }
  125.  
  126.   echo "\n\t\t".'<td class="pad">&nbsp;</td>';
  127.  
  128.   if ( $next ) {
  129.     // Deux cas: Next contient un post futur, ou un evenement futur
  130.     if (empty($next->evenement_month)) {
  131.         // Si next n'est pas un evenement, utilise les infos du post
  132.         $leMois = $next->month;
  133.         $lAnnee = $next->year;
  134.     }else { 
  135.         // Si next est un evenement, utilise les infos de l'evenement
  136.         $leMois = $next->evenement_month;
  137.         $lAnnee = $next->evenement_year;
  138.     }
  139.     echo "\n\t\t".'<td abbr="' . $month[zeroise($leMois, 2)] . '" colspan="3" id="next"><a href="' .
  140.     get_month_link($lAnnee, $leMois) . '" title="' . sprintf(__('View posts for %1$s %2$s'), $month[zeroise($leMois, 2)],
  141.     date('Y', mktime(0, 0 , 0, $leMois, 1, $lAnnee))) . '">' . $month_abbrev[$month[zeroise($leMois, 2)]] . ' &raquo;</a></td>';
  142.    
  143.    
  144.   } else {
  145.     echo "\n\t\t".'<td colspan="3" id="next" class="pad">&nbsp;</td>';
  146.   }
  147.  
  148.   echo '
  149.   </tr>
  150.   </tfoot>
  151.  
  152.   <tbody>
  153.   <tr>';
  154.  
  155.   // Get days with posts
  156.   $dayswithposts = $wpdb->get_results("SELECT DISTINCT DAYOFMONTH(post_date)
  157.     FROM $wpdb->posts     WHERE MONTH(post_date) = '$thismonth'
  158.     AND YEAR(post_date) = '$thisyear'
  159.     AND post_status = 'publish'
  160.     AND post_date < '" . current_time('mysql') . '\'', ARRAY_N);
  161.    
  162.   if ( $dayswithposts ) {
  163.     foreach ( $dayswithposts as $daywith ) {
  164.       $daywithpost[] = $daywith[0];
  165.     }
  166.   } else {
  167.     $daywithpost = array();
  168.   }
  169. // Recupere les jours avec des evenements 
  170.   $joursAvecEvenement = $wpdb->get_results("SELECT DISTINCT DAYOFMONTH(evenement_date)
  171.     FROM $wpdb->posts     WHERE MONTH(evenement_date) = '$thismonth'
  172.     AND YEAR(evenement_date) = '$thisyear'
  173.     AND post_status = 'publish'", ARRAY_N);
  174.   if ( $joursAvecEvenement ) {
  175.     foreach ( $joursAvecEvenement as $jourAvec ) {
  176.       $listeEvenementDuMois[] = $jourAvec[0];
  177.     }
  178.   } else {
  179.     $listeEvenementDuMois = array();
  180.   }
  181.  
  182.  
  183.   if ( strstr($_SERVER['HTTP_USER_AGENT'], 'MSIE') || strstr(strtolower($_SERVER['HTTP_USER_AGENT']), 'camino') || strstr(strtolower($_SERVER['HTTP_USER_AGENT']), 'safari') )
  184.     $ak_title_separator = "\n";
  185.   else
  186.     $ak_title_separator = ', ';
  187.  
  188.   $ak_titles_for_day = array();
  189.   $ak_post_titles = $wpdb->get_results("SELECT post_title, DAYOFMONTH(post_date) as dom "
  190.     ."FROM $wpdb->posts "
  191.     ."WHERE YEAR(post_date) = '$thisyear' "
  192.     ."AND MONTH(post_date) = '$thismonth' "
  193.     ."AND post_date < '".current_time('mysql')."' "
  194.     ."AND post_status = 'publish'"
  195.   );
  196.   if ( $ak_post_titles ) {
  197.     foreach ( $ak_post_titles as $ak_post_title ) {
  198.         if ( empty($ak_titles_for_day['day_'.$ak_post_title->dom]) )
  199.           $ak_titles_for_day['day_'.$ak_post_title->dom] = '';
  200.         if ( empty($ak_titles_for_day["$ak_post_title->dom"]) ) // first one
  201.           $ak_titles_for_day["$ak_post_title->dom"] = str_replace('"', '&quot;', wptexturize($ak_post_title->post_title));
  202.         else
  203.           $ak_titles_for_day["$ak_post_title->dom"] .= $ak_title_separator . str_replace('"', '&quot;', wptexturize($ak_post_title->post_title));
  204.     }
  205.   }
  206.  
  207.  
  208.   // See how much we should pad in the beginning
  209.   $pad = calendar_week_mod(date('w', $unixmonth)-$week_begins);
  210.   if ( 0 != $pad )
  211.     echo "\n\t\t".'<td colspan="'.$pad.'" class="pad">&nbsp;</td>';
  212.  
  213.   $daysinmonth = intval(date('t', $unixmonth));
  214.   for ( $day = 1; $day <= $daysinmonth; ++$day ) {
  215.     if ( isset($newrow) && $newrow )
  216.       echo "\n\t</tr>\n\t<tr>\n\t\t";
  217.     $newrow = false;
  218.  
  219.     if ( $day == gmdate('j', (time() + (get_settings('gmt_offset') * 3600))) && $thismonth == gmdate('m', time()+(get_settings('gmt_offset') * 3600)) && $thisyear == gmdate('Y', time()+(get_settings('gmt_offset') * 3600)) )
  220.       echo '<td id="today">';
  221.     else
  222.       echo '<td>';
  223.     // Priorité aux evenements.
  224.     // Si evenement, on affiche le jour en rouge.
  225.     // Si post, alors process normal
  226.     if ( in_array($day, $listeEvenementDuMois) ) {
  227.       echo '<a href="' . get_day_link($thisyear, $thismonth, $day) . "\" title=\"$ak_titles_for_day[$day]\"><FONT COLOR=\"#FF0000\">$day</FONT></a>";
  228.     }
  229.     else
  230.     if ( in_array($day, $daywithpost) ) // any posts today?
  231.         echo '<a href="' . get_day_link($thisyear, $thismonth, $day) . "\" title=\"$ak_titles_for_day[$day]\">$day</a>";
  232.     else
  233.       echo $day;
  234.     echo '</td>';
  235.  
  236.     if ( 6 == calendar_week_mod(date('w', mktime(0, 0 , 0, $thismonth, $day, $thisyear))-$week_begins) )
  237.       $newrow = true;
  238.   }
  239.  
  240.   $pad = 7 - calendar_week_mod(date('w', mktime(0, 0 , 0, $thismonth, $day, $thisyear))-$week_begins);
  241.   if ( $pad != 0 && $pad != 7 )
  242.     echo "\n\t\t".'<td class="pad" colspan="'.$pad.'">&nbsp;</td>';
  243.  
  244.   echo "\n\t</tr>\n\t</tbody>\n\t</table>";
  245. }

*: le calendrier affiche un lien vers le prochain (ou precedent) mois qui contient un evenement ou un article. Ainsi si en septembre je publie un article concernant un evenement pour noel (et qu'il n'y a ni article ni evenement en octobre et novembre) c'est le lien "Decembre" et non pas "Octobre" qui sera affiché sur le calendrier lorsqu'on affichera la mois de septembre (ca evite d'afficher les mois "vide" pour rien)

Mais tout n'est pas parfait, et il reste quelques bugs:

La definition de la date d'evenement ne marche qu'a la creation d'un article.
Si on veut transformer un artcile normal en evenement, ou modifier la date d'un evenement, ca ne marche pas. (et je sais pas pourquoi, toute aide sur le sujet serait la bienvenue)

Le lien vers le mois precedent ne tiens pas correctement compte des evenements.
Ainsi si il y a un article en juillet indiquant un evenement en aout, et aucun article en aout, alors le lien "mois precedent" du calendrier de septembre affichera juillet et non pas aout.

Voilà

Hors ligne

 

#11 20-09-2007 18:23:23

dlo
Blogodépendant
Date d'inscription: 10-04-2007
Messages: 1329

Re: Faire apparaître des articles dont la date est future : comment ???

djdoxy a écrit:

Alors j'ai modifié mon WP...

Et pas qu'un peu !!! blink

Il y avait sûrement moyen de réaliser la même chose avec un plugin sans toucher à WordPress.

A mon sens, il n'est jamais bon de modifer le code d'une application dont on n'est pas le propriétaire car soit on se bloque sur une version, soit on refait tout le travail à chaque changement de version.
Et le bon côté de WordPress réside aussi dans la possiblilité de changer son comportement en utilisant les points d'entrée que sont les filtres et les actions.

Mais cela n'engage que moi et n'enlève rien à ce qui a été fait. smile

Cordialement


Non, je ne suis pas blogodépendant... C'est juste que je n'ai toujours pas trouvé la sortie de ce forum !

Hors ligne

 

#12 20-09-2007 19:25:02

djdoxy
Membre WP
Date d'inscription: 14-05-2007
Messages: 7

Re: Faire apparaître des articles dont la date est future : comment ???

dlo a écrit:

djdoxy a écrit:

Alors j'ai modifié mon WP...

Et pas qu'un peu !!! blink

C'est vrai qu'en lisant mon post ca peu sembler important, mais hormis la partie qui affiche l'horodatage et celle qui le recupere pour enrichir l'objet _POST, laplupart des modifications consistent simplement à rajouter "evenement_date" dans les requetes SQL

Toutefois, je suis 100% d'accord avec le fait que ma modif releve de la bidouille, et qu'un plugin aurait été bien plus propre, mais j'avais besoin de cette fonctionalité rapidement et je ne maitrise pas du tout le concept de plugin wp (alors que modifier du php, ça je gere a peu près)

Effectivement, à chaque mise à jour de WP je devrai refaire les modifs (en meme temps, il y a peu de fichier impactés, et un logiciel comme beyond compare permet de retrofiter tres rapidement les modifs dans la nouvelle version).

Mais du coup, quand j'en aurai marre, je ferai peut etre un plugin WP smile

Hors ligne

 

#13 21-09-2007 10:30:53

mamzelle holidays
Habitué WP
Date d'inscription: 25-05-2006
Messages: 54

Re: Faire apparaître des articles dont la date est future : comment ???

sur le blog de fran6 (fran6art.com) il parlait d'un plugin pour annoncer les billets à venir ! c'est peut etre ça que tu cherche ... ! smile


http://webj.free.fr/sign1.jpg

Hors ligne

 

Pied de page des forums

Propulsé par PunBB 1.2.17
© Copyright 2005-2006 WordPress France

Tous droits réservés - wordpress-fr.net © 2005-2006

  • RSS
WPfr ValidatorXhtml ValidatorCSS mysql Php GetFirefox
Design par AmO - Crédits - Equipe WordPress France

Réseau International : Hongrie - Allemagne - Grèce - Italie - Japon - Corée - Suisse - Turquie - USA