Hallo zusammen,
ich hab im Webfront viele Boolean-Links für Servicemeldungen (Erreichbarkeit von Aktoren, Batteriestatus, etc.). Ich will diese Links aber nur sehen wenn die zugehörige Variable = true ist. (mich interessieren ja nur die Problemfälle). Dazu habe ich mir ein Skript geschrieben.
- Das Skript legt automatisch beim Aufruf für jede verlinkte Variable ein Ereignis an (somit wird das Skript bei Variablenänderung aufgerufen).
- Außerdem werden alle Links auf Variablen die den Wert FALSE haben auf unsichtbar gesetzt.
Anleitung
Skript 1: einmal anlegen (es ist egal wo das Skript liegt)
<?
$ScriptID = $OriginalScript;
$Objects = IPS_GetChildrenIDs(IPS_GetParent($ScriptID));
foreach ($Objects as $CurrentObjectID) {
$Object = IPS_GetObject($CurrentObjectID);
if ($Object['ObjectType'] == 6){
/*Link sichtbar oder unsichtbar machen */
$Link = IPS_GetLink($CurrentObjectID);
$LinkValue = GetValue($Link['LinkChildID']);
if ($LinkValue==true){
if ($Object['ObjectIsHidden'] == true){
IPS_SetHidden($CurrentObjectID, false);
}
} else {
if ($Object['ObjectIsHidden'] == false){
IPS_SetHidden($CurrentObjectID, true);
}
}
/*Event anlegen falls noch nicht vorhanden*/
$EventName = "LinkID: ".$CurrentObjectID." ObjectID: ".$Link['LinkChildID'];
$EventID = @IPS_GetEventIDByName($EventName, $ScriptID);
if ($EventID === false){
$EventID = IPS_CreateEvent(0);
IPS_SetName($EventID, $EventName);
IPS_SetEventTrigger($EventID, 1, $Link['LinkChildID']);
IPS_SetParent($EventID, $ScriptID);
IPS_SetEventActive($EventID, true);
}
}
}
?>
Skript 2: in jede Kategorie anlegen, deren Links automatisch aus- und eingeblendet werden sollen. Das Skript selbst ausblenden. Skript einmal ausführen. Am Anfang die Skript-ID von Skript 1 anpassen!!!
<?
IPS_RunScriptEx(10638 /*[WebFronts\LinksAusblenden]*/, Array("OriginalScript" => $IPS_SELF));
?>
Das Skript 2 muss in der Kategorie der Links liegen: