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.