2017-04-15 15 views
0

我有一個控制器,顯示我的每個位置如何確保foreach循環的數據顯示在正確的設置位置可欣賞

Array 
(
    [0] => Array 
     (
      [layout_module_id] => 1 
      [layout_id] => 1 
      [module_id] => 1 
      [position] => column_left 
      [sort_order] => 1 
     ) 

    [1] => Array 
     (
      [layout_module_id] => 2 
      [layout_id] => 1 
      [module_id] => 2 
      [position] => column_left 
      [sort_order] => 2 
     ) 

) 

上述模塊目前我只有兩個模塊設置和處於的位置左欄。

由於位置視圖位於foreach循環的外側,即使未設置該位置,它們也正在拾取該模塊?如圖所示。

enter image description here

enter image description here

問:我怎樣才能確保該模塊將只在其設定位置視圖顯示。

public function index() { 
    $layout_id = $this->getlayoutID($this->router->class); 

    $modules = $this->getlayoutsmodule($layout_id); 

    echo '<pre>'; 
    print_r($modules); 
    echo "</pre>"; 

    $data['modules'] = array(); 

    foreach ($modules as $module) { 
     $this->load->library('module/question_help'); 
     $data['modules'][] = $this->load->view('module/question_help', $this->question_help->set(), TRUE); 
    } 

    // Position Views 
    $data['column_left'] = $this->load->view('column_left', $data, TRUE); 
    $data['column_right'] = $this->load->view('column_right', $data, TRUE); 
    $data['content_top'] = $this->load->view('content_top', $data, TRUE); 
    $data['content_bottom'] = $this->load->view('content_bottom', $data, TRUE); 

    // Main view 
    $this->load->view('welcome_message', $data); 
} 

public function getlayoutsmodule($layout_id) { 
    $this->db->select('*'); 
    $this->db->from('layouts_module'); 
    $this->db->where('layout_id', $layout_id); 
    $query = $this->db->get(); 

    if ($query->num_rows() > 0) { 
     return $query->result_array(); 
    } 
} 

每個位置的看法具有相同的foreach循環

<?php if ($modules) { ?> 
<?php foreach ($modules as $module) { ?> 
<?php echo $module;?> 
<?php } ?> 
<?php }?> 

主視圖

<div class="container"> 
    <div class="row"> 
    <?php echo $column_left; ?> 

    <?php if ($column_left && $column_right) { ?> 
    <?php $class = 'col-sm-6'; ?> 
    <?php } elseif ($column_left || $column_right) { ?> 
    <?php $class = 'col-sm-9'; ?> 
    <?php } else { ?> 
    <?php $class = 'col-sm-12'; ?> 
    <?php } ?> 

    <div id="content" class="<?php echo $class; ?>"> 
    <?php echo $content_top; ?> 
    <h1>Welcome to CodeIgniter!</h1> 

    <div id="body"> 
    <p>The page you are looking at is being generated dynamically by CodeIgniter.</p> 

    <p>If you would like to edit this page you'll find it located at:</p> 
    <code>application/views/welcome_message.php</code> 

    <p>The corresponding controller for this page is found at:</p> 
    <code>application/controllers/Welcome.php</code> 

    <p>If you are exploring CodeIgniter for the very first time, you should start by reading the <a href="user_guide/">User Guide</a>.</p> 
    </div> 

    <p class="footer">Page rendered in <strong>{elapsed_time}</strong> seconds. <?php echo (ENVIRONMENT === 'development') ? 'CodeIgniter Version <strong>' . CI_VERSION . '</strong>' : '' ?></p> 

    <?php echo $content_bottom; ?> 
    </div> 
    <?php echo $column_right; ?></div> 
</div> 
+0

您的意見的代碼是什麼? – inarilo

+0

因此,您希望每個視圖都顯示for循環中生成的所有數據,或僅顯示爲其相應位置生成的數據?因爲你的視圖顯示所有的數組項目。 – inarilo

+0

你會在歡迎視圖中需要那些生成的值嗎?或者你會僅僅訪問傳遞的位置特定視圖? – inarilo

回答

1

如果庫需要是我會做這樣的(不知道在每次迭代中加載,但將其留在那裏):

$tmpdata = array(); 
foreach ($modules as $module) { 
    $this->load->library('module/question_help'); 
    $tmpdata[$module['position']]['modules'][] = $this->load->view('module/question_help', $this->question_help->set(), TRUE); 
} 

$data = array(); 
foreach ($tmpdata as $pos => $mods) { 
    $data[$pos] = $this->load->view($pos, $tmpdata[$pos], TRUE); 
} 

$this->load->view('welcome_message', $data); 

傳遞$tmpdata[$pos]到每個位置的看法,使稱爲$modules可用的陣列,所以在觀點,正如之前使用

if ($modules) { 
    foreach ($modules as $module) { 
     echo $module; 
    } 
} 

這使它保持動態,如果您更改或添加頭寸,則不必修改此代碼。我使用兩個數據數組只是爲了避免傳遞不必要的數據。

+0

我會盡力讓你知道在這一週。 – user4419336

+0

我做了一個測試,如果一個位置沒有在數據庫中設置,它現在拋出錯誤。未定義的變量:column_right我怎樣才能確定一個職位不在數據庫中,然後不會顯示該錯誤? – user4419336

+0

它似乎將column_right作爲變量處理?你能告訴我上面的哪一行會拋出這個錯誤嗎?如果你想完全忽略沒有位置設置的行,你可以在你的sql中使用WHERE條件來檢查「IS NOT NULL」或「<>'''(取決於你如何存儲值)。 – inarilo

相關問題