Codeigniter несколько представлений для настройки вложенных вкладок - PullRequest
0 голосов
/ 26 апреля 2011

Я борюсь с разметкой вложенных вкладок, созданной с помощью вызовов модели Codeigniter, и буду рад любым проницательным комментариям.Сложность состоит в том, что созданная разметка имеет нежелательные повторения блоков данных проекта.Вероятно, проблемы заключаются в использовании нескольких видов, которые не связаны напрямую.

Вот контроллер:

function projects() {

$this->load->model('msm_projects');
$data['cats']=$this->msm_projects->catid()->result_array();
$this->load->view('vup_projects', $data);

foreach ( $data['cats'] as $item )
    {
    $data2['projects']=$this->msm_projects->catproj($item['catid'])->result_array();
    $this->load->view('vup_projects2', $data2);
    }   
}

Модель:

function catid() {

    return $this->db->query("SELECT DISTINCT catid, cat FROM category INNER JOIN projects ON catid = projcat WHERE projpub=1 ORDER BY catid ASC");

    }

function catproj($catid) {

  return $this->db->query("SELECT catid, cat, projcat, projid, projtit  FROM projects INNER JOIN category ON projcat = catid WHERE projcat = $catid AND projpub=1 ORDER BY catid ASC");

    }

Вот мнения, которые состоят из двух частей.Я подозреваю, что здесь все идет не так.Существует несовершенное соединение между двумя представлениями, о которых я с трудом думаю.

представление 1, называемое vup_projects

<div id="wrapper">
<div class="yui3-g">

    <div class="yui3-u-1"><div id="topbloc"><img src="http://localhost/getop/base-images/topbloc.gif" width="800" height="50" align="middle"></div></div>

<div class="yui3-u-1">

    <div id="navbloc">
       <div id="linx">
           <ul >
               <li id="about"><?php echo anchor('cu_tya/about', 'about'); ?></li>
               <li id="ourwork"><?php echo anchor('cu_projects/projects', 'projects'); ?></li>
               <li id="contact"><?php echo anchor('cu_tya/contact', 'contact'); ?></li>
               <li id="member"><?php echo anchor('cu_sites/pager', 'your page'); ?></li>
           </ul>  
       </div>
    </div>

</div>

    <div class="yui3-u-1">

    <div id="container">

    <ul>            
        <?php 
            foreach ( $cats as $item )  // top tabs 
                {
                    echo '<li><a href=#fragment-'.$item['catid'].'><span>'.$item['cat'].'</span></a></li>';   
                }
        ?>
    </ul>

И второе представление vup_projects2

    <?php foreach ( $cats as $item ) { ?> <!-- main divs -->                    

    <div id="fragment-<?php echo $item['catid'];?>">

    <ul>

        <?php foreach ( $projects as $project )

            {   ?>

                <li>
                <a href="#fragment-<? echo $project['projid']?>a"><span><?php echo $project['projtit'];?></span></a></li>

        <?php   }   ?>

    </ul>

        <?php foreach ( $projects as $project ) 

            { ?> 

                <div id="fragment-<?php echo $project['projid'];?>a" > 

                <?php echo $project['projtit'].'  hooray';?>

                </div>

        <?php   }   ?>

    </div>  

<?php   }   ?>

            </div>  <!-- container -->

        </div>  <!--  YUI-UNIT-1-->

    </div>  <!-- YUI-GRID -->

 </div> <!-- wrapper -->

Ответы [ 2 ]

1 голос
/ 28 апреля 2011

Итак, я более внимательно посмотрел на то, что вы пытаетесь выполнить, и мне кажется, что я объединил его в один запрос и одно представление. Может быть, это поможет

Контроллер:

class Projects extends CI_Controller {

function __construct(){
    parent::__construct();
}

function projects() {

    $cats = array(); // Unique cateogires
    $projects = array(); // Projects that will go underneath

    $this->load->model('msm_projects');
    $query = $this->msm_projects->get_all();

    // Make sure there are results
    if ($query !== FALSE)
    {   
        // Loop through once to find distinct categories for tabs
        foreach ($query as $k => $v)
        {
            if ( ! array_key_exists($v['catid'], $tabs))
            {
                $tabs[$v['catid']] = $v['cat'];
            }
        }

        // Loop through all of the results and group the items
        // into arrays by their categories
        foreach ($query as $k => $v)
        {
            $projects[$v['catid']][] = $v;
        }

        $data = array(
                    'cats' => $cats,
                    'projects' => $projects
                    );

        $this->load->view('main', $data);
    }
    else
    {
        echo 'No results';
    }
}
}

