CakePHP分页,不工作(没有正确显示数据)

时间:2014-06-16 13:53:21

标签: cakephp pagination cakephp-2.0 cakephp-2.1 cakephp-2.3

当我激活管理路由时,我很难弄清楚如何在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/它显示一个日期,就像它假设: Page load Paggination

当我点击下一个或第2个时,URL就像这样:http://localhost/mycakephpApp/typologies/index/index/page:2,它应显示下一个。它确实如此,但现在它是空白的。 Second page paggination

我不知道我错过了什么或我做错了什么。有谁知道如何解决这个问题? 我真的很赞赏你的帮助。

1 个答案:

答案 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。