This is my first question on this site, so i really have been searching much for answer. I'm making a site with some events (trainings and internships) and have some links to look for:

  • Future events;
  • Current events;
  • Past events;

So, these are not categories, but are dynamic and made in a such way (for example, "Future events"):

Trainings_Controller:

public function future()
{
$this->load->model('trainings_model');
$data['settings'] = $this->trainings_model->get_trainings_list('future');
$this->load->view('trainings_list_view',$data);
}

Trainings_Model:

function get_trainings_list($time)
    {
        $date = date('Y-m-d'); 
        switch($time) {
            case 'future':
                $this->db->where('start_date >', $date);
            break;
            case 'current':
                $this->db->where('start_date <', $date);
                $this->db->where('end_date >', $date);
            break;
            case 'past':
                $this->db->where('end_date <', $date);
            break;
        }
        $this->db->where('category','1');
        $query = $this->db->get('trainings');
        return $query->result_array();
    }

And how it looks in loops in VIEWS now (i have purposely written all this mess in my view just to show you what i need it to look like), and MY QUESTION IS:

How to make it all clean and right.

<!-- Event Listing -->
<?php foreach ($settings as $item):
$format_start_date = date('d/m/Y', strtotime($item['start_date']));
$format_end_date = date('d/m/Y', strtotime($item['end_date']));
$format_cal_date = date('j/M', strtotime($item['start_date']));
$cal_date = explode('/', $format_cal_date);?>
    <div class='evlist'>
        <div class='evdate'>
            <span class='day'><?=$cal_date[0];?></span>
            <span class='month'><?=$cal_date[1];?></span>
        </div>
        <div class='evdesc'>
            <div class='thumb'>
                <a href='<?=base_url();?>trainings/view_training/id=<?=$item['id'];?>'>
                    <img src='<?=base_url();?><?=$item['img_path'];?>' width='113' height='82' alt='' />
                </a>
            </div>
            <div class='desc'>
                <h4 class='bold'>
                <a href='<?=base_url();?>trainings/view_training/id=<?=$item['id'];?>'>
                    <?=$item['name_ru'];?>
                </a></h4>
                <p><?=$item['short_desc_ru'];?></p>
                <div class='evdet'>
                    <span>Сроки проведения: <?=$format_start_date;?> - <?=$format_end_date;?> | </span>
                    <a href='<?=base_url();?>trainings/view_training/id=<?=$item['id'];?>' class='more txthover'>Read More</a>
                </div>
            </div>
        </div>
    </div>
<?php endforeach;?>

Please, any ideas?

有帮助吗?

解决方案

So after comment I see what you have trouble with.

please edit return line in your model to this one

return ($query->num_rows() > 0) ? $query->result_array() : FALSE;

so whenever you have 0 results it returns (boolean) FALSE and it is easy to work with

edit your controller so it looks like

public function future() {
    $this->load->model('trainings_model');
    $data['settings'] = $this->trainings_model->get_trainings_list('future');
    if ($data['settings'] === FALSE) return 0; //no results or make something here that prevents looping in foreach
    foreach ($data['settings'] as $setting_key => $setting) {
        //now grab code that you want to move from view and put it here ;)
        $data['settings'][$setting_key]['format_start_date'] = date('d/m/Y', strtotime($setting['start_date']));
        $data['settings'][$setting_key]['format_end_date'] = date('d/m/Y', strtotime($setting['end_date']));
        $data['settings'][$setting_key]['cal_date'] = explode('/', date('j/M', strtotime($setting['start_date'])));

    }

    $this->load->view('trainings_list_view',$data);
}

and now your view file edit, you do not need to check $settings if it is set because we took care about it in controller by if/else statement

<?php foreach ($settings as $item): ?>
    <div class='evlist'>
        <div class='evdate'>
            <span class='day'><?=$item['cal_date'][0];?></span>
            <span class='month'><?=$item['cal_date'][1];?></span>
        </div>
        <div class='evdesc'>
            <div class='thumb'>
                <a href='<?=base_url();?>trainings/view_training/id=<?=$item['id'];?>'>
                    <img src='<?=base_url();?><?=$item['img_path'];?>' width='113' height='82' alt='' />
                </a>
            </div>
            <div class='desc'>
                <h4 class='bold'>
                <a href='<?=base_url();?>trainings/view_training/id=<?=$item['id'];?>'>
                    <?=$item['name_ru'];?>
                </a></h4>
                <p><?=$item['short_desc_ru'];?></p>
                <div class='evdet'>
                    <span>Сроки проведения: <?=$item['format_start_date'];?> - <?=$item['format_end_date'];?> | </span>
                    <a href='<?=base_url();?>trainings/view_training/id=<?=$item['id'];?>' class='more txthover'>Read More</a>
                </div>
            </div>
        </div>
    </div>
<?php endforeach;?>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top