Hallo
Wollte euch nur mein Skript zur Mp3ordner Anzeige und Auswahl im Webfront und im Edip vorstellen. Vielleicht kanns ja einer gebrauchen.
Man erstelle ein Skript zum einlesen des MP3Ordners. Hier wird als erstes das VariablenProfil „Musikordner“ gelöscht(macht beim erstenmal eine Warnung, da es das Profil ja noch nicht gibt), anschliessend gleich wieder erstellt und der Integervarible Ordner zugeordnet.
$profil="Musikordner";
IPS_DeleteVariableProfile($profil);
IPS_CreateVariableProfile($profil,1);
IPS_SetVariableCustomProfile(35751 /*[Webfront Dummy\Dummy Audio\Ordner]*/,$profil);
Jetzt wird das Verzeichniss in dem die Mp3ordner drin sind mit scandir in ein Array ausgelesen und dann ab Eintrag 2 (die ersten beiden sind „.“ und „…“ überprüft ob der Eintrag ein Verzeichniss ist.
Wenn ja dann wird eine Association im Musikordner Profil angelegt
und zusätzlich in einem Array abgespeichert.
Das Array ist einfach dazu da das keinen Lücke in der Edip Ansicht entsteht wegen den „.“ und „…“ „Verzeichnissen“ oder wenn noch andere Dateien in dem Ordner sind. Wer nur die Webfrontansicht benötigt könnte es auch weglassen, sollte dann aber das $j durch $i ersetzen (IPS_SetVariableProfileAssociation($ordner,$i,$files[$i],"")
Anschliessend wird das Array abgespeichert.
Kleine einschränkung bei IPS 2.1 gibt es den befehl WFC_Reload noch nicht, also muss man das webfront wenn es gerade offen ist von Hand neuladen.
$dir = 'D:/mp3/';
$files = scandir($dir);
$j=0;
for ($i=2;$i < count($files);$i++)
if (is_dir($dir.$files[$i]))
{
IPS_SetVariableProfileAssociation($profil,$j,$files[$i],"");
$temp_array[$j]=$i;
$j++;
}
SetValue(36456 /*[Diverse\Audio\Mp3ordner]*/, wddx_serialize_value($temp_array) );
WFC_Reload(42823 /*[WebFront Configurator]*/ /*[WebInterface WebFront]*/); //nur ab IPS 2.2
Das war das einlese Skript, das man immer ausführen sollte wenn sich was im Mp3ordner ändert. Sonst spielt IPS eventuell was anderes als gewünscht.
Das ordnerabspielen Skript ist einfach das Ordner Rekursiv in MediaPlayer Playlist laden Skript von Paresy mit dem Zusatz für den entsprechenden Ordner.
<?
$dir = 'D:/mp3/';
$files = scandir($dir);
$Mp3ordner = GetValue(36456 /*[Diverse\Audio\Mp3ordner]*/);
$temp_array = wddx_deserialize($Mp3ordner);
WAC_PlayDir(19480 /*[Diverse\Audio\Media Player Musik]*/,$dir.$files[$temp_array[$ordn]]);
function WAC_PlayDir($id, $dir)
{
function ReadRecursive($dir, $subdir = "") {
$result = Array();
$files = scandir($dir."/".$subdir);
foreach($files as $file)
{
if(($file != ".") && ($file != "..")){
if(is_dir($dir."/".$subdir."/".$file)) {
$res = ReadRecursive($dir, $subdir."/".$file);
$result = array_merge($res, $result);
} else {
$filedir = $subdir."/".$file;
$filedir = substr($filedir, 1, strlen($filedir));
$result[] = $filedir;
}
}
}
return $result;
}
$allowed = Array("mp3", "wma");
$files = ReadRecursive($dir);
WAC_ClearPlaylist($id);
foreach($files as $file)
{
$ext = pathinfo($dir."/".$file, PATHINFO_EXTENSION);
if(in_array(strtolower($ext), $allowed))
{
WAC_AddFile($id, $dir."/".$file);
}
}
WAC_Play($id);
}
?>
Zum abspielen der Ordner rufe ich das Skript ordnerabspielen auf und übergebe die Variable ordn mit der Nummer des Ordners die ich hören will
IPS_RunScriptEx($idordnerabspielen,Array("ordn" => 4));
.
Um aus dem Webfront heraus einen Ordner abzuspielen eine neues Skript anlegen und dahinein kommt das hier:
$idordnerabspielen = 55583 /*[Media Player\Ordner abspielen]*/;
setvalue(36050 /*[Ordner anzeige]*/,$IPS_VALUE); //damit man im Webfront auch sieht was gerade gedrückt wurde
IPS_RunScriptWaitEx($idordnerabspielen,Array("ordn" => $IPS_VALUE));
Dann nur noch die Variable „Ordner anzeige“ bearbeiten und unter Eigene Aktion das eben erstellte Skript angeben.
So wurde doch länger als ich gedacht habe und ich komme nicht mehr dazu meine Skripte fürs edip vorzustellen(wird aber nachgeholt). Hier nur mal die Vorschau
Gruß Jannis