在foreach循环中获取动态值

时间:2014-11-10 16:33:36

标签: php codeigniter

我正在使用Codeigniter来编写购物车系统。试图研究,但无法弄清楚方法,我想在动态下拉列表中得到动态值“绿色/红色/黄色”,如下所示:

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-&gt; cart-&gt; contents()当我提交“添加到购物车”时:

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

我的想法已经用完了,试图在动态循环中获取动态值。任何建议都非常感谢。

非常感谢!

2 个答案:

答案 0 :(得分:0)

我会在控制器中创建option_values数组(所以通过Model将option_values作为字符串,并在控制器中声明一个包含explode(',',option_values)的数组。)

然后使用此数组作为'option'的源。

希望这有帮助。

答案 1 :(得分: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形式$ result。

还有其他方法可以做到这一点,但我认为这是最清晰,最容易理解的。