Nouveau sujet Répondre Imprimer Syndication RSS 2.0

Semaine courante du calendrier sur l'index et le portail

Feu follet
Avatar de Tranber
  • Age : 22 ans
  • Messages : 180
  • Inscrit : 03 Juin 2007
Message édité 2 fois, dernière édition par Tranber, 06 Mars 2008, 11:19     Lien vers ce message 06 Mars 2008, 11:17
Comme je ne suis pas fort pour faire des mods propres et que mon code peut certainement être amélioré, je propose la modification ici. Oui, j'ai déjà fait la mod, elle utilise en partie les informations affichée en bas du forum, à vous de dire ce que vous en pensez :

Ouvrez main/online.php
Après
				if ($row['c_approve'] || Fsb::$session->is_authorized('approve_event') || Fsb::$session->id() == $row['u_id'])
				{
					// On ajoute les évenements au tableau $event, avec en clef le mois et le jour, par exemple
					// pour la liste des évenements du 24 décembre 2006 : $events[12][24]
					$timestamp_begin =	($row['c_begin'] < $begin_timestamp) ? $begin_timestamp : $row['c_begin'];
					$timestamp_end =	($row['c_end'] > $end_timestamp) ? $end_timestamp : $row['c_end'];
					for ($timestamp =	$timestamp_begin; $timestamp <= $timestamp_end; $timestamp += ONE_DAY)
					{
						$events[date('j', $timestamp)][] = array(
							'type' =>	'event',
							'lang' =>	$row['c_title'],
						);
					}
				}
			}
			Fsb::$db->free($result);

Ajouter :
			// MOD : ajout du calendrier dans le header
			Fsb::$tpl->set_switch('index');
			for ($i = $begin_timestamp; $i <= $end_timestamp; $i += ONE_DAY)
			{
				$jour = date('j', $i);
				$total_events = 0;
				if (isset($events[$jour]))
				{
					$total_events = count($events[$jour]);
				}
				Fsb::$tpl->set_blocks('day', array(
					'NB' =>			date ('j', $i),
					'JOUR' =>	Fsb::$session->lang('week_day_' . strtolower(date ('D', $i))),
					'FILL' =>		TRUE,
					'CURRENT' =>	($jour == date('j', CURRENT_TIME)) ? TRUE : FALSE,
					'HAVE_EVENT' =>	($total_events) ? TRUE : FALSE,
					'U_EVENT' =>	($total_events) ? sid(ROOT . 'index.' . PHPEXT . '?p=calendar&amp;mode=event&amp;time=' . mktime(0, 0, 0, date('n', $i), $jour)) : '',
					//'EVENT' =>		($event_exists > 0) ? (($event_exists > 1) ? sprintf(Fsb::$session->lang('calendar_total_events'), $event_exists) : htmlspecialchars($events[$month][$i][0]['lang'])) : '',
				));
				
				if ($total_events)
				{
					if ($total_events <= 3)
					{
						foreach ($events[$jour] AS $data)
						{
							$realname = $name = $data['lang'];
							if ($total_events > 1 && strlen($name) > 20)
							{
								$name = substr($name, 0, 20) . '..';
							}
	
							Fsb::$tpl->set_blocks('day.event', array(
								'IS_BIRTHDAY' =>	($data['type'] == 'birthday') ? TRUE : FALSE,
								'NAME' =>			htmlspecialchars($name),
								'TITLE' =>			htmlspecialchars($realname),
							));
						}
					}
					else
					{
						$is_birthday = TRUE;
						foreach ($events[$jour] AS $data)
						{
							if ($data['type'] != 'birthday')
							{
								$is_birthday = FALSE;
								break;
							}
						}
	
						$name = sprintf(Fsb::$session->lang('calendar_total_events'), $total_events);
						Fsb::$tpl->set_blocks('day.event', array(
							'IS_BIRTHDAY' =>	$is_birthday,
							'NAME' =>			$name,
							'TITLE' =>			$name,
						));
					}
				}
			}
			// MOD : fin


Ouvez tpl/WhiteSummer/files/header.html
Chercher :
		<switch name="ac_mods_calendar & have_auth_calendar_read">- <a href="{U_CALENDAR}" title="{LG_FORUM_MENU_CALENDAR_EXPLAIN}">{LG_FORUM_MENU_CALENDAR}</a>
	<b>&#187;</b>
</div>

