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));