4

オフィスの住所のプレーン テキスト エリア エントリ フィールドを含むデータ モデルを作成しました。nl2br($OfficeAddr)関連する Silverstripe テンプレートでデータを印刷するときと同じことをしたいと思います。私が知る限り、彼らのテンプレート システムはそのような機能をサポートしていません。

何か不足していますか?推奨される回避策はありますか?

4

3 に答える 3

11

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でクラスを拡張する」ことを示しているだけです。TextFormatterNL2BRText

これで、テンプレートで呼び出すだけ$OfficeAddr.NL2BRで、出力が出力される前に関数を介して実行されます。

以前の回答が想定していたのTextではなく、モデルがフィールドタイプとして使用していると想定していることに注意してください。HTMLText使用している場合は、必要に応じてファイルをHTMLText変更することで、代わりにそのクラスを拡張できます。extensions.yml

于 2013-01-25T07:11:50.950 に答える
7

重要:このソリューションは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>

これにより、少なくともビューロジックがモデルから削除されます;)

于 2011-02-07T02:22:49.510 に答える
1

これはSilverStripe 3 (2013 年 5 月以降) で修正されており、これらの回答はすべて以前のものです。今後は、TextVarcharデータベースのすべてのフィールドが を使用して自動的に変換されますnl2br()

だから...あなたが私のように愚かで、ここにたどり着いた場合は、実際にはHTMLTextフィールドを出力しているが、プレーンテキストを使用していると思っ->getCMSFields()ていた可能性があることに注意してください( TextareaField.

うまくいけば、これは将来の訪問者に役立ちます!

于 2016-09-11T00:38:40.667 に答える