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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.