1

Cakephp アプリ (2.2) でメール コンポーネントを使用して、アプリに新しい記事が追加されたときに購読者にメールを送信しています。

TinyMCE を使用して、管理者ユーザーがテキストを書式設定できるようにすることで、書式設定 HTML がデータベースに保存されます (これは問題ありません)。ただし、オプトインしたユーザーに記事全体を電子メール形式で電子メールで送信したいと考えています。記事を追加しました。これは html バージョンでは問題なく動作しますが、html バージョンに保持したままプレーン テキスト バージョンから html を削除するにはどうすればよいですか? これまでの私のコードは次のとおりです。

public function admin_add() {
    if ($this->request->is('post')) {
        $this->NewsArticle->create();
        if ($this->NewsArticle->save($this->request->data)) {

            // If is a tech alart - send email
            if ($this->request->data['NewsCategory']['NewsCategory']['0'] == '2') {

                // Email users who have opted in to webform updates
                $usersToEmail = $this->NewsArticle->query("SELECT username, tech_email FROM users WHERE tech_email = 1");

                // Loop throughh all opt'ed in users
                foreach ($usersToEmail as $user) {

                    $this->Email->template = 'newTechAlert';
                    $this->Email->from    = 'Client Area <clientarea@someurl.co.uk>';
                    $this->Email->to      = $user['users']['username'];
                    $this->Email->subject = 'New Technical Alert';
                    // Send as both HTML and Text
                                            $this->Email->sendAs = 'both';

                    // Set vars for email
                    $this->set('techAlertTitle', $this->request->data['NewsArticle']['title']);

                    ##  NEED TO STRIP THE HTML OUT FOR NONE HTML EMAILS HERE - BUT HOW???
                    $this->set('techAlertBody', $this->request->data['NewsArticle']['body']);


                    $this->set('user', $user['users']['username']);
                    $this->Email->send();

                }

            }
4

2 に答える 2

4

私が使う:

$this->Email->emailFormat('both');

// Convert <br> to \n
$text = preg_replace('/<br(\s+)?\/?>/i', "\n", $html);
// Remove html markup
$text = trim(strip_tags($text));
// Replace multiple (one ore more) line breaks with a single one.
$text = preg_replace("/(\r\n|\r|\n)+/", "\n", $text);

$this->Email->viewVars(compact('text', 'html'));

foreach の場合、問題を回避するために、各実行後にメール クラスをリセットする必要があることに注意してください。

$this->Email->reset();
于 2012-11-30T09:57:01.613 に答える
2

strip_tagsPHPメソッド http://php.net/manual/en/function.strip-tags.phpを使用できます。

//HTML VERSION
$this->set('techAlertHtmlBody', $this->request->data['NewsArticle']['body']);

//PLAIN TEXT VERSION
$this->set('techAlertPlainBody', strip_tags($this->request->data['NewsArticle']['body']));

関数に 2 番目のパラメーターを渡して、改行や href タグを許可することもできます。

于 2012-11-30T09:41:48.923 に答える