2014-11-10 5 views
0

Я использую Codeigniter для написания системы корзины покупок. Пытались исследования, но не может понять, каким образом, я хочу, чтобы получить динамическое значение «зеленый/красный/желтый» в динамическом раскрывающемся списке, как показано ниже:получить динамическое значение внутри цикла foreach

Select

Database Table

Ниже мой код: Модель:

class Products_model extends CI_Model { 


    public function get_all() { 
     $result = $this->db->get('products'); 

     foreach ($result->result() as $value) { 
      if ($value->option_values){ 
       $value->option_values = explode(',', $value->option_values); 
      } 
     } return $result; 
    } 

контроллер:

class Shopping_cart extends CI_Controller { 

    public function __construct() { 
     parent::__construct(); 
     $this->load->helper('html'); 
     $this->load->model('products_model'); 
     $this->load->library('cart'); 
    } 



    public function index() { 

     $data['records'] = $this->products_model->get_all(); 
     $data['main'] = 'shopping_cart_view'; 
     $this->load->view('templates/shopping_cart', $data); 
    } 

    public function add() { 
     //If the product is not listed, perform insert 

     $data = array(
      'id' => $this->input->post('id'), 
      'qty' => $this->input->post('quantity'), 
      'price' => $this->products_model->get_by_id($this->input->post('id'))->price, 
      'name' => $this->products_model->get_by_id($this->input->post('id'))->name, 
      'option' => '' //I want to get the dynamic values in dropdown list and put in to this option array. 
     ); 
     $this->cart->insert($data); 
     redirect('shopping_cart'); 


     } 

Вид:

<?php 

    //List products 
    foreach ($records->result() as $value) : 

     echo form_open('shopping_cart/add'); 
?> 

<?php //List the dropdown if value has option i.e color/size/type 
     if ($value->option_name) 
     :?> 
      <?php echo form_label($value->option_name, $value->id)?> 
      <?php echo form_dropdown(
        $value->option_name, 
        $value->option_values 
      )?> 

     <?php endif;?> 

<?php 
      echo form_hidden('id', $value->id); 
      echo form_submit('submit', 'Add to cart'); 
     ?> 

<?php echo form_close();?> 
<?php endforeach; ?> 

И ниже $ this-> cart-> содержание(), когда я представил "добавить в корзину":

Array ([c4ca4238a0b923820dcc509a6f75849b] => Array ([rowid] => c4ca4238a0b923820dcc509a6f75849b [id] => 1 [qty] => 1 [price] => 100 [name] => T-shirt [option] => [subtotal] => 100)) 

Я бегу из идей попытаться получить динамическое значение внутри динамического цикла. Любые рекомендации действительно оценены.

Спасибо!

+0

'option' в представленных данных пуст. не имеет значения, что вы делаете в CI, чтобы прочитать это значение - оно все равно будет пустым. вам нужно выяснить, почему ваша форма не создает форму правильно, чтобы на самом деле вернуть эти значения цвета. –

+0

Привет, Марк, Спасибо за ответ. Я использую form_dropdown() для представления значения, а в HTML это как 1,2,3 ниже: Зеленый Red Так я хочу, чтобы получить имя значения не 1,2,3 – SonDang

+0

тогда вам необходимо либо вставить имя цвета в качестве значения, например '' или иметь сопоставление на сервере, чтобы вы могли делать переводы '0-> green'. –

ответ

0

Я бы создал массив параметров option_values ​​в контроллере (так что принесите option_values ​​как строку через Model и объявите массив в контроллере, который будет содержать взорваться (',', option_values).

Затем используйте этот массив как источник для опции.

Надеюсь, это поможет.

0

Проблема заключается в этой части:

foreach ($result->result() as $value) { 
     if ($value->option_values){ 
      $value->option_values = explode(',', $value->option_values); 
     } 
} 

return $result; 

$value действительна только в том, как вы сделали это, во время выполнения метода. Он не сохраняется в результате $ result. Вы должны были бы сделать что-то вдоль этих линий:

$new_result = array(); 
foreach ($result->result() as $value) { 
     if ($value->option_values){ 
      $value->option_values = explode(',', $value->option_values); 
     } 

     $new_result[] = $value; 

} 

return $new_result; 

Когда вы собираетесь через петлю Еогеасп, как это, вы отключаете $ значение формы $ результата.

Есть и другие способы сделать это, но я думаю, что это самое ясное и понятное.

Смежные вопросы