Symfony2 twigでnl2brフィルタが使えない

前回の記事でnl2brフィルタの便利さを伝えたけど今回はtwigフィルタの微妙な話。

twigで使えるフィルタ同士の順番や相性?の問題で何故かnl2brが反映されない状態になったので一応メモ。

 

Symfonyについてはさっぱりわからないので原因や理由を把握しないまま野蛮的知識人的に強引に解決法だけ書いて終わり。

 

今回(といっても随分前だけど)引っかかったのは、

我らがnl2brフィルタとlengthフィルタの同時使用におけるフィルタ効いてないよー問題。

 

DBから取り出した改行コード入りのテキストデータをまずはnl2brを使って出力させる。

 

{{ str|nl2br }}

上記のようにすれば問題なく改行されて出力される。

 

 

ここに最初の100文字だけを取り出すフィルタを追加するとおかしいことになった。

単純に知識がないのでそのままゴリゴリ書く。

 

失敗1:

{ str|length > 100 ? str|nl2br|slice(0, 100) ~ ' ...' : str|nl2br|slice(0, str|nl2br|length -1) }}

 

すると array などと意図しない表示が出力される・・・

あー、strに付けるのが間違ってるんだなきっと。と浅はかな知恵を働かせる。

(後ろで再度sliceをしてるのは特殊データ形式のためスルーで)

 

失敗2:

{ str|length > 100 ? str|slice(0, 100)|nl2br ~ ' ...' : str|slice(0, str|length -1)|nl2br }}

あれ?今度は<br>がそのまま表示されてしまう。

 

なぜかsliceすると<br>がそのまま出力されるという謎。

この謎が解決出来ないどころか理由を知ろうともしない私はそのまま強引な解決策をピコーンと閃く。

 

失敗3:

{ str|length > 100 ? str|slice(0, 100)|nl2br|raw ~ ' ...' : str|slice(0, str|length -1)|nl2br|raw }}

rawが効いてない・・・だと?

 

もうフィルタはいいやと思い始めたけど、念のためエスケープ外してみるか。

 

成功:

{% autoescape false %}{{ str|length > 100 ? str|slice(0, 100)|nl2br ~ ' ...' : str|slice(0, str|length -1)|nl2br }}{% endautoescape %}

 

これでバッチリ改行されつつ表示されましたとさ。

切った後にnl2brをしないとそりゃ改行タグが途中で切れておかしくなるんだから失敗1はそもそも有り得ないミスです。

でもボリュームのある単純作業をやってると何も考えずに指だけ動いてることって結構あるんですよね。。。

 

しかしなぜ{% autoescape false %}をしないといけないのかよくわかりません。

英語が致命的に出来ないので調べようともしてないんですがなんでなんでしょう。

 

{% debug %}を使って出力しろって言われそうですが長くつき合うつもりがないので華麗にスルー。

 

どう考えてもviewでやる処理じゃないけど一つ上の行でnl2br使ってるのにそこだけ違うもおかしいので今回はtwig側に処理を書き入れての対応になりました。

 

出来る天才プログラマの方がtwigマニュアルを作ってくれることを切に願っています。

Symfony2 twigでnl2brを使って改行する

ググる力がないのかSymfonyの記事が全然出て来ないのでメモ。

古い記事がヒットするもnl2brについては書かれておらずnl2brはないものとして代替手段が書かれていた。

しかし最新のtwigにはいくつもフィルタが追加され、その中にnl2brもバッチリ収録されている。

 

テキストエリアからPOSTしたデータをそのままMySQLなんかのデータベースに突っ込んでいても、

{{ str|nl2br }}

と書くだけで改行をそのまま出力してくれる。

 

これまでstr_replaceを使ってわざわざ改行コードを<br />に変換させた上で、

{% autoescape false %}{{ str }}{% endautoescape %}なんかしてましたがnl2brさえ使えれば一発OK!

 

しかし、複数のフィルタを使おうとするとフィルタ同士の相性や順番の問題でおかしなことになったりする。

 

それはまた別の話なので別エントリーにて。

Mac Chromeのローカルストレージの場所

MacのChromeにデフォルトで備わっている「全てのcookieとサイトデータ」にはソートがないので、

・ローカルストレージだけを個別に消したいんじゃハゲ!

