2016-04-28 14 views
12

Lời chào Tôi không hoàn toàn chắc chắn làm thế nào để hoàn thành tầm nhìn của tôi hướng tới trong dự án của tôi.Thiết kế Bộ điều khiển - multi subview - cố gắng thêm một chủ

Bắt đầu, chỉ cần tập trung vào bộ điều khiển Đơn đặt hàng.

Vì vậy, đơn hàng của tôi bao gồm nhiều bản xem trước. Ví dụ, chi tiết, lịch sử, địa chỉ, tập tin đính kèm, ghi chú, vv Tôi đặt chúng trên một giao diện tab jQuery.

Hãy hiển thị một số mã.

layout.php

<div class="page-content"> 
     <div class="row"> 
     <div class="col-md-12"> 
     <ul class="nav nav-tabs responsive hidden-xs hidden-sm"> 

     <li class="<?php echo ($activeTabSub === "1") ? "active" : ""; ?>"> 
      <a href="<?PHP echo base_url();?>x/y/<?PHP echo $zgl; ?>">Master details</a> 
     </li> 
     <li class="<?php echo ($activeTabSub === "2") ? "active" : ""; ?>"> 
      <a href="<?PHP echo base_url();?>x/y/<?PHP echo $zgl; ?>">History</a> 
     </li> 
     <li class="<?php echo ($activeTabSub === "wyk") ? "active" : ""; ?>"> 
      <a href="<?PHP echo base_url();?>x/y/<?PHP echo $zgl; ?>">Address</a> 
     </li> 
     <li class="<?php echo ($activeTabSub === "3") ? "active" : ""; ?>"> 
      <a href="<?PHP echo base_url();?>x/y/<?PHP echo $zgl; ?>">Files</a> 
     </li> 
     <li class="<?php echo ($activeTabSub === "4") ? "active" : ""; ?>"> 
      <a href="<?PHP echo base_url();?>x/y/<?PHP echo $zgl; ?>">Notes</a> 
     </li> 
     <li class="<?php echo ($activeTabSub === "7") ? "active" : ""; ?>"> 
      <a href="<?PHP echo base_url();?>x/y/<?PHP echo $zgl; ?>">ETC</a> 
     </li> 
      <li class="<?php echo ($activeTabSub === "8") ? "active" : ""; ?>"> 
      <a href="<?PHP echo base_url();?>x/y/<?PHP echo $zgl; ?>">ETC</a> 
     </li> 
     <li class="<?php echo ($activeTabSub === "9") ? "active" : ""; ?>"><a href="<?PHP echo base_url();?>x/y/<?PHP echo $zgl; ?>">ETC</a> 
     </li> 
     </ul> 
     </div> 
     </div> 
     <?PHP $this->load->view($widget,$activeTabSub); ?> 
     <?PHP $this->load->view($main_content,$activeTabSub); ?> 
</div> 

Trong ví dụ của tôi, quan điểm $ Widget là một subview mà là một tiện ích với các công cụ, như chỉnh sửa khác nhau/thêm các nút cho mỗi activeTabSub cá nhân. $ Main_content là chế độ xem html cho từng cá nhân.

Và bây giờ cho bộ điều khiển [Đặt hàng]

public function functiontolink1() 
    { 
     $data['main_content'] = 'x/y'; 
     $data['widget'] = 'x/widget'; 
     $data['heading'] = ""; 
     $data['activeTab'] = 'pzlec'; 
     $data['activeTabSub'] = '2'; 
     $data['strona'] = 'text'; 
     $data['dzial'] = 'text'; 
     $seg= $this->uri->segment(3); 
     $data['zgl'] = $seg; 
     if(isset($seg)){ 
      $data['pracownicy'] = $this->Zlecenia_model->pracownicy($zgloszenie); 
      switch($this->userGroup){ 
        case 1 : 
          $data['main_content'] = 'x/y'; 
        break; 
        case 2 : 
          $data['main_content'] = 'x/y'; 
        break; 
        case 3 : 
         $data['widget'] = 'Client/x/widget'; 
         $data['main_content'] = 'Client/x/y'; 
        break; 
        default: show_404(); break; 

       } 
       $this->load->view('Client/x/layout',$data); 

     }else{ 
      show_404(); 
     } 
    } 

    public function functiontolink2() 
    { 

     $data['widget'] = 'x/widget'; 
     $data['heading'] = ""; 
     $data['activeTab'] = 'pzlec'; 
     $data['activeTabSub'] = '2'; 
     $data['strona'] = 'text'; 
     $data['dzial'] = 'text'; 
     $seg= $this->uri->segment(3); 
     if(isset($seg)){ 
      $data['zgl'] = $seg; 
      $data['json'] = $this->Zlecenia_model->getSingle($zgloszenie); 
      $vvv= json_decode($data['json']); 
      $data['client'] = $this->Order_model->getclient($vvv[0]->klient); 
      switch($this->userGroup){ 
        case 1 : 
          $data['main_content'] = 'x/y'; 
        break; 
        case 2 : 
          $data['main_content'] = 'x/y'; 
        break; 
        case 3 : 
         $data['widget'] = 'Client/x/widget'; 
         $data['main_content'] = 'Client/x/y'; 
        break; 
        default: show_404(); break; 

       } 
       $this->load->view('Client/x/layout',$data); 
      $this->load->view('zgloszenie/layout',$data); 
     }else{ 
      show_404(); 
     } 
    } 

Như bạn có thể tưởng tượng, tôi có 9 của các chức năng này xem cho mỗi liên kết. Sự cố bắt đầu khi tôi muốn có một số dữ liệu i.e Dữ liệu khách hàng trên tất cả 9 bản xem trước - chỉ được gọi một lần không phải mọi trang đều nhấn [tab]. Tôi không hoàn toàn chắc chắn nếu nỗ lực thiết kế của tôi là tốt cả. Bạn có một số gợi ý?

+0

Bạn có thể xóa điều này bằng ví dụ không. Thật khó hiểu. –

+0

Đáng buồn thay, đó là điều tốt nhất tôi có thể mô tả –

+0

Nói chung, ý tưởng của nhiều trang phụ có thể kế thừa dữ liệu từ nội dung chính mà không thực hiện truy vấn chính trên mỗi trang con tôi sẽ nói như vậy –

Trả lời

2

nếu tab của bạn menu đang hoạt động, bạn có thể lưu tất cả lượt xem thành một. Tôi giả sử bạn đang sử dụng bootstrap từ mã mẫu của bạn. Đây là cách họ đề xuất bạn viết đánh dấu cho các tab. http://getbootstrap.com/javascript/#tabs-examples Một số cấu hình javascript có thể được yêu cầu để chúng hoạt động, vì vậy bạn cần phải đọc kỹ tài liệu. Tôi không phải là một anh chàng bootstrap bản thân mình, vì vậy tôi có thể cung cấp ít giúp đỡ với điều đó.

<ul class="nav nav-tabs" role='tablist'> 
    <li role="presentation" class='active'> 
     <a href='#widget1' data-toggle="tab">widget1</a> 
    </li> 
    <li role="presentation"> 
     <a href='#widget2' data-toggle="tab">widget2</a> 
    </li> 
</ul> 

<section class='tab-content'> 
    <div class='tab-pane active' id='widget1'> 
     <?php $this->load->view($widget1); ?> 
    </div> 
    <div class='tab-pane' id='widget2'> 
     <?php $this->load->view($widget2); ?> 
    </div> 
</section> 

Để xây dựng một mẫu tổng thể để quấn xung quanh tất cả quan điểm của bạn, bạn sẽ muốn mở rộng các lớp CI_Controller và chỉ cần đặt một tài sản được gọi là mẫu, mà sẽ trỏ đến mẫu của bạn

class MY_Controller extends CI_Controller 
{ 
    public $template; 

    public function __construct(){ 
     parent::__construct(); 
     // set the template in the constructor 
     // as this is where you should assign variables 
     // If you had an admin controller, you would create an admin controller 
     // extending this one, and override the $template variable. 
     $this->template = 'template/index' // views/template/index.php 
    } 
} 

views/template/index.php Đây là cái nhìn tổng thể của bạn chúng tôi tạo ra bằng cách mở rộng CI_Controller

<html> 
    <head></head> 
    <body> 
    <?php 
     // load "view" variable ANY controller sends us 
     $this->load->view($view); 
    ?> 
    </body> 
</html> 

