получить динамическое значение внутри цикла foreach

0

Я использую Codeigniter для написания системы корзины покупок. Пытавшись исследовать, но неспособный понять путь, я хочу получить динамическое значение "Зеленый/Красный/Желтый" в динамическом раскрывающемся списке, как показано ниже:

Изображение 174551

Изображение 174551

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

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-> contents(), когда я отправил "добавить в корзину":

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

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

Спасибо большое!

Теги:
codeigniter

2 ответа

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;

Когда вы проходите такой цикл foreach, вы отключите $ value form $ result.

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

0

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню