我做了一個幫助程序,它返回給定頁面的URL。CakePHP 2.2.4:幫助使用組件/幫助器的簡單鏈接
助手文件:
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;
}
(順便說一下,有一個變量,我可以代替使用http://www.domain.com如full_site_url,BASE_URL等?)
這是我的觀點看起來像當我將參數傳遞給幫手:
<?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
用這種方法,我只需要傳遞一個參數給組件。
我知道在助手中使用組件並不好,我不確定它是否允許在此版本的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;
}