特定のページの URL を返すヘルパーを作成しました。
ヘルパー ファイル:
public function PageURL($link = null, $category = null, $page = null){
if($link){
$link = strtolower(str_replace(' ', '-', $link));
$page_url = "http://www.domain.com/$link";
}
else{
$page_url = "http://www.domain.com/$category/$page";
}
return $page_url;
}
(ちなみに、full_site_url、base_url など、http://www.domain.comの代わりに使用できる変数はありますか?)
ヘルパーにパラメーターを渡すと、ビューは次のようになります。
<?php echo $this->Html->link($page['Page']['title'], $this->Custom->PageuRL($page['Page']['link'], $page['Category']['directory'], $page['Page']['id'])); ?>
これは毎回書くのが大変です。
移動したいページの URL を取得するコンポーネントを作成しました。現在AppControllerに実装されているので、現在のページのURLをうまく表示できますが、ビュー内またはヘルパー内で使用して別のページのURLを表示したいと思います。
public function TestPageURL($page = null) {
App::uses('ClassRegistry', 'Utility');
$pagesModel = ClassRegistry::init('Page');
$matchedpage = $pagesModel->find('first', array(
'conditions' => array('Page.id' => $page), 'recursive' => '0'
));
if($matchedpage['Page']['link']){
$pagelink = strtolower(str_replace(' ', '-', $matchedpage['Page']['link']));
$page_url = "http://www.domain.com/" . $pagelink;
}
else{
$page_url = "http://www.domain.com/" . $matchedpage['Page']['Category']['directory'] . $matchedpage['Page']['id'];
}
return $page_url;
} // end page url
このようにして、コンポーネントに 1 つのパラメーターを渡すだけで済みます。
ヘルパー内でコンポーネントを使用するのが良くないことはわかっています。また、このバージョンの CakePHP で許可されているかどうかもわかりませんが、リンクの作成がはるかに簡単になります。このコンポーネントをヘルパーで使用する方法、またはページ変数を渡すだけでヘルパーを同じように動作させる方法を知っている人はいますか?
編集:これは私にとってはうまくいきます。ヘルパーでクエリを実行する必要があるため、誰もが眉をひそめる可能性がありますが、実際には物事を単純化しています。サイトの速度が低下するかどうかを確認します。
これを改善する方法について、私はまだ提案を受け付けています。
public function TestPageURL($page = null) {
$pagesModel = ClassRegistry::init('Page');
$matchedPage = $pagesModel ->find('first', array(
'conditions' => array('Page.id' => $page), 'recursive' => '1'
));
if($matchedPage ['Page']['link']){
$link = strtolower(str_replace(' ', '-', $matchedPage['Page']['link']));
$page_url = "http://www.domain.com/$link";
}
else{
$page_url = "http://www.domain.com/" . $matchedPage['Page']['Category']['directory'] . '/' .$matchedPage['Page']['id'];
}
return $page_url;
}