当我激活管理路由时,我很难弄清楚如何在cakePHP中进行分页。
我有localhost/myapp
这是主页
和localhost / myapp / admin这是管理区域。所以我想在fron端分页,所以在localhost / myapp索引页面。
因此主索引页面是类型学模型的索引。 在我的 app / Config / routes.php 中,我有这个主页的路由:
Router::connect(
'/',
array(
'admin'=>false,
'controller' => 'typologies',
'action' => 'index', 'index'
)
);
PS:我也使用slug查找帖子。
在我的 app / Controller / TypologyController 中,我有:
$this->Paginator->settings = array(
'joins' => array(
array(
'table' => 'items',
'alias' => 'Item',
'type' => 'LEFT',
'conditions' => array('Item.id = Typology.item_id')
)
),
'conditions' => array(
'Item.published' => 1,
'Typology.published' => 1
),
'limit' => 1,
'order' => array('Typology.sort' => 'ASC'),
'fields' => array('Item.*', 'Typology.*'),
'recursive' => 2
);
$typologies = $this->paginate('Typology');
$this->set(compact('typologies'));
我已设置limit => 1仅用于测试目的。 在我的 View / Typologies / index.ctp 中,我有这个:
<?php
$result = '';
foreach ($typologies as $typology):
$id = h($typology['Typology']['id']);
$item_id = h($typology['Typology']['item_id']);
$title = h($typology['Typology']['title']);
$description = h($typology['Typology']['description']);
$thumbnail = h($typology['Typology']['thumbnail']);
$price = h($typology['Typology']['price']);
$typology_category_id = h($typology['Typology']['typology_category_id']);
$typology_condition_id = h($typology['Typology']['typology_condition_id']);
if (strlen($description)>330) {
$short_description = substr($description, 0, 327);
$description = $short_description."...";
}
$dir = "img/uploads/typology/thumbnails/";
if (file_exists( $dir . $thumbnail)) {
$typologyThumbnails = $dir . $thumbnail;
}
else {
$typologyThumbnails = "img/uploads/noimg.jpg";
}
if($thumbnail=='NULL' || $thumbnail=='') {
$typologyThumbnails = "img/uploads/noimg.jpg";
}
$result .= "<div class=\"item_shadow\">";
if ($logged_in) {
if ($typology['Typology']['published']==0 || $typology['Typology']['published']==false || $typology['TypologyItem']['published']==0 || $typology['TypologyItem']['published']==false) {
$result .= "<div class=\"badge red\"> non publicato </div>";
}
}
$result .= "<div class=\"item\" style=\"background-image:url({$typologyThumbnails});\">";
$result .= "<div class=\"item-content\">";
$result .= "<div class=\"item-top-content\">";
$result .= "<div class=\"item-top-content-inner\">";
$result .= "<div class=\"item-top-title\">";
$result .= "<h4>{$title}</h4>";
$result .= "</div>";
$result .= "</div>" ;
$result .= "</div>";
$result .= "<div class=\"item-add-content\">";
$result .= "<div class=\"item-add-content-inner\">";
$result .= "<div class=\"description-inner\">";
$result .= "<p>{$description}</p>";
$result .= "</div>";
$result .= "<div class=\"read-more-inner\">";
$result .= $this->Html->link("maggiori informazioni". $this->Html->image('elenco.png'), array('admin'=>false,'controller' => 'items', 'action' => 'view', 'slug' => Inflector::slug($typology['TypologyItem']['seo_url'],'-'),'id'=>$typology['Typology']['item_id'],'?'=> array('active_tab' => $typology['Typology']['id'])), array('escape' => false));
$result .= "</div>";
$result .= "</div>";
$result .= "</div>";
$result .= "</div>";
$result .= "</div>";
$result .= "</div>";
endforeach;
$result .= "";
?>
因此,当您看到我首先将所有数据存储到变量中时,我会使用paginator helper回复它:
<?php
if (isset($result)) {
echo $result;
}
?>
<p>
<?php
echo $this->Paginator->counter(array(
'format' => __('Page{:page} di {:pages}, Showing {:current} records of {:count} in total, starting at {:start}, and finishing at {:end}')
));
?>
</p>
<div class="paging">
<?php
echo $this->Paginator->prev('< ' . __('Preview'), array(), null, array('class' => 'prev disabled'));
echo $this->Paginator->numbers(array('separator' => ''));
echo $this->Paginator->next(__('Next') . ' >', array(), null, array('class' => 'next disabled'));
?>
</div>
因此,当我第一次加载页面时,URL就像这样http://localhost/mycakephpApp/
它显示一个日期,就像它假设:
当我点击下一个或第2个时,URL就像这样:http://localhost/mycakephpApp/typologies/index/index/page:2
,它应显示下一个。它确实如此,但现在它是空白的。
我不知道我错过了什么或我做错了什么。有谁知道如何解决这个问题? 我真的很赞赏你的帮助。
答案 0 :(得分:2)
该视图包含以下内容:
$result .= "<div class=\"item\" style=\"background-image:url({$typologyThumbnails});\">";
$typologyThumbnails
是表格的相对网址:
img/uploads/typology/thumbnails/whatever.jpg
这意味着对于网址http://localhost/mycakephpApp/
,请求以下图片网址:
http://localhost/mycakephpApp/img/uploads/typology/thumbnails/whatever.jpg
但是,对于网址http://localhost/mycakephpApp/typologies/index/index/page:2
,请求以下图片网址:
http://localhost/mycakephpApp/typologies/index/index/img/uploads/typology/thumbnails/whatever.jpg
哪个不存在。
这是一个非常简单的解决方案:
/img/uploads/typology/thumbnails/whatever.jpg
在使用变量之前,您可以通过执行以下操作来解决问题:
$typologyThumbnails = Router::url('/' . $typologyThumbnails);
这将输出:
/mycakephpApp/img/uploads/typology/thumbnails/whatever.jpg
查看表单文件:
echo "large chunk of html"
很难阅读/维护。相反,视图代码应该是例如:
<?php
foreach ($typologies as $typology) {
echo $this->element('typology', array('row' => $typology));
}
// pagination links
并且foreach的主体在元素中循环。但是不要将大量的html写成字符串 - 如果它被写成:
,它会更容易阅读/维护<?php
// /App/View/elements/typology.ctp
// variable setup
?>
<div class="item_shadow">
<div class="item" style="background-image:url(<?= Router::url($typologyThumbnails) ?>);">
...
<h4><?= h($row['Typology']['title']) ?></h4>
它还有一个额外的好处,你的编辑器将突出显示html。