Подтвердить что ты не робот

Designer Design - multi subview - попытка добавить один мастер

Приветствую, я не совсем уверен, как реализовать свое видение в моем проекте.

Запуск, просто сосредоточьтесь на контроллере заказа.

Итак, мой заказ состоит из многих подзаголовков. Например, детали, история, адрес, прикрепленные файлы, заметки и т.д. Я помещаю их в интерфейс вкладки jQuery.

Покажите некоторый код.

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>

В моем примере представление $widget представляет собой подвид, который является виджетами с инструментами, такими как различные кнопки редактирования/добавления для каждого отдельного активного TabSub. $Main_content - это представление html для каждого человека.

И теперь для контроллера [Order]

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

Как вы можете себе представить, у меня есть 9 из этих функций просмотра для каждой ссылки. Проблема начинается, когда я хотел бы иметь некоторые данные. i.e данные клиента по всем этим 9 subviews - вызывается только один раз, не на каждой странице [вкладка]. Я не совсем уверен, хорош ли мой проект. У вас есть предложения?

4b9b3361

Ответ 1

если ваша вкладка меню работает, вы можете буферизировать все ваши представления в один. Я предполагаю, что вы используете bootstrap из своего образца кода. Вот как они предлагают вам написать свою разметку для вкладок. http://getbootstrap.com/javascript/#tabs-examples Для их работы может потребоваться некоторая конфигурация javascript, поэтому вам нужно будет внимательно прочитать документы. Я сам не сам ботстрап, поэтому я могу немного помочь с этим.

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

Чтобы создать главный шаблон для обертывания всех ваших представлений, вам нужно расширить класс CI_Controller и просто установить свойство, называемое шаблоном, которое укажет на ваш шаблон

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

вид/шаблон/index.php Это ваш основной вид, который мы создали, расширив 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)
       ));
   }
}

Ответ 2

ok - предисловие к этому, оговорившись, что стиль кодирования является личным, и некоторые люди не согласятся вообще с тем, что я собираюсь предложить.

мое впечатление о том, что вы делаете, - это то, что вы пытаетесь сделать все как в контроллере, так и в представлении. прямо здесь этот код в вашем контроллере

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

Это слишком специфично. контроллер должен быть боссом высокого уровня, - что вы не беспокоитесь о деталях низкого уровня. "Получите мне это из базы данных - она ​​вернулась? Если да, тогда сделайте это, если вы этого не сделаете".

введите другой путь - детали низкого уровня будут постоянно меняться. вы должны планировать эти изменения. и вы не хотите постоянно менять контроллеры, потому что любая ошибка приведет к снижению вашего приложения.

так что для каких моделей. снова люди будут спорить с этим и сказать, что это не должно быть Библиотеки или Помощники или что-то еще. дело в том, что вы хотите изолировать эти детали низкого уровня, и вы хотите поместить их в место, где это имеет смысл. так что через шесть месяцев вы можете посмотреть имена файлов и иметь приличную идею, когда вам нужно идти, чтобы делать обновления. его лучше иметь 10 моделей с конкретными именами и конкретными задачами, а затем несколько супермоделей, которые пытаются сделать слишком много.

и говоря о попытке сделать слишком много - реорганизовать эти методы контроллера, чтобы они не пытались делать так много разных вещей. например, почему вы будете собирать кучу данных, если вы собираетесь показать 404, потому что $seg не существует? проверка правильности $seg должна быть первой задачей. если он действителен, переходите к следующему методу. и если он недействителен, то не показывать 404 - показать вежливую страницу, которая является специфической для ошибки. то, когда это произойдет, у вас есть шанс выяснить, в чем проблема.

Наконец, я бы предложил - сделайте ваш шаблон макета полностью нейтральным - другими словами, нет html-кода. он просто вызывает другие взгляды. снова, что это делает? он подталкивает детали низкого уровня, такие как html и код компоновки CSS, к их собственным файлам. шаблон макета просто вызывает представления макета. поэтому, когда вам нужно внести изменения, его ясность, куда идти, и если вы сделаете ошибку, вы не внезапно принесете свой шаблон - вы ограничили его файлом вида, с которым будет гораздо легче справиться.