・サイズの大きいローカルストレージを上から順に並べて消したいんじゃボケ!

ってなって非常に不便。

 

そんなときはローカルストレージの保存場所にいって直接消してしまえってことで、

/Users/ユーザ名/Library/Application Support/Google/Chrome/Default/Local Storage

に行ってザクザク削除!(直接ゴミ箱にぶん投げる)

 

ローカルストレージは下記みたいな名前で保存されてます。

http_www.google.com_0.localstorage

http_www.google.com_0.localstorage-journal

 

ウェブサイトで出来たローカルストレージは先頭が「http_」または「https_」で始まり、

先頭が「chrome-extension_」になってるものは拡張機能で使っているローカルストレージです。

 

ローカルストレージは扱われ方がまだまだぞんざいでゴミのように溜まっていくのでメモ。

SiteSuckerの日本語化

ダウンロードソフトをいくつか試したけど使い勝手がいい!

ということで日本語しようと思ったらたまたまなのか、パッチファイルが検索で上位に出なかった。

見つけたーと思ったらリンク切れしてたりするので一応書いておこう。

 

パッチファイルは

http://jppd.tripod.com/

ここから(SiteSucker 日本語リソース (Japanese.lproj for SiteSucker)バージョンにあったもの(基本最新バージョンで問題なし)をダウンロード

 

あとはアプリケーションフォルダに移動してSiteSuckerを右クリックして、パッケージの内容を表示

 

ContentsのResourcesフォルダに、ダウンロードしたパッチファイル(Japanese.lproj)まるごと入れて終わり

 

正規表現が使えるのが素晴らしい

Web共有が起動しない 入りにならない Mac

Lionアップデート後にローカルホストに接続出来なくなった場合はここを参照するといいみたいです

https://discussionsjapan.apple.com/thread/10096783?start=0&tstart=0

 

httpd.confなんかをいじって立ち上がらなくなった場合はこっちのエントリーをどうぞ

http://babu.hatenablog.jp/entry/2012/04/22/154845

httpd.confを元に戻す方法 Mac

なんらかの設定をしてhttpd.confを書き間違ってしまうとWeb共有のチェックが「入」にならず、一時的に「−」になって元に戻ってしまいます。

それを防ぐ為に、httpd.confを書き換える際には毎回バックアップを取っておくのがおすすめです。

もしバックアップを取っていない時でも、最初からhttpd.default.confというファイルが用意されているので、このファイルの中身をhttpd.confに丸ごとコピーすれば一番最初の状態に戻すことが出来ます。

 

今回はターミナルを使わずにテキストエディタで中身を元に戻す方法を説明します。

 

まずは、Finderを開いて画面上部メニューバーの「移動」を選択し、「フォルダへ移動」を選択します。

フォルダの移動先を指定するフォームが表示されたら、httpd.confの格納されている「/etc/apache2/」を指定します。

※ versionによってフォルダが異なる場合があるので、見当たらない場合は「/etc/」フォルダに移動し、それっぽいフォルダを探して下さい。

 

/etc/apache2/に移動するとhttpd.confとhttpd.default.confが見つかる筈です。

見つかったらまずhttpd.default.confを開いて中身をコピーします。

 

次にhttpd.confの中身を書き換えるのですが、これは通常ターミナルからsudoコマンドで実行します。

今回はテキストエディタで編集するので、httpd.confのアクセス制限を一時的に解除しなければなりません。

まずは、httpd.confを右クリックして「情報を見る」を選択して下さい。

一番下を見ると共有とアクセス権という項目があります。

初期段階では、システム・wheel・everyoneの三つの権限それぞれが「読み出しのみ」に設定されています。

これを読み・書き出来るように設定し直します。

右下の鍵のアイコンをクリックするとパスワードの入力を求められるので、PCで設定しているパスワードを入力して下さい。

すると、アクセス権のフィールドをクリックで操作出来るようになるので、

ユーザ名(自分)またはeveryoneの部分を「読み出しのみ」から「読み/書き」に変更します。

これで、テキストエディタhttpd.confを自由に書き換えることが出来るようになりました。

 

後はhttpd.confを開いて、先ほどコピペしたhttpd.default.confの中身に変更して保存するだけです。

保存したら再度アクセス権限を元に戻しておしまいです。

 

黒い画面に慣れない方はこうやって修正すると簡単です。