3

在 codeigniter 2.1 中,我试图按类别显示频道。因此,如果我有一个名为 Film 的类别,我应该会看到 Film 中的频道列表。我尝试了一个嵌套的 foreach 循环来完成此操作,但似乎无法使其正常工作。

我的表结构是这样的,但更复杂:

数据库结构

  • 我的模型:

    <?php
    
    class Pages_model extends CI_Model {
    
    
    function get_channels_by_categ_tv()
    {
    
      $this->db->select('categories.category_name, channels.channel_name');
      $this->db->from('type_categ');
      $this->db->join('categories', 'categories.category_id = type_categ.category_id');
      $this->db->join('channels', 'channels.channel_id = type_categ.channel_id');
      $this->db->order_by('categories.category_id');
    //$this->db->group_by(array('categories.category_id')); 
      $query = $this->db->get();
    
      if($query->num_rows() == 0)
      {
        #no channels
        return false;
      }
    
      return $query->result_array();
    }
    
    }
    
  • 在视图中:

              <ul class="slides">
                <li>
                    <?php foreach ($category_chaneels as $category): ?>
                    <div class="programe-tv_link">
                        <p><?=$category['category_name'];?></p>
                           <dd> <a href=""> >> <?=$category['channel_name'];?></a></dd>
                    </div>
                    <?php endforeach; ?>                  
                </li>
              </ul>
    
  • 控制器(页面):

    public function index()
    {
    
    $data['category_chaneels'] = $this->pages_model->get_channels_by_categ_tv();
    
    $this->template->page_view($data);
    }
    

我附上了图像 1 和图像 2,我需要图像 2 而不是 1 的结果。

PS。一个频道可以有多个类别。

在此处输入图像描述 你能帮助我吗 ?谢谢

4

2 回答 2

2

在你看来,试试

<?php $cat_shown = ''; ?>
<div class="programe-tv_link">
    <?php foreach ($category_chaneels as $category): ?>    
        <?php
        if ($cat_shown != $category['category_name']) {
            echo '<p>' . $category['category_name'] . '</p>';
            $cat_shown = $category['category_name'];
        }
        ?>
        <dd><a href=""> >> <?=$category['channel_name'];?></a></dd>
    <?php endforeach; ?>
</div>
于 2013-01-11T11:56:31.313 回答
1

我的最终代码是这样的。也许有人需要这个。

    <div id="programe-tv-slide" class="flexslider">
        <strong>Programe TV</strong>
        <div class="redLine"></div>

        <?php $cat_cnl = array(); 
              $list = array(); 
              $i=1;
                 foreach ($category_chaneels as $option) { 
                    $catname = $option['category_name'];
                    $chlname = $option['channel_name'];

                    $cat_cnl[$catname][$i] = $chlname;
                    $list[$i] = $catname;
              $i++;
                 }; 
        ?>
        <?php 
            $rows = array_chunk($cat_cnl, 4, TRUE);
            foreach ($rows as $row) {  //var_dump($rows);
        ?>

          <ul class="slides">    
            <?php
                echo ('<li>');
                foreach ($row as $category => $channels) {
                    echo '<div class="programe-tv_link">'; 
                    echo '<p>' . $category . '</p>'; 
                        foreach ($channels as $channel) {
                                echo '<dd><a href="">' . $channel . '</a></dd> '; 
                        };
                    echo '</div>'; 
                    };      
                echo ('</li>'); 
            ?>
          </ul>
          <?php }; ?>
    </div>
于 2013-01-30T15:05:44.487 回答