簡體   English   中英

連接兩個模型/控制器以在一頁上允許兩個視圖

[英]Joining two models/controllers to allow two views on one page

我已經從github安裝了這個簡單任務板codeigniter應用程序 該應用程序有3個主要頁面

  1. 顯示到項目鏈接的儀表板
  2. 一個項目視圖,其中顯示了任務的鏈接
  3. 帶有有關單個任務信息的任務視圖

項目詳細信息以及任務都在其自己的模型和控制器中進行設置。 就目前而言,項目視圖顯示了一個任務列表,但是為了添加新任務,它必須將您傳遞到從任務MVC加載的另一個視圖。

我的問題是在項目視圖上獲取“添加任務”表格的最佳方法是什么。 我對MVC相對較新,但是我知道我不應該嘗試使用當前設置進行詢問,即我不應該嘗試從另一個控制器中的一個視圖加載視圖。 最好的策略是嘗試將兩個單獨的MVC結合在一起,還是我應該放棄嘗試並重新編寫整個內容?

我確實嘗試使用庫將控制器類從一個MVC傳遞到另一個,但最終出現許多數據庫錯誤。 我以為這不是一個好計划?


更新-添加了額外的代碼:

public function tasks($project_id)
{
    $this->load->helper('stb_date');
    $this->load->helper('tasks');

    // Check permission
    if(!$this->usercontrol->has_permission('project', 'tasks'))
        redirect('dashboard');

    // Load tasks
    $this->load->model('task_model');
    $tasks = $this->task_model->get($project_id);

    foreach ($tasks as $task) {
        if ($task['status'] == 0) {
            $data['stories'][] = $task;
        } elseif ($task['status'] == 1) {
            $data['tasks'][] = $task;
        } elseif ($task['status'] == 2) {
            $data['tests'][] = $task;
        } elseif ($task['status'] == 3) {
            $data['done'][] = $task;
        }
    }

    // Load project info
    $this->load->model('project_model');
    $project = $this->project_model->get($project_id);

    $this->title = "Project: {$project['name']}";
    $this->menu = 'dashboard|edit_project|new_task';

    $data['project_id']    = $project_id;

    $data['current_user'] = $this->session->userdata('user');

    $db_users = $this->project_model->get_related_users($project_id);
    $users = array();
    foreach ($db_users as $user) {
        $users[$user['id']] = $user;
    }
    $data['users'] = $users;

    // Load text helper to be used in the view
    $this->load->helper('text');

    // Load View
    $this->load->view('task_board', $data);


    //new code added here
    $task_data['parent_id']      = 0;
    $task_data['title']          = '';
    $task_data['description']    = '';
    $task_data['priority']       = '2';
    $task_data['due_date']     = '';

    $project = '1';
    $task_data['project_id'] = $project;
    $task_data['users']      = $this->task_model->get_related_users($project);
    $task_data['user_id']    = $this->session->userdata('user');
    $task_data['tasks']      = $this->task_model->get_hierarchy($project);

    if($this->error)
        $task_data['error'] = $this->error;
    $task_data['task_data'] = $this->load->view('task_add',$task_data,true);
}

我使用CI的次數很多,目前有點類似,但是請注意,如果您剛開始使用MVC。 曾經維護它的公司正在尋找新所有者: http : //ellislab.com/blog/entry/ellislab-seeking-new-owner-for-codeigniter

至於您的問題,此視圖看起來像是您要復制/移動的視圖: https : //github.com/oscardias/Simple-Task-Board/blob/master/application/views/task_add.php

這一切都非常容易,但是第91-93行有一些隱藏的ID,您可能不會在項目視圖頁面上找到它們。 在選擇視圖之前,您不會得到它。 因此,您可能需要略微重寫它,以包括項目的下拉列表或向其中添加任務的內容。

我可能會在“項目”頁面中調用該task_add.php視圖,因此您沒有兩個副本。 如果$ project_id存在,則顯示隱藏字段,否則顯示項目下拉列表。

視圖與控制器或模型之間並沒有真正的硬聯系。 通常,控制器是中間人,控制視圖獲取的數據(通常由模型提供)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM