【问题标题】:CakePHP paggination, Not Working (not showing the data correctly)CakePHP 分页,不工作(未正确显示数据)
【发布时间】:2014-08-06 09:05:22
【问题描述】:

当我激活管理路由时,我很难弄清楚如何在 cakePHP 中进行分页。

我有localhost/myapp 那是主页 和 localhost/myapp/admin 是管理区域。所以我想在前端分页,所以在 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 .= "";      
           ?>   

所以正如你所看到的,我首先将所有数据存储到一个变量中,然后我使用分页器助手像这样回显它:

<?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,它应该显示下一个。确实如此,但现在它像这样是空白的。

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

【问题讨论】:

  • 您在路由选项中设置索引参数'action' =&gt; 'index', 'index',尝试不使用它,例如:Router::connect('/', array(admin'=&gt;false, 'controller' =&gt; 'typologies', 'action' =&gt; 'index'));

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


【解决方案1】:

相对网址有问题

视图包含以下内容:

$result .= "<div class=\"item\" style=\"background-image:url({$typologyThumbnails});\">";

其中$typologyThumbnails 是相对网址,格式为:

img/uploads/typology/thumbnails/whatever.jpg

这意味着对于 url http://localhost/mycakephpApp/ 请求以下图像 url:

http://localhost/mycakephpApp/img/uploads/typology/thumbnails/whatever.jpg

但是,对于 url http://localhost/mycakephpApp/typologies/index/index/page:2,需要以下图片 url:

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。

【讨论】:

  • 比很多,这真的很有帮助。
猜你喜欢
  • 2012-08-30
  • 2013-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多