Ich habe ein Problem mit SilverStripe, bei dem externe URLs als relative Links behandelt werden.Silverstripe Rendern von externen URLs als relative Links
Ich habe ein Datenobjekt:
class Artist extends DataObject {
private static $db = array(
'Title' => 'Varchar(255)',
'Content' => 'HTMLText',
'Website' => 'Varchar(255)',
);
}
Künstler-Websites über <a href="$Website" target="_blank">
gerendert werden. Das Problem ist, dass die URLs an die Basis URL der Website angehängt werden, so dass wir am Ende mit etwas wie:
<a href="mysite.com/www.artistsite.com" target="_blank">
anstelle der gewünschten:
<a href="www.artistsite.com" target="_blank">
jedoch Wenn $ Website das Protokoll (http oder https) enthält, funktioniert die Verbindung wie erwartet. Also, wenn $ Webseite ist http://www.artistsite.com dann erhalten wir:
<a href="http://www.artistsite.com" target="_blank">
Diese Seite enthält Hunderte und schließlich Tausende von Client gepflegt Künstler Aufzeichnungen. Im Idealfall kann der Client URLs einfügen, ohne sich darum kümmern zu müssen, dass HTTP oder HTTPS an diese angehängt werden.
Wer hat irgendwelche Ideen? Es ist das gleiche Problem wie auf der SilverStripe forums beschrieben, aber keine Lösung wurde veröffentlicht.
Diese Seite auf SilverStripe 3.6.
Es gibt Module zur Behandlung dieses Problems, z https://github.com/restruct/silverstripe-namedlinkfield für SS3.0 + und https://github.com/burnbright/silverstripe-externalurfield für SS4. Sie müssen den Inhalt der Website grundsätzlich validieren und vor dem Speichern ändern. – wmk
yeah, entweder 'onBeforeWrite', um sicherzustellen, dass das Protokoll vorhanden ist, oder ein benutzerdefinierter Getter, der das Protokoll hinzufügt, wenn es nicht existiert ... ersteres wäre die leistungsstärkere Option, aber es ändert den Text im Textfeld . – bummzack