class Controller extends MY_Controller //extending the MY_Controller 
{ 
    public function index() 
    { 
     $data = array('username'=>'stackoverflow'); 

     return $this->load->view($this->template, array(
      'view' => 'your_main_view_with_tab_menu', 
      // the next two views are buffered as a string 
      // so you can easily inject them into your main tab menu view 
      // by setting the third paramter as true 
      'widget1' => $this->load->view('widget1_view', array('data' => $data), true), 
      'widget2' => $this->load->view('widget2_view', array('data' => $data), true) 
     )); 
    } 
} 
+0

Điều này dường như cho tôi là giải pháp tốt nhất, bạn có thể thêm mã nhiều hơn cho cái này không? Tôi không biết chủ đề này xuất phát từ đâu. Bên cạnh đó khi nói đến truy vấn tôi muốn được truy cập globaly trong chỉ mục chức năng. Cho phép nói rằng tôi nhấn #first_link, truy vấn sẽ thực hiện và khi tôi nhấn #second_link, nó có thể sẽ quá, nó được gọi là được gọi một lần nếu có thể –

2

ok - mở đầu này bằng cách từ chối trách nhiệm rằng kiểu mã hóa là cá nhân, và một số người sẽ không đồng ý với những gì tôi sẽ đề nghị.

ấn tượng của tôi về những gì bạn đang làm - là bạn đang cố gắng làm mọi thứ trong bộ điều khiển hoặc chế độ xem.ngay tại đây mã này trong bộ điều khiển của bạn

$data['main_content'] = 'x/y'; 
     $data['widget'] = 'x/widget'; 
     $data['heading'] = ""; 
     $data['activeTab'] = 'pzlec'; 
     $data['activeTabSub'] = '2'; 
     $data['strona'] = 'text'; 
     $data['dzial'] = 'text'; 

đây là cách quá cụ thể. một bộ điều khiển nên là một ông chủ cấp cao - rằng bạn không bận tâm với các chi tiết mức thấp. "Đưa tôi cái này từ cơ sở dữ liệu - nó có quay trở lại không? Nếu có thì hãy làm điều này. Nếu bạn không làm vậy."

đặt một cách khác - chi tiết cấp thấp sẽ thay đổi liên tục. bạn phải lên kế hoạch cho những thay đổi đó. và bạn không muốn thay đổi bộ điều khiển của bạn liên tục vì bất kỳ lỗi nào sẽ khiến ứng dụng của bạn bị hỏng.

để xem Mô hình là gì. một lần nữa mọi người sẽ tranh luận với điều này và nói không có nó nên là thư viện hoặc người giúp đỡ hay bất cứ điều gì. vấn đề là bạn muốn cô lập những chi tiết mức thấp này và bạn muốn đặt chúng ở một nơi có ý nghĩa. Vì vậy, sáu tháng kể từ bây giờ bạn có thể nhìn vào tên tập tin và có một ý tưởng phong nha, nơi bạn cần phải đi để thực hiện cập nhật. nó tốt hơn để có 10 mô hình với tên cụ thể và nhiệm vụ cụ thể, sau đó một vài mô hình siêu đang cố gắng làm quá nhiều.

và nói về cố gắng làm quá nhiều - refactor những phương pháp điều khiển để họ không cố gắng để làm rất nhiều điều khác nhau. ví dụ tại sao bạn sẽ kéo một loạt dữ liệu nếu bạn định hiển thị 404 vì $ seg không có ở đó? kiểm tra nếu $ seg là hợp lệ nên là nhiệm vụ đầu tiên. nếu nó hợp lệ thì hãy chuyển sang phương thức tiếp theo. và nếu nó không hợp lệ thì không hiển thị 404 - hiển thị trang lịch sự cụ thể cho lỗi. sau đó khi nó xảy ra bạn có cơ hội để tìm ra vấn đề là gì.

cuối cùng tôi sẽ đề xuất - làm cho mẫu bố cục của bạn hoàn toàn trung lập - nói cách khác là không có mã html. nó chỉ gọi các khung nhìn khác. một lần nữa nó làm gì? nó đẩy các chi tiết mức thấp - như mã bố trí html và css - tới các tệp riêng của chúng. mẫu bố cục chỉ gọi các chế độ xem bố cục. do đó, khi bạn cần thực hiện thay đổi, rõ ràng phải đi đâu và nếu bạn mắc lỗi, bạn không đột ngột đưa mẫu của mình xuống - bạn đã giới hạn nó với một tệp xem, sẽ dễ xử lý hơn nhiều.

Các vấn đề liên quan