2011-06-11 32 views

回答

2

这就是我能够解决这个问题的方法。如果有人有最好的方法,请告诉我。谢谢!

这是我的文章观Index.ctp文件

<div id="bottom_section" class="article_bottom_section"> 
<?php 
    foreach ($categories as $category){ 
?> 
<div> 
    <div> 
     <?php echo $category['Category']['title'];?> 
    </div> 
    <div> 
     <?php 
      echo $this->element(
       'category_relatedarticles', 
      array(
      'categoryID' => $category['Category']['id'] 
      ) 
     ); 
     ?> 
    </div> 
</div> 
<?php 
    } 
?> 
</div> 

然后在我的文章我的控制器index动作

$categories = $this->Article->Category->find(
      'all', 
      array(
       'fields' => array(
        'Category.id', 
        'Category.title' 
       ), 
       'order' => 'Category.id DESC', 
       'recursive' => 1 
      ) 
     ); 

    $this->set('categories'); 

这是我使用来获取相应的文章元素

<div> 
    <?php 
    $RelatedArticles = $this->requestAction('/categories/getRelatedArticles/'.$categoryID); 
    ?> 
    <ul> 
     <?php 
     foreach($RelatedArticles as $RelatedArticle){ 
     ?> 
     <li> 
      <?php echo $RelatedArticle['Article']['title']; ?> 
     </li> 
     <?php 
     } 
     ?> 
    </ul> 
</div> 

而这是getRelatedArticles函数i ñ我的分类控制器

function getRelatedArticles($id = null){  

     $RelatedArticles = $this->Category->Article->find(
      'all', 
      array(
       'fields' => array(
        'Article.title', 
        'Article.id' 
       ), 
       'conditions' => array(
        'Article.category_id =' => $id, 
       ), 
       'limit' => 6, 
       'order' => 'Article.id DESC'    
      ) 
     ); 
     if (!empty($this->params['requested'])) { 
      return $RelatedArticles; 
     }else{ 
      $this->set('RelatedArticles'); 
     } 
    } 

和它的作品相当不错的......如果有人知道一个更好和更快的方式,请让我知道..感谢

2

你可以使用一个(缓存)元素和请求的行动;因为这些类别不太可能改变。

// views/elements/categories.ctp 
$categories= $this->requestAction('/categories/get_categories'); 
echo '<ul>'; 
foreach($categories as $category) { 
    echo '<li>' . $category['Category']['name'] . '</li>'; 
} 
echo '</ul>'; 


// in your layout 
echo $this->element('categories', array('cache' => '+1 hour')); 

上面的例子需要调整;但你应该明白这个主意。您可以使用请求操作访问您喜欢的任何数据;但它可能会导致性能下降 - 因此缓存是明智的。

查看the docs了解更多信息。

+0

嗯,我真正想要做的是检索类别1其中10篇最新文章,2篇最新文章10篇,等等。你的答案只是检索类别,我已经能够做到。我只是想要最好的办法。看到我对这个问题的回答......我不确定这是否是最好的方法,但这就是我的做法。 – 2011-06-12 12:56:33