Skript zum Erstellen von Links

Hallo zusammen,

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
		}
   }
}

?>

Das gefällt mir sehr. Muß ich heute mal direkt testen.

Danke

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 :slight_smile:

Ich persönlich finde das hier: http://www.ip-symcon.de/forum/f52/skript-ausblenden-links-boolean-16087/ mindestens genauso interessant. Und als perfekte Kombination dazu…

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.

Sehr nützlich - besonders beim kopieren von Webfrontinhalten. Danke!

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
		}
   }
}

?>