【问题标题】:Codeigniter. How to decorate dates taken from DB in loop (in VIEW )代码点火器。如何在循环中装饰从数据库中获取的日期(在 VIEW 中)
【发布时间】:2014-02-03 13:53:47
【问题描述】:

这是我在这个网站上的第一个问题,所以我真的一直在寻找答案。 我正在制作一个包含一些活动(培训和实习)的网站,并有一些链接可供查找:

  • 未来事件;
  • 时事;
  • 过去的事件;

因此,这些不是类别,而是动态的并且以这种方式制作(例如,“未来事件”):

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();
    }

以及它现在在 VIEWS 中的循环看起来如何(我故意在我的视图中写下所有这些混乱,只是为了向您展示我需要它的外观),我的问题是:

如何让一切变得干净和正确。

<!-- 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;?>

请问有什么想法吗?

【问题讨论】:

  • 请注意 base_url 带有参数,因此您可以使用以下代码使您的代码更好一点:&lt;?=base_url('trainings/view_training/id/' . $item['id'])?&gt;,还请确保在每个“foreach”之前检查您可以循环通过对象/array 所以if (empty($settings))... 基本上我能补充的就这些了。
  • 谢谢你,但我最感兴趣的是如何移动这部分: $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);?> from View to Controller or Model, and DO我真的需要在使用 MVC 时这样做吗?
  • 我看到了问题。我很快就会给你一个答案。

标签: codeigniter date model-view-controller explode


【解决方案1】:

所以在评论之后我看到了你的问题。

请将您模型中的return 行编辑为此

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

因此,只要您有 0 个结果,它就会返回(布尔值)FALSE,并且很容易使用

编辑您的控制器,使其看起来像

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);
}

现在您的视图文件已编辑,您无需检查 $settings 是否已设置,因为我们通过 if/else 语句在控制器中处理了它

<?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;?>

【讨论】:

  • 哇!它看起来就像我希望的那样!我今晚要测试它,但我相信它会奏效。我唯一怀疑的是这条线:$data['settings'][$setting_key]['cal_date'] = explode('/', $format_cal_date);。我会评论它明天是否有效。很抱歉,我没有足够的声誉来投票给你的答案。非常感谢!
  • 没问题,如果有效,请接受答案,如果无效,我们会解决的,有一个好的
  • So :) Start_End_date 显示正确,但我对 format_cal_date 和 cal_date 有一些问题。首先我有下一个 php 通知:Message: Undefined variable: format_cal_date。这是肯定的,因为我们没有变量$format_cal_date。我试图自己处理一整天,将其更改为我们拥有的一些数组,但仍然没有办法:(顺便说一句,可以将您的解决方案更改为:$val['start_date'] = date('d/m/Y', strtotime($val['start_date'])); 而不是$data['settings'][$setting_key]['format_start_date'] = date('d/m/Y', strtotime($setting['start_date']));
  • 这行简直就是魔法:$data['settings'][$setting_key]['cal_date'] = explode('/', date('j/M', strtotime($setting['start_date']))); 不知道我可以那样做。非常感谢您!!!您能否更新我对您的代码所做的更改,以便每个人都能看到正常工作的脚本?
  • 是的,你可以随意嵌套函数 :) 顺便说一句:它总是像你写的那样 &lt;span class='day'&gt;&lt;?=$item['cal_date'][0];?&gt;&lt;/span&gt; &lt;span class='month'&gt;&lt;?=$item['cal_date'][1];?&gt;&lt;/span&gt; 不需要编辑。
猜你喜欢
  • 1970-01-01
  • 2013-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多