"Defekte" Links in IPS finden und löschen

Hallo,

ich wollte heute alle Links in IPS finden die auf ein gelöschtes Objekt verweisen.
Da ich auf die Schnelle nichts gefunden habe (wahrscheinlich kennt Bruno einen passenden Thread :stuck_out_tongue: ) habe ich ein kleines Skript geschrieben.

<?

$KaputteLinks = 'skript'; // "löschen", "skript" oder leerlassen
$Zeilenumbruch = chr(13) . chr(10);
$Text = '';

if($KaputteLinks == 'skript')
	$Text = '<?php ' . $Zeilenumbruch . $Zeilenumbruch;

$Gesamt = IPS_GetLinkList();
foreach($Gesamt as $ID)
{
	$Detail = IPS_GetLink($ID);
	$Objekt = IPS_GetObject($ID);
	$ObjektName = $Objekt['ObjectName'];
	$LinkChildID = $Detail['LinkChildID'];
	
	if(!IPS_ObjectExists($LinkChildID))
	{
		if($KaputteLinks == 'skript')
		{
			$Text .= 'IPS_DeleteLink(' . $ID . '); // ' . $ObjektName . $Zeilenumbruch;
		} elseif($KaputteLinks == 'löschen')
		{
		   echo 'Link (ID: ' . $ID . ') wird entfernt.' . $Zeilenumbruch;
		   IPS_DeleteLink($ID);
		} else
		{
			echo 'Link mit ObjektID ' . $ID . ' verweist auf die nicht vorhandene ObjektID ' . $LinkChildID . ' und sollte gelöscht werden.' . chr(13) . chr(10);
		}
	}
}

if($KaputteLinks == 'skript')
{
	$Text .= $Zeilenumbruch . '?>' . $Zeilenumbruch;
	echo $Text;
}

?>

Per Standard ist die Variable „$KaputteLinks“ auf „skript“ eingestellt, dass bedeutet, es generiert ein PHP Skript was die Links löscht (dann kann man es selber verifizieren, bevor das Skript einfach drauf loslöscht). Wichtig ist, den Haken bei „HTML filtern“ im IPS Ausgabefenster entfernen, sonst sieht man den generierten Code nicht ;).
Bildschirmfoto 2013-03-29 um 18.06.37.png

Alternativ kann man auch „löschen“ angeben, dann werden alle defekten Links direkt gelöscht. Alle anderen Werte geben einfach die Links aus, die auf nicht vorhandene Objekte verweisen.

Ergebnis mit „skript“:
Bildschirmfoto 2013-03-29 um 18.06.31.png

Ergebnis mit „löschen“:
Bildschirmfoto 2013-03-29 um 18.07.05.png

Ergebnis mit irgendeinen anderem Variablenwert:

Vielleichts hilft es jemandem weiter.

Gruß und schöne Osterfeiertage.
Thorsten

Ähm:
Unter „Ansicht“ auf die Listenansicht umschalten, und dann nach der zweiten Spalte sortieren.

Nun hast alle „roten Objekte“ praktisch untereinander.

gruß
bb

Autsch! Das wusste ich nicht - habe die Listenansicht noch nie benutzt :eek:.
Danke für die Info.

Aber ich kann meine „toten“ Links per Ereignis regelmäßg automatisch löschen lassen (irgendeinen Nutzen musste ich mir jetzt aus den Fingern saugen :smiley: )

Gruß
Thorsten

irgendeinen Nutzen musste ich mir jetzt aus den Fingern saugen

Erklärs mit WAF;) …weshalb du nur diesen Karfreitag dich damit auseinander gesetzt hast…

per Ereignis regelmäßg automatisch löschen lassen

Ab sofort macht das IPS automatisch! :smiley:

Verrate ich aber nicht, die Mühe für Dein Skript soll ja belohnt werden … :wink: :smiley: