オフィスの住所のプレーン テキスト エリア エントリ フィールドを含むデータ モデルを作成しました。nl2br($OfficeAddr)
関連する Silverstripe テンプレートでデータを印刷するときと同じことをしたいと思います。私が知る限り、彼らのテンプレート システムはそのような機能をサポートしていません。
何か不足していますか?推奨される回避策はありますか?
オフィスの住所のプレーン テキスト エリア エントリ フィールドを含むデータ モデルを作成しました。nl2br($OfficeAddr)
関連する Silverstripe テンプレートでデータを印刷するときと同じことをしたいと思います。私が知る限り、彼らのテンプレート システムはそのような機能をサポートしていません。
何か不足していますか?推奨される回避策はありますか?
Silverstripe 3 では、(クラスをオーバーライドするのではなく)DataExtension
クラスを作成することでこれを実現するのが最善です。(注: これは 2.4.x でも可能ですが、コードはまったく異なります。)
TextFormatter
を拡張するという新しいクラスを作成しますExtension
。
class TextFormatter extends Extension {
public function NL2BR() {
return nl2br($this->owner->value);
}
}
Text
クラスを新しいクラスで拡張する必要があることを構成で指定します。これは、_config.php
ファイルまたは (できれば) YAML ファイルで行うことができます。
まだ持っていない場合はmysite/_config/extensions.yml
、次の内容で新しいファイルを作成します (または、これを既存のファイルに追加できます)。
Text:
extensions:
['TextFormatter']
これは、すべてのオブジェクトで新しい関数を使用できるようにする「クラスText
でクラスを拡張する」ことを示しているだけです。TextFormatter
NL2BR
Text
これで、テンプレートで呼び出すだけ$OfficeAddr.NL2BR
で、出力が出力される前に関数を介して実行されます。
以前の回答が想定していたのText
ではなく、モデルがフィールドタイプとして使用していると想定していることに注意してください。HTMLText
使用している場合は、必要に応じてファイルをHTMLText
変更することで、代わりにそのクラスを拡張できます。extensions.yml
重要:このソリューションはSilverStripe2.Xに適用できます。SilverStripe3.0を使用している場合-このページのSS3.0の回答を参照してください。
モデルにゲッターを追加するだけです。
public function FormattedAddress {
return nl2br($this->OfficeAddr);
}
次に、テンプレートでそれを呼び出します。
<p>$FormattedAddress</p>
または-MVCに準拠したい場合、より複雑なソリューションは...
HTMLTextフィールドタイプを使用したとすると、HTMLTextクラスを拡張できます。
--Extended_HTMLText.php(または同様のもの)というファイルを作成します-以下を追加して、コードディレクトリに保存します。
class Extended_HTMLText extends HTMLText {
function NL2BR() {
return nl2br($this->value);
}
}
_config.phpファイルに以下を追加します。
Object::useCustomClass('HTMLText', 'Extended_HTMLText', true);
次に、次のようにテンプレートで呼び出すことができます。
<p>$OfficeAddr.NL2BR</p>
これにより、少なくともビューロジックがモデルから削除されます;)
これはSilverStripe 3 (2013 年 5 月以降) で修正されており、これらの回答はすべて以前のものです。今後は、Text
とVarchar
データベースのすべてのフィールドが を使用して自動的に変換されますnl2br()
。
だから...あなたが私のように愚かで、ここにたどり着いた場合は、実際にはHTMLText
フィールドを出力しているが、プレーンテキストを使用していると思っ->getCMSFields()
ていた可能性があることに注意してください( TextareaField
.
うまくいけば、これは将来の訪問者に役立ちます!