外部リンクを相対リンクとして扱うSilverStripeに問題があります。Silverstripe外部リンクを相対リンクとしてレンダリング
私はのDataObjectを持っている:
class Artist extends DataObject {
private static $db = array(
'Title' => 'Varchar(255)',
'Content' => 'HTMLText',
'Website' => 'Varchar(255)',
);
}
アーティストのウェブサイトは、<a href="$Website" target="_blank">
経由でレンダリングされます。問題は、URLがウェブサイトのベースURLに追加されていることであるので、我々のようなもので終わる:
<a href="mysite.com/www.artistsite.com" target="_blank">
:
<a href="www.artistsite.com" target="_blank">
しかし、 $ Websiteにプロトコル(httpまたはhttps)が含まれている場合、リンクは期待通りに機能します。 $ウェブサイトhttp://www.artistsite.comであれば、我々が得る:
<a href="http://www.artistsite.com" target="_blank">
このサイトは、クライアント・維持アーティストのレコードの最終的に何百、何千とが、含まれています。理想的には、クライアントはhttpまたはhttpsをそれぞれに追加することを心配することなく、URLに貼り付けることができます。
誰もが考えている? SilverStripe forumsに記載されているのと同じ問題ですが、解決策が投稿されていません。
このサイトはSilverStripe 3.6です。
この問題を処理するためのモジュールがあります。 SS3.0の場合はhttps://github.com/restruct/silverstripe-namedlinkfield、SS4の場合はhttps://github.com/burnbright/silverstripe-externalurlfield。基本的に 'Website'コンテンツを検証し、保存する前に変更する必要があります。 – wmk
ええ、プロトコルが存在することを確認するための 'onBeforeWrite'か、存在しない場合にプロトコルを追加するカスタムゲッター...前者はパフォーマンス上の方が良いオプションですが、テキストフィールドのテキストを変更します。 – bummzack