Après ajouter :
<!-- Ajout d'un calendrier dans le header -->
<switch name="ac_mods_calendar & have_auth_calendar_read & index">
<div class="round">
	<div id="calendar_link"><a href="{U_CALENDAR}" title="{LG_FORUM_MENU_CALENDAR_EXPLAIN}">{LG_FORUM_MENU_CALENDAR}</a></div>
	<table class="index_calendar">
		<tr>
			<block name="day"><th>{day.JOUR} {day.NB}</th></block>
		</tr>
		<tr>
			<block name="day">
				<if content="$day.FILL">
					<td <if content="$day.CURRENT">class="now"</if>>
						<ul class="event">
							<block name="day.event">
								<li><a href="{day.U_EVENT}" title="{day.event.TITLE}" class="<if content="$day.event.IS_BIRTHDAY">short_calendar_birthday<else>short_calendar_normal</if>">{day.event.NAME}</a></li>
							</block>
						</ul>
					</td>
				<else>
					<td class="empty">&nbsp;</td>
				</if>
			</block>
		</tr>
	</table>
</div>
</switch>


Ouvrir lang/fr/common.php
Chercher :
  'fopen_error' => 'Impossible d\'ouvrir ou de créer le fichier "%s", vérifiez les droits d\'écriture sur ce fichier ou sur le dossier.',

Après ajouter :
  'week_day_mon' => 'Lundi',
  'week_day_tue' => 'Mardi',
  'week_day_wed' => 'Mercredi',
  'week_day_thu' => 'Jeudi',
  'week_day_fri' => 'Vendredi',
  'week_day_sat' => 'Samedi',
  'week_day_sun' => 'Dimanche',


Ouvrir tpl/WhiteSummer/calendar.css
A la fin ajouter :
/* Tableau du calendrier de l'index */
.index_calendar
{
	width: 100%;
	border: 1px solid #AAAAAA;
	border-width: 1px 1px 0px 0px;
	margin-bottom: 6px;
	-moz-border-radius: 4px;
	-webkit-border-radius: 4px;
	background-color:#FFFFFF;
}

/* Nom des jours de la semaine dans le calendrier de l'index */
.index_calendar th
{
	width: 14.3%;
	padding: 3px;
	border: 1px solid #AAAAAA;
	border-width: 0px 0px 1px 1px;
	font-weight: bold;
	background: #EEEEEE;
}

/* Case d'un jour du calendrier */
.index_calendar td
{
	border: 1px solid #AAAAAA;
	border-width: 0px 0px 1px 1px;
	height: 50px;
	vertical-align: top;
	text-align: center;
	padding-bottom: 5px;
}

/* Effet de hover sur les jours selectionnés */
.index_calendar td:hover
{
	background: #CCCCCC;
}

/* Jour actuel */
.now
{
	background: #DDDDDD;
}

/* Gros lien menant vers le calendrier */
#calendar_link
{
	text-align: center;
	font-size: large;
	margin-bottom: 3px;
}
/* Evènements calendrier de l'index*/
ul.event
{
	margin: 0px;
	margin-left: 2px;
	padding: 0px;
	font-size: 10px;
	list-style-type: none;
	text-align: center;
}

/* Evènements de l'index normaux */
ul.event .short_calendar_normal
{
	font-weight: bold;
}

/* Evènements de l'index anniversaires */
ul.event .short_calendar_birthday
{
	color: #70A74F;
	font-weight: bold;
}


Voilà, améliorer si vous voulez, c'est juste le code du forum repris et adapté pour avoir ce système. Si alors vous souhaitez désactivé les events de bas de page, commentez la zone concernée dans le fichier online.html.
Normalement ça donne ça : www.forum.lesdisciplesdebaal.com

PS : il y a un léger défaut d'affichage sous IE que je n'arrive pas à rélger, si quelqu'un à la réponse ...


http://bigtrash.free.fr/creation/Signature%20Tranber.jpg
 
Volcan
Avatar de Eagle
  • Age : 30 ans
  • Messages : 1043
  • Inscrit : 22 Janvier 2005
  Lien vers ce message 06 Mars 2008, 11:38
Plusieurs petites choses:

Tu modifies online.php et header.html, c'est pas très logique, il faudrait que le code php soit mis dans index.php (ce qui correspond au header et au footer) pour plus de logique.

Tu ajoutes des clés de langues, il vaut mieux le faire dans un nouveau fichier lang/fr/mods/lg_nom_du_mod.php

Finalement il me semble que dans la CSS tu as plus d'information que nécessaire, tu pourrais réutiliser ce qui existe pour les ul.event

Sinon pour IE il faut pas que les cellules soient vide, quand il n'y a rien mets un &nbsp; dans la cellule ;)

