我正在使用Codeigniter来编写购物车系统。试图研究,但无法弄清楚方法,我想在动态下拉列表中得到动态值“绿色/红色/黄色”,如下所示:
以下是我的代码: 型号:
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 ) )
我的想法已经用完了,试图在动态循环中获取动态值。任何建议都非常感谢。
非常感谢!
答案 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。
还有其他方法可以做到这一点,但我认为这是最清晰,最容易理解的。