seit der neuen WebFront Version muss man ja viel mit Links arbeiten. Da das manuelle Erstellen von Links viel Zeit kostet, hab ich mir ein Skript geschrieben. Es erstellt für alle Objekte unter dem angegebenen Quellknoten einen Link und hängt diesen unter den angegebenen Zielknoten (z.B. eine Webfrontkategorie). Dabei kann man angeben, welche Objekttypen berücksichtigt werden sollen (z.B. nur Variablen).
Viel Spaß damit!
<?
/*
Skript zum Links erstellen
Autor: Smokey
Datum: 13.11.2011
Das Skript erstellt für alle Objekte unter dem angegebenen Quellknoten einen Link und hängt diesen
unter den angegebenen Zielknoten (z.B. eine Webfrontkategorie). Dabei kann man angeben, welche Objekttypen
berücksichtigt werden sollen (z.B. nur Variablen).
*/
$Quellknoten = 30116; /* Welcher Knoten soll druchsucht werden? */
$Zielknoten = 58565; /* Wohin sollen die Links erstellt werden? */
// Welche Objekttypen sollen verlinkt werden?
//$SelectedObjectTypes[] = 0; /* Kategorie */
//$SelectedObjectTypes[] = 1; /* Instanz */
$SelectedObjectTypes[] = 2; /* Variable */
//$SelectedObjectTypes[] = 3; /* Skript */
//$SelectedObjectTypes[] = 4; /* Ereignis */
//$SelectedObjectTypes[] = 5; /* Media */
//$SelectedObjectTypes[] = 6; /* Link */
//ab hier nichts mehr ändern!
$IPSObjects = IPS_GetObjectList ();
foreach ($IPSObjects as $IPSObjectID) {
if (IPS_IsChild($IPSObjectID, $Quellknoten, true)) {
$IPSObject = IPS_GetObject($IPSObjectID);
if (in_array($IPSObject['ObjectType'],$SelectedObjectTypes,true)){
$LinkID = IPS_CreateLink(); //Link anlegen
IPS_SetName($LinkID, IPS_GetName(IPS_GetParent($IPSObjectID)).': '.$IPSObject['ObjectName']); //Link benennen
IPS_SetLinkChildID($LinkID, $IPSObjectID); //Link verknüpfen
IPS_SetParent($LinkID, $Zielknoten); //Link unter Zielknoten hängen
}
}
}
?>
Mir auch. Ich glaube ich lasse mir damit einfach einmal täglich eine komplette Linkliste erstellen und verschiebe dann nur noch entsprechend grübel Ja das kommt gut
Genau; so ähnlich nutz ich das auch; erstmal für alles in einem Raum einen Link generieren lassen, dann benötigte Links in die Webfrontstruktur einsortieren und den Rest grad wieder löschen.
Jedenfalls schön dass es noch jemand gebrauchen kann.
Ist mir genau dazu doch glatt noch ein Fehler aufgefallen: Wenn das Quellobjekt ein Link ist, dann geht es nämlich nicht. Das Skript würde versuchen einen Link auf einen Link zu erstellen. Ich hab das Skript daher nochmal so angepasst:
Wenn das Quellobjekt kein Link ist, wird ein Link erstellt
Wenn das Quellobjekt ein Link ist, wird ein Link auf das Originalobjekt erstellt (und nicht auf den Link)
Somit kann man jetzt auch Webfront Inhalte kopieren, welche aus Links bestehen.
<?
/*
Skript zum Links erstellen
Autor: Smokey
Datum: 26.11.2011
Das Skript erstellt für alle Objekte unter dem angegebenen Quellknoten einen Link und hängt diesen
unter den angegebenen Zielknoten (z.B. eine Webfrontkategorie). Dabei kann man angeben, welche Objekttypen
berücksichtigt werden sollen (z.B. nur Variablen).
*/
$Quellknoten = 43522 /*[HARDWARE\ERDGESCHOSS\Flur\EG Flur Licht Flur\Licht 1 - Lampe Flur]*/; /* Welcher Knoten soll druchsucht werden? */
$Zielknoten = 35060 /*[WebFronts\WebFront Neu\Skripte]*/; /* Wohin sollen die Links erstellt werden? */
// Welche Objekttypen sollen verlinkt werden?
//$SelectedObjectTypes[] = 0; /* Kategorie */
//$SelectedObjectTypes[] = 1; /* Instanz */
//$SelectedObjectTypes[] = 2; /* Variable */
//$SelectedObjectTypes[] = 3; /* Skript */
//$SelectedObjectTypes[] = 4; /* Ereignis */
//$SelectedObjectTypes[] = 5; /* Media */
$SelectedObjectTypes[] = 6; /* Link */
//ab hier nichts mehr ändern!
$IPSObjects = IPS_GetObjectList ();
foreach ($IPSObjects as $IPSObjectID) {
if (IPS_IsChild($IPSObjectID, $Quellknoten, true)) {
$IPSObject = IPS_GetObject($IPSObjectID);
if (in_array($IPSObject['ObjectType'],$SelectedObjectTypes,true)){
if ($IPSObject['ObjectType']==6) {
$IPSLinkedObject = IPS_GetLink($IPSObjectID);
$LinkSource = $IPSLinkedObject['LinkChildID'];
}
else {
$LinkSource = $IPSObjectID;
}
$LinkID = IPS_CreateLink(); //Link anlegen
IPS_SetName($LinkID, IPS_GetName(IPS_GetParent($IPSObjectID)).': '.$IPSObject['ObjectName']); //Link benennen
IPS_SetLinkChildID($LinkID, $LinkSource); //Link verknüpfen
IPS_SetParent($LinkID, $Zielknoten); //Link unter Zielknoten hängen
}
}
}
?>