【问题标题】:Codeigniter prevent repeat dataCodeigniter 防止重复数据
【发布时间】:2015-09-11 04:28:58
【问题描述】:

我有一个具有 2 个功能的控制器:

  1. 图片
  2. 视频

我创建了一个 headerfooter 模板来加载我的视图,我想将 css 样式表设置为用户首选设置“浅色”或“深色”。因此,例如,用户将他们的主题设置为深色我想用 dark.css 更新 header 视图,但我目前正在重复我的代码,我想阻止这种情况。我必须这样做两次。图片一次:

public function images() 
{
    //is the user logged in? if not redirect to login page
    if ( ! $this->my_auth->logged_in())
    {
      redirect('auth/login', 'refresh');
    }

    //set the view data
    $data['title'] = 'Upload Images | My Idea Cloud';
    $data['heading'] = 'Upload Images';
    $data['attributes'] = array(
      'class' => 'dropzone',
      'id' => 'image-dropzone'                
    );

    // get users style and set the correct style sheet
    $user_data = $this->my_auth->user()->row();

    if ($user_data->style == 'light')
    {
        $data['flat_css'] = 'flat-ui-light.css';
        $data['navbar_class'] = 'navbar-default';
        $data['footer_class'] = 'bottom-menu-default';
        $data['custom_css'] = 'custom-light.css';
        $data['dropzone_css'] = 'dropzone-light.css';
    }
    elseif ($user_data->style == 'dark')
    {
        $data['flat_css'] = 'flat-ui-dark.css';
        $data['navbar_class'] = 'navbar-inverse';
        $data['footer_class'] = 'bottom-menu-inverse';
        $data['custom_css'] = 'custom-dark.css';
        $data['dropzone_css'] = 'dropzone-dark.css';
    }
    else
    {
        $data['flat_css'] = 'flat-ui-dark.css';
        $data['navbar_class'] = 'navbar-inverse';
        $data['footer_class'] = 'bottom-menu-inverse';
        $data['custom_css'] = 'custom-dark.css';
        $data['dropzone_css'] = 'dropzone-dark.css';
    }


    //load the views    
    $this->load->view('templates/frontend/front_header', $data);
    $this->load->view('templates/frontend/front_navbar');
    $this->load->view('frontend/upload_images', $data);
    $this->load->view('templates/frontend/front_footer', $data);

还有一次用于视频功能

public function videos() 
{
    if ( ! $this->my_auth->logged_in())
    {
      redirect('auth/login', 'refresh');
    }

    $data['title'] = 'Upload Videos| My Idea Cloud';
    $data['heading'] = 'Upload Videos';
    $data['attributes'] = array(
      'class' => 'dropzone',
      'id' => 'video-dropzone'                
    );

    // get users style and set the correct style sheet
    $user_data = $this->my_auth->user()->row();

    if ($user_data->style == 'light')
    {
        $data['flat_css'] = 'flat-ui-light.css';
        $data['navbar_class'] = 'navbar-default';
        $data['footer_class'] = 'bottom-menu-default';
        $data['custom_css'] = 'custom-light.css';
        $data['dropzone_css'] = 'dropzone-light.css';
    }
    elseif ($user_data->style == 'dark')
    {
        $data['flat_css'] = 'flat-ui-dark.css';
        $data['navbar_class'] = 'navbar-inverse';
        $data['footer_class'] = 'bottom-menu-inverse';
        $data['custom_css'] = 'custom-dark.css';
        $data['dropzone_css'] = 'dropzone-dark.css';
    }
    else
    {
        $data['flat_css'] = 'flat-ui-dark.css';
        $data['navbar_class'] = 'navbar-inverse';
        $data['footer_class'] = 'bottom-menu-inverse';
        $data['custom_css'] = 'custom-dark.css';
        $data['dropzone_css'] = 'dropzone-dark.css';
    }

    $this->load->view('templates/frontend/front_header', $data);
    $this->load->view('templates/frontend/front_navbar');
    $this->load->view('frontend/upload_videos', $data);
    $this->load->view('templates/frontend/front_footer', $data);      

代码更多,所以我没有将两者结合起来。我只显示部分代码。

有人可以指导我如何整合我的代码吗?

【问题讨论】:

    标签: php html css codeigniter


    【解决方案1】:

    您的代码中没有使用elseif 块,如果您提取公共数据以通过数据传递,这是我能想到的一种最小化尝试。

    要应用此功能,请从您的代码中删除 ifelseifelse 块并放入,

    if($user_data->style == 'light')
    {
        $intensity = 'light';
        $default = 'default';
    }
    else
    {
        $intensity = 'dark';
        $default = 'inverse';
    }
    
    $data['flat_css']     = "flat-ui-{$intensity}.css";
    $data['navbar_class'] = "navbar-{$default}";
    $data['footer_class'] = "bottom-menu-{$default}";
    $data['custom_css']   = "custom-{$intensity}.css";
    $data['dropzone_css'] = "dropzone-{$intensity}.css";
    

    如果你想让它更通用,在同一个控制器中创建一个函数,

    function apply(&$data,$style)
    {
        if($style == 'light')
        {
            $intensity = 'light';
            $default = 'default';
        }
        else
        {
            $intensity = 'dark';
            $default = 'inverse';
        }
    
        $data['flat_css']     = "flat-ui-{$intensity}.css";
        $data['navbar_class'] = "navbar-{$default}";
        $data['footer_class'] = "bottom-menu-{$default}";
        $data['custom_css']   = "custom-{$intensity}.css";
        $data['dropzone_css'] = "dropzone-{$intensity}.css";
    }
    

    并将我的答案中显示的第一个代码块替换为一行

    $this->apply($data,$user_data->style);
    

    你会得到$data中定义的这五个变量

    【讨论】:

    • 谢谢!如果我希望这适用于我的所有观点,我该怎么做?每次我在控制器中添加带有视图的新功能时,我都不想添加这个。
    • 太棒了!我要试试这个。
    • 成功了!我将接受这个作为答案。这可以变成一个库,这样我就不必在每个控制器中创建这个函数,而只需加载这个库?
    • 我想我已经回答了我自己的问题。谢谢!
    • 或者,你可以在你的助手中复制相同的函数,并通过apply($data,$user_data->style);调用,这样会更好
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-03
    • 2012-06-27
    • 1970-01-01
    • 2018-01-21
    • 2019-12-04
    • 2023-03-25
    • 2012-03-03
    相关资源
    最近更新 更多