Allora, sto sviluppando un plugin semplice per suonare mp3 singoli o playlist.
Il plugin funziona semplicemente inserendo nel testo dell'articolo
{mplay}percorso/al/file.mp3{/mplay}
oppure per suonare un intera cartella
{mplist}percorso/cartella{/mplist}
La cosa che non capisco è questa:
Codice PHP:
defined('_JEXEC') or die('Restricted access');
jimport('joomla.plugin.plugin');
class plgContentSfmp3player extends JPlugin
{
function onPrepareContent(&$article,&$params)
{
$this->_replace_player($article);
return true;
}
function _replace_player($article)
{
$found = 0;
$ereg = "#{mplay}(.*?){/mplay}#s";
$eregplaylist = "#{mplist}(.*?){/mplist}#s";
if(preg_match_all($ereg,$article->text,$matches,PREG_SET_ORDER))
{
foreach($matches as $match)
{
// [cut]
// bla bla bla codice di pre-elaborazione
$mp3_file = $match[1];
$pre_code = $this->plgContentSfmp3player_renderPlayer($mp3_file,$player_titles,false,$remote);
$flag_pos = JString::strpos($article->text,$match[0]);
$article->text = JString::substr_replace($article->text,$pre_code,$flag_pos,JString::strlen($match[0]));
}
$found++;
}
if(preg_match_all($eregplaylist ,$article->text,$matches,PREG_SET_ORDER))
{
foreach($matches as $match)
{
// [cut]
// bla bla lettura cartella e recupero file e titoli
$pre_code = $this->plgContentSfmp3player_renderPlayer($mp3_file,$player_titles,true);
$flag_pos = JString::strpos($article->text,$match[0]);
$article->text = JString::substr_replace($article->text,$pre_code,$flag_pos,JString::strlen($match[0]));
}
$found++;
}
return ($found >0);
}
function plgContentSfmp3player_renderPlayer($mp3_list, $mp3_titles, $playlistwidth=false,$remote=false)
{
// bla bla bla
}
}
Ora vorrei capire come mai se passa dal primo preg_match_all ($ereg) quando scrivo {mplay}....etc{/mplay} e inserisce tranquillamente l'object con i parametri, nel secondo caso proprio non entra nemmeno nel blocco IF se scrivo {mplist}....etc{/mplist}.
Ho provato a scrivere i vari tag {} insieme nell'articolo, e anche se sono 150 tag singoli me li esegue, mentre {mplist} proprio non ci si rivince
E' praticamente uguale il regexp dei 2 casi...infatti se faccio un file php a parte e testo il preg_match sul testo ci entra, se lo eseguo da dentro il plugin niente..forse c'è qualche dinamica di richiamo del plugin o buffering a me oscuro?