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 件のコメント:
コメントを投稿