Submitted by Maxime69 on
Suite au dernier POST de lektum ici : http://drupalfr.org/node/6713, je dépose une demande sur le forum développement car une chose m'intéresse fortement : Pouvoir lier des pages au module Calendar Block en fonction d'une date précise(http://drupal.org/project/calendar_block)
Au même titre que lektum, je en comprends pas le fonctionnement du module, y-a-t-il du dév à prévoir ?
Maxime.
J'ai travaillé sur ce que
Permalien Soumis par Maxime69 le 7 Juillet, 2009 - 12:31
J'ai travaillé sur ce que je voulais réaliser car la réponse était trop longue à chercher. L'objectif est d'adapter le module Calendar Block pour qu'il attaque une vue (ou autre) en fonction de sa présence ou non en BDD. Ci-dessous la fonction améliorée :
/**
* Theme the calendar.
*/
function theme_calendar_block($calendar) {
$row_counter = 0;
$num_rows = (count($calendar->dates) / 7);
$weekdays = array_values($calendar->weekdays);
$output[] = ' <div id="calendar">';
// Create the month and year row
$output[] = ' <div id="calendar_row'. $row_counter .'" class="clear-block">';
$output[] = ' <div id="nav" class="clear-block">';
$output[] = ' <div id="calendar_prev" class="'. ($calendar->month > 1 ? ($calendar->month - 1) ."-$calendar->year" : "12-". ($calendar->year - 1)) .'"><span><</span></div>';
$output[] = ' <div id="calendar_month">'. t($calendar->month_str) .' '. $calendar->year .'</div>';
$output[] = ' <div id="calendar_next" class="'. ($calendar->month < 12 ? ($calendar->month + 1) ."-$calendar->year" : "01-". ($calendar->year + 1)) .'"><span>></span></div>';
$output[] = ' </div>';
// Create the weekdays row
foreach ($weekdays as $key => $day) {
$class = (isset($class)) ? ($key == 6 ? ' last' : '') : ' first';
$output[] = " <div class="hok top $class"><span>". t($day) ."</span></div>";
}
$output[] = " </div>";
$row_counter++;
$day_counter = 0;
// Create the days rows
$output[] = " <div class="week" id="calendar_row$row_counter">";
foreach ($calendar->dates as $date) {
// Create an easy readable date for modules which use hook_calendar_block().
$date->date = (drupal_strlen($date->month) == 1 ? "0$date->month" : $date->month) ."-$date->day-$date->year";
$class = ($day_counter == 0) ? ' first' : ($day_counter == 6 ? ' last' : '');
if ($date->month !== intval($calendar->month)) {
$class .= ' disabled';
}
if ($calendar->day && $date->day == $calendar->day) {
$class .= ' today';
}
// Create a variable for day, so other modules can't interfere in hook_calendar_block
$current_day = $date->day;
// Create a variable for the weekday as a reference for ather modules
$date->weekday = $weekdays[$day_counter];
// Give other modules the opportunity to change the content for each date
foreach (module_implements('calendar_block') as $module) {
$function = $module .'_calendar_block';
$function($calendar, $date, 'alter');
}
$day_counter = ($day_counter < 6) ? $day_counter + 1: 0;
$output[] = " <div class="hok $class $date->date">";
# MODIFICATION POUR CREER UN LIEN EN FONCTION DE LA PRESENCE D'UNE PAGE D'UNE VUE
$ok = 0;
$display_title_view = $current_day."_".$calendar->month."_".$calendar->year;
$result = db_query("select display_title from drupviews_display where display_title = '$display_title_view'");
while ($field = db_fetch_object($result)) {
$ok = 1;
if ($class != ' first disabled' && $class != ' disabled' && $class != ' last disabled') {
$output[] = " <span><a href="?q=node/".$display_title_view."/evt">". ($date->content ? $date->content : $current_day) ."</a></span>";
} else {
$output[] = " <span>". ($date->content ? $date->content : $current_day) ."</span>";
}
}
if ($ok == 0) {
$output[] = " <span>". ($date->content ? $date->content : $current_day) ."</span>"; # ligne conservée par Maxime
}
# FIN MODIFICATION
if ($day_counter > 0) {
$output[] = " <div class="border_right"></div>";
}
if ($row_counter < $num_rows) {
$output[] = " <div class="border_bottom"></div>";
}
$output[] = " </div>";
if ($row_counter < $num_rows && $day_counter == 0) {
$row_counter++;
$output[] = " </div>";
$output[] = " <div class="week" id="calendar_row$row_counter">";
};
}
$output[] = " <div class="clear-block"></div>";
$output[] = " </div>";
$output[] = " </div>";
return join("\n", $output);
}
C'est ce pavé que j'ai ajouté :
# MODIFICATION POUR CREER UN LIEN EN FONCTION DE LA PRESENCE D'UNE PAGE D'UNE VUE
$ok = 0;
$display_title_view = $current_day."".$calendar->month."".$calendar->year;
$result = db_query("select display_title from drupviews_display where display_title = '$display_title_view'");
while ($field = db_fetch_object($result)) {
$ok = 1;
if ($class != ' first disabled' && $class != ' disabled' && $class != ' last disabled') {
$output[] = " <span><a href="?q=node/".$display_title_view."/evt">". ($date->content ? $date->content : $current_day) ."</a></span>";
} else {
$output[] = " <span>". ($date->content ? $date->content : $current_day) ."</span>";
}
}
if ($ok == 0) {
$output[] = " <span>". ($date->content ? $date->content : $current_day) ."</span>"; # ligne conservée par Maxime
}
# FIN MODIFICATION
Je cherche maintenant à récupérer le rôle par exemple d'un utilisateur ou encore son groupe d'appartenance (OG) pour filtrer la vue à la volée.
Je ne suis pas certain que mon code soit bien implémenter car lors d'une future maj...perdu...Si quelqu'un peut m'aider dans ce sens, c'est avec plaisir que j'accepte.
Maxime.
Comme c'est une fonction
Permalien Soumis par nyl auster le 7 Juillet, 2009 - 13:21
Comme c'est une fonction theme que tu cherches à modifier, tu as la possibilité de faire un override de la fonction plutôt que de la changer dans le module; ainsi tu ne perdras rien lors de la mise à jour (sauf si c'est bien sûr le code de la fonction originelle à trop changé).
Donc il faut copier coller ta fonction dans le fichier template.php de ton theme, la renommer phptemplate_calendar_block et insérer tes changements.
C'est ta fonction qui sera alors appelée pour afficher les informations et non plus la fonction présente dans le module originel.
Une solution un peu plus propre à mon sens c'est de carrément créer un module et d'insérer dedans le même code; parce que j'aime pas trop avoir le php dispersé à droite et à gauche mais la solution template.php fonctionne ;-)
Salut, Tout d'abord merci
Permalien Soumis par Maxime69 le 7 Juillet, 2009 - 22:35
Salut,
Tout d'abord merci pour cette information que je vais appliquer à la lettre.
Pour ce qui est de la création d'un module, je n'ai pas encore trouvé de documentation en français suffisamment claire pour le moment, en fait j'ai peu cherché dans ce sens pour le moment. J'ai déployé drupal il n'y a qu'une petite semaine.
Pour la récupération du rôle aurais-tu une info complémentaire à me fournir ?
Bonne soirée.
Dans drupal 5, de mémoire
Permalien Soumis par nyl auster le 8 Juillet, 2009 - 08:11
Dans drupal 5, de mémoire je faisais un truc du genre :
je ne connais pas drupal 6 encore. En tous cas c'est dans l'objet utilisateur que tu peux le voir en écrivant ceci : - à moins que cela aussi ait changé dans D6 :-/
As the beautiful appearance
Permalien Soumis par saf le 25 Février, 2012 - 10:30
As the beautiful appearance and good design are PUMA Sandals jordan shoes popular with women. A fabulous full-grain sandal with distinctive Motorsport elements is the perfect product for those who enjoy puma shoes their special way of life. There are many types of styles and colours of the PUMA sandals cheap jordan shoes with top quality all over the world. The upper guess outlet is overlaid with ornamental and a tonal form stripe for a vintage-inspired look. The outsole is very flexible for additional mobility and wearing comfort.
As the beautiful appearance
Permalien Soumis par saf le 25 Février, 2012 - 10:33
As the beautiful appearance and good design are PUMA Sandals jordan shoes popular with women. A fabulous full-grain sandal with distinctive Motorsport elements is the perfect product for those who enjoy puma shoes their special way of life. There are many types of styles and colours of the PUMA sandals cheap jordan shoes with top quality all over the world. The upper guess outlet is overlaid with ornamental and a tonal form stripe for a vintage-inspired look. The outsole is very flexible for additional mobility and wearing comfort.