【发布时间】:2012-11-24 19:47:09
【问题描述】:
我创建了一个帮助器,它返回给定页面的 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;
}
(顺便问一下,有没有我可以用来代替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;
}
【问题讨论】:
标签: php cakephp components helper