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

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

2010-07-05

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

ちょっと軽い話題。

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

  1. // routes.php の一番最後  
  2.   
  3. /** 
  4.  * 印刷用ページのルーティング 
  5.  */  
  6. Router::connect(  
  7.   '/print/:controller/:action/*',  
  8.   array('action'=>'index''print'=>1)  
  9. );  

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

  1. // app_controller.php  
  2.   
  3. class AppController extends Controller  
  4. {  
  5.   function beforeRender()  
  6.   {  
  7.     if (isset($this->params['print']) && $this->params['print']==1) {  
  8.       $this->layout = 'print';  
  9.     }  
  10.   }  
  11. }  

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

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

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

人気のエントリー