Я использую 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-> cart-> contents(), когда я отправил "добавить в корзину":
Array ( [c4ca4238a0b923820dcc509a6f75849b] => Array ( [rowid] => c4ca4238a0b923820dcc509a6f75849b [id] => 1 [qty] => 1 [price] => 100 [name] => T-shirt [option] => [subtotal] => 100 ) )
У меня заканчиваются идеи, которые пытаются получить динамическое значение внутри динамического цикла. Любые рекомендации действительно оценены.
Спасибо большое!
Проблема в этой части:
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.
Есть и другие способы сделать это, но я думаю, что это самый ясный и понятный.
Я бы создал массив options_values в контроллере (так что принесите option_values в виде строки через Model и объявите массив в контроллере, который будет содержать explode (',', option_values).
Затем используйте этот массив как источник для опции.
Надеюсь это поможет.