Un bon module à mon avis ^^


Dans les hauteurs des cieux, par delà les nuages et les sommets enneigés, l'aigle majestueux survole la terre...

Kosmos & Eagle homepage ^^
 
Feu follet
Avatar de Tranber
  • Age : 22 ans
  • Messages : 180
  • Inscrit : 03 Juin 2007
Message édité 2 fois, dernière édition par Tranber, 06 Mars 2008, 12:50     Lien vers ce message 06 Mars 2008, 12:46
En fait pourquoi j'utilise online.php et header.html ? Simplement parce que les requêtes sont déjà existantes dans online.php et que celui-ci s'affiche uniquement sur l'index et le portail. Donc ça permet d'éviter des requêtes supplémentaires et en plus l'affichage ne se fait pas lorsque qu'on lit les posts ou autre. Je pense que le limiter à l'accueil permet de ne pas surcharger en requêtes le forum.

Pour le CSS, je t'avoue que je ne suis pas très calé dedans et j'avais essayé de reprendre exactement les mêmes modules existants et ça n'avais donné ce que je voulais alors je ne me suis pas foulé :)

Pour IE, le problème c'est que le &nbsp; y est déjà et ça ne change pas grand chose ... C'est con j'arrive pas à comprendre, j'ai pourtant repris le code de géno.


http://bigtrash.free.fr/creation/Signature%20Tranber.jpg
 
Chef du projet FSB
Avatar de Genova
  • Age : 22 ans
  • Messages : 14190
  • Inscrit : 16 Septembre 2004
  Lien vers ce message 06 Mars 2008, 16:22
Ta modification fait quoi exactement ^^ ?


Cause Im as free as a bird now, And this bird you can not change. - Freebird - Lynyrd Skynyrd
There's someone in my head but it's not me. - Brain damage - Pink Floyd
I said baby, you know Im gonna leave you. - Babe I'm gonna leave you - Led Zeppelin
Father ? yes son, I want to kill you - The end - The Doors
 
Feu follet
Avatar de Tranber
  • Age : 22 ans
  • Messages : 180
  • Inscrit : 03 Juin 2007
  Lien vers ce message 06 Mars 2008, 17:01
Plutôt que d'avoir en bas de pages les divers éléments du calendrier dans les X prochains jours, mes membres préféraient avoir un petit calendrier en haut de la page.

La modification permet d'afficher une semaine entière (à partir du jour j) avec les évenements, les anniversaires etc. C'est exactement le même principe que ton calendrier, mais sur une semaine et dans le header de l'index et du portail. C'est pour une meilleure lisibilité pour mes membres qui ont besoin de voir si il y a quelque chose d'organisé sans aller dans le calendrier systématiquement (et j'avoue que c'est super pratique).


http://bigtrash.free.fr/creation/Signature%20Tranber.jpg
 
Volcan
Avatar de Eagle
  • Age : 30 ans
  • Messages : 1043
  • Inscrit : 22 Janvier 2005
  Lien vers ce message 07 Mars 2008, 16:53
Pour compléter le module, il faudrait proposer deux options d'affichage: en haut (comme tu l'as fait) ou en bas, juste avant les statistiques. Et il faudrait aussi ajouter le petit +/- qui va bien pour cacher/afficher le bloc. Et finalement, histoire d'en ajouter une couche, une option pour afficher 1 ou 2 (voir 3 ? ) semaine(s).


Dans les hauteurs des cieux, par delà les nuages et les sommets enneigés, l'aigle majestueux survole la terre...

Kosmos & Eagle homepage ^^
 
Feu follet
Avatar de Tranber
  • Age : 22 ans
  • Messages : 180
  • Inscrit : 03 Juin 2007
Message édité 1 fois, dernière édition par Tranber, 08 Mars 2008, 10:56     Lien vers ce message 08 Mars 2008, 10:56
Alors j'ai pensé déjà au petit bouton pour cacher le calendrier, mais je n'ai pas encore eu le temps de m'y pencher dessus. Par contre je n'ai pas proposé d'option d'affichage car les gens préféraient ce système.
Ensuite, l'affichage pour plusieurs semaines pourquoi pas mais risque de devenir un peu lourd du coup, le calendrier étant vraiment fait pour voir dans le temps et ce mod est fait pour une vision courte dans le temps. Mais après c'est pas trop compliqué à adapter, il suffit de changer les paramètres de timestamp et le CSS pour adpater le tout.


http://bigtrash.free.fr/creation/Signature%20Tranber.jpg
 
Répondre


.