Afficher les séances de cinéma du jour

Petit nouveau ! | 3 Messages

13 juil. 2010, 19:07

Bonjour,

Je fais un site pour une salle de cinéma et je voudrais afficher les séances programmées à la date d'aujourd'hui et les lister dans l'ordre de leurs horaires : soit 1 champ titre et 1 champ date.
Chaque film est un article qui contient un champ date pour indiquer les jours et horaires des séances. On peut ajouter plusieurs valeurs à ce champ s'il y a plusieurs séances du même film. En général, un film passe une à deux fois par jour et chaque jour à des horaires différents.
Le problème est que le module affiche bien le titre du film le bon jour mais affiche toujours la même valeur du champ date (la dernière saisie en général).
Ex : si un film XXX passe hier, aujourd'hui et demain, le module qui affiche les films du jour va bien afficher le film XXX mais l'horaire mentionné sera celui de demain.
Du coup, le classement des films censé être chronologique ne se fait pas.

Extrait de mon fichier XML pour récupérer le champ date :
(J'utilise Joomla, le CCK FlexiContent et le module AidaNews.)

Code : Tout sélectionner

<param name="datefieldid" type="flexisql" default="2" label="FLEXIDATEFIELD" description="FLEXIDATEFIELDDESC" query="SELECT id, label FROM #__flexicontent_fields WHERE field_type = 'date' OR field_type = 'created' OR field_type = 'modified'" key_field="id" value_field="label" /> <param name="order" type="list" default="0" label="NEWSORDERING" description="NEWSORDERINGDESC"> <option value="0">FILMS DU JOUR</option> </param>

Ci-après le code de mon fichier default.php, pour faciliter votre lecture, j'ai supprimé ce qui ne concernait pas le champ date :
<?php
$date_field_id = $params->get('datefieldid');
$date =& JFactory::getDate();
$dtoutput = $params->get('dateoutput');
if (empty($dtoutput)) {$dtoutput = "%d %B %Y, %H.%M";}
$nullDate = $db->getNullDate();
$checkdate = strrpos ($getthis, '[date]');

//Set these to nul to avoid errors
$ddate = "";
$condition_avenir = "";
$flexidateordering = "";


//Sélectionner uniquement les films qui passent aujourd'hui et les ordonner par horaires de passage
	$hier = strftime('%Y-%m-%d', strtotime('yesterday'));
	$demain = strftime('%Y-%m-%d', strtotime('tomorrow'));
	if ($order == '0') {
		$flexidateordering = "\n LEFT JOIN #__flexicontent_fields_item_relations AS fd ON a.id = fd.item_id";
		$condition_aujourdhui = "\n AND fd.field_id = " . $date_field_id;
		$condition_aujourdhui .= "\n AND STR_TO_DATE(fd.value,'%Y-%m-%d') > '$hier' " ;
		$condition_aujourdhui .= "\n AND STR_TO_DATE(fd.value,'%Y-%m-%d') < '$demain' " ;
		$ordering = " STR_TO_DATE(fd.value,'%Y-%m-%d %H:%M:%S') ASC";
		} 
	
//Content Items
		$query = "SELECT a.*, flexi.catid, cc.alias AS catalias "
		. "\n FROM #__content AS a"
		. "\n INNER JOIN #__categories AS cc ON cc.id = a.catid"
		. "\n INNER JOIN #__sections AS s ON s.id = a.sectionid"
		. "\n LEFT JOIN #__flexicontent_cats_item_relations AS flexi ON a.id = flexi.itemid"
		. "\n LEFT JOIN #__content_rating AS r ON r.content_id = a.id"
		. $flexidateordering
		. $condition_aujourdhui      
		. "\n ORDER BY $ordering";
	
	$db->setQuery( $query, 0, $count );
	$rows = $db->loadObjectList();
	

foreach ( $rows as $row )
{
		//Obtenir la date créée avec un champ FLEXIcontent
		if ($checkdate !== false && $params->get('flexi_date') == '1') {
		$query = 'SELECT value FROM #__flexicontent_fields_item_relations WHERE item_id = ' . $row->id . ' AND field_id = ' . $date_field_id;
								$db->setQuery($query);
								$date = $db->loadResult();
		}
		?>
		
		<div>
			<?php 
			if ($checkdate !== false) { $ddate = OutputDate($params->get('uselangfile'); }
		
			$patterns = array ('/\[date\]/');
			$replace = array ( $ddate);
			?>
		</div>
<?php 
} 
?>
Voilà, s'il y a des experts qui ont envie de chercher l'erreur, qui doit sans doute être assez grosse, je suis preneuse.
Merci beaucoup à ceux qui m'auront lu jusqu'au bout.