Модель:

class Msm_projects extends CI_Model {

/* Returns everything you need */
function get_all() 
{
    $q = $this->db->select('c.catid, c.cat, p.projcat, p.projid, p.projtit')
             ->join('projects as p', 'c.catid = p.projcat', 'INNER')
             ->where('projpub = 1')
             ->order_by('c.catid')
             ->get('category as c');

    if ($q->num_rows > 0)
    {
        return $q->result_array();
    }
    else
    {
        return FALSE;
    }
}
}

Вид:

<div id="wrapper">
    <div class="yui3-g">
        <div class="yui3-u-1">
            <div id="topbloc">
            <img src="<?=base_url() /* Good not to hardcode url's if you can avoid it */;?>getop/base-images/topbloc.gif" width="800" height="50" align="middle" />
        </div>
    </div>
    <div class="yui3-u-1">
    <div id="navbloc">
       <div id="linx">
           <ul >
               <li id="about"><?php echo anchor('cu_tya/about', 'about'); ?></li>
               <li id="ourwork"><?php echo anchor('cu_projects/projects', 'projects'); ?></li>
               <li id="contact"><?php echo anchor('cu_tya/contact', 'contact'); ?></li>
               <li id="member"><?php echo anchor('cu_sites/pager', 'your page'); ?></li>
           </ul>  
       </div>
    </div>
</div>
<div class="yui3-u-1">

<div id="container">
<ul>            
    <?php foreach($cats as $id => $cat){ ?>
        <li><a href="#fragment-<?=$id;?>"><span><?=$cat['cat'];?></span></a></li>
    <?php } ?>
</ul>

<?php foreach ($cats as $id => $cat ) { ?> <!-- main divs -->
    <div id="fragment-<?php echo $id;?>">
        <ul>
            <?php foreach($projects[$id] as $project){ ?>
            <li>
                <a href="#fragment-<? echo $project['projid']?>a"><span><?php echo $project['projtit'];?></span></a>
            </li>
            <?php } ?>
        </ul>
        <?php foreach ($projects[$id] as $project) { ?> 
        <div id="fragment-<?php echo $project['projid'];?>a" > 
            <?php echo $project['projtit'].'  hooray';?>
        </div>
        <?php } ?>
    </div>  
<?php } ?>

Есть много хитростей, чтобы узнать об оптимизации процесса MVC в CI, многие из которых я хотел бы узнать ранее. Надеюсь, это поможет некоторым, дайте мне знать, если у вас есть вопросы. Что касается нумерации страниц, попробуйте сделать что-то похожее на то, что я делал в цикле foreach, чтобы получить основные категории, а затем впоследствии извлекайте страницы из массива результатов, которые ==, к категории, которую вы ищете.

1 голос
/ 27 апреля 2011
foreach ( $data['cats'] as $item )
    {
    $data2['projects']=$this->msm_projects->catproj($item['catid'])->result_array();
    $this->load->view('vup_projects2', $data2);
    }

это ваша проблема, вы зацикливаете представления для каждого элемента в $ data ['cats'] ... вы также делаете запрос для каждого элемента $.Вы должны сделать один запрос и затем просмотреть результаты соответствующим образом.Но чтобы решить вашу проблему, попробуйте следующее:

foreach ( $data['cats'] as $item )
{
    $data2['projects'][$item['catid']] = $this->msm_projects->catproj($item['catid'])
                                         ->result_array();
}

$this->load->view('vup_projects2', $data2);

, затем измените ваше второе представление на

<?php foreach ( $cats as $item ) { ?> <!-- main divs -->                    

<div id="fragment-<?php echo $item['catid'];?>">

<ul>

        <?php foreach ( $projects[$item['catid']] as $project )

            {   ?>

                <li>
                <a href="#fragment-<? echo $project['projid']?>a"><span><?php echo $project['projtit'];?></span></a></li>

        <?php   }   ?>

    </ul>

        <?php foreach ( $projects[$item['cat_id']] as $project ) 

            { ?> 

                <div id="fragment-<?php echo $project['projid'];?>a" > 

                <?php echo $project['projtit'].'  hooray';?>

                </div>  

        <?php   }   ?>

            </div>  <!-- container -->

        </div>  <!--  YUI-UNIT-1-->

    </div>  <!-- YUI-GRID -->

 </div> <!-- wrapper -->
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...