新しいブログに引っ越しました

tomotomoSnippetは新しいブログに移動しました
http://develtips.com/

2010-07-05

[CakePHP1.2]印刷用ページのルーティング

ちょっと軽い話題。

routes.phpを編集して、印刷専用のレイアウトを設定できるようにします。
具体的には
http://example.com/print/users/view/123
にアクセスした際にレイアウトのprint.ctpを適用します。


// routes.php の一番最後

/**
* 印刷用ページのルーティング
*/
Router::connect(
'/print/:controller/:action/*',
array('action'=>'index', 'print'=>1)
);

コントローラでは、$this->params['print']が使えるようになります。
AppControllerのbeforeRenderをいじってみましょう。


// app_controller.php

class AppController extends Controller
{
function beforeRender()
{
if (isset($this->params['print']) && $this->params['print']==1) {
$this->layout = 'print';
}
}
}

はい、これでコントローラの前に/printを付けるだけで
プリント用レイアウトが適用されるようになりました。
プリント用レイアウトは不要なナビゲーション関連の要素を削除する
などしておくとスッキリします。

(追記:2010/7/5)
残念ながら、プリントルーティングは完全ではないです。
pagesコントローラのルーティングなど、他にカスタムルーティングを
行っている場合は、プリントルーティングが適用されません。
個別に設定していきましょう。


// 例 routes.php
/**
* ...and connect the rest of 'Pages' controller's urls.
*/
Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display'));
// この一行を追加
Router::connect('/print/pages/*', array('controller' => 'pages', 'action' => 'display', 'print'=>1));

0 件のコメント:

コメントを投稿

人気のエントリー