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 ) 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 ;).
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“:
Ergebnis mit „löschen“:
Ergebnis mit irgendeinen anderem Variablenwert:
Vielleichts hilft es jemandem weiter.
Gruß und schöne Osterfeiertage.
Thorsten