Module joomla 1.5 now listening

Contenu du snippet

Module Joomla 1.5 pour afficher le titre (status) courant d'un flux icecast / shoutcast.

Je me suis basé sur le code de ce forum http://icecast.imux.net/viewtopic.php?t=7550&sid=2a282fa75ac5bfc77e9bb770b7225b6f pour créer un module sous Joomla. Ce plugin affiche le titre du flux et le rafraîchit toutes les x secondes (10 par défaut) par jQuery.

Ce code peut aussi être un bon exemple pour accéder à des paramètres de module sans passer par la page index.php de joomla. Ici quand jQuery accède directement à la page, on charge manuellement une partie du framework Joomla pour accéder aux paramètres nécessaires.

Source / Exemple :


<?php
// If the script run inside Joomla
if(defined('_JEXEC')) {

	// Grab the JDocument
	$document = JFactory::getDocument();

	// Add the needed script
	$document->addScript(JURI::root().'modules/mod_nowlistening/jquery-1.7.2.min.js');
	$document->addScript(JURI::root().'modules/mod_nowlistening/nl.js');

	// Build some javascript and add it
	$js_code  = 'updateNowPlaying("'.JURI::root().'");';
	$js_code .= 'setInterval( "updateNowPlaying(\"'.JURI::root().'\")", '.$params->get('rtime').');';
	$document->addScriptDeclaration($js_code);

	// Add the needed css
	$document->addStyleSheet(JURI::root().'modules/mod_nowlistening/nl.css');

	// Now Playing Div
	echo '<span class="nl1">'.$params->get('btext').'<span id="nowPlaying" class="nl2">';
	echo $params->get('nojavascript').'</span>'.$params->get('atext').'</span>';

// Or if the script if called directly trough AJAX
}else{

	// Inspired from http://icecast.imux.net/viewtopic.php?t=7550&sid=2a282fa75ac5bfc77e9bb770b7225b6f
	/* ----------- Server configuration ---------- */

	// Get Joomla! framework
	define( '_JEXEC', 1 );
	define( '_VALID_MOS', 1 );
	define( 'JPATH_BASE', realpath(dirname(__FILE__).'/../..'));
	define( 'DS', DIRECTORY_SEPARATOR );
	require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
	require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );
	$mainframe =& JFactory::getApplication('site');
	$mainframe->initialise();
	$user =& JFactory::getUser();
	$session =& JFactory::getSession();

	// Get this module
	jimport( 'joomla.application.module.helper' );
	$module = &JModuleHelper::getModule('nowlistening');
	$params = new JParameter($module->params);

	// Get the option
	$address = $params->get('address');
	$port = $params->get('port');
	$server = $params->get('type'); // 0 = icecast, 1 = shoutcast
	$offline = $params->get('offline');
	$notitle = $params->get('nosongtitle');

	if ($server == 0){
		$pos = 5;
		$http = "GET /status2.xsl HTTP/1.0\r\nUser-Agent: Mozilla\r\n\r\n";
	}else if ($server == 1){
		$pos = 6;
		$http = "GET /7.html HTTP/1.0\r\nUser-Agent: Mozilla\r\n\r\n";
	}

	/* ------------------------------------------- */ 
	$fp = @fsockopen($address,$port,$errno,$errstr,1); 
	if(!$fp){
		// Displays when server is offline
		echo $offline;
	}else{ 
		fputs($fp, $http); 
		while (!feof($fp)){ 
			$info = fgets($fp); 
		}
		if($server == 0){
		 	$info = str_replace('<pre>', "", $info); 
		 	$info = str_replace('</pre>', "", $info); 
		}else{
		 	$info = str_replace('</body></html>', "", $info); 
		}
		$split = explode(',', $info);
		if (empty($split[$pos])) { 
			// Displays when sever is online but no song title
			echo $notitle;
		}else{ 
			$title = str_replace('\'', '`', $split[$pos]); 
			$title = str_replace(',', ' ', $title); 
			echo $title; // Diaplays song 
		} 
	}
	fclose($fp);
} ?>

Conclusion :


Ça fait 10 min que j'essaye d'ajouter le zip avec le reste des fichiers (xml, js, css, etc) mais rien à faire j'ai une erreur sur le site. Donc si quelqu'un est intéressé par le module qui s'installe directement par le backend de Joomla, il peut me contacter par MP.

A voir également