не удается найти отправку данных с контроллера на просмотр. но это работает. [Codeigniter]

#php #codeigniter

#php #codeigniter

Вопрос:

Извините. Я использую Codeigniter для создания корзины покупок, и вот подробная информация о проблеме.

  • Я хочу отправить данные с контроллера на другую страницу просмотра. данные, которые я хочу, — это количество товара, которое пользователь нажимает на кнопку «добавить в корзину» (я хочу отобразить количество товара на footer.php просмотр.)
  • Я копирую исходный код из другого, поэтому у меня есть некоторый момент, когда я не понимаю его код.
  • я не понимаю, как он отправляет данные из контроллера методом «добавить» к имени представления «покупки / корзина», потому что я не нашел что-то вроде $this-> load-> view(‘покупки / корзина’, $ data)
  • если я хочу отправить те же данные в footer.php просмотр тоже. Как мне следует поступить?

Контроллер

 <?php if (!defined('BASEPATH')) exit('No direct script access allowed');

class Shopping extends CI_Controller {

    public function __construct()
    {
        parent::__construct();
        //load model
        $this->load->model('billing_model');
        $this->load->library(array('cart', 'form_validation'));
    }

    public function index()
    {   
        $this->load->view('header');
                //Get all data from database
        $data['products'] = $this->billing_model->get_all();
                //send all product data to "shopping_view", which fetch from database.      
        $this->load->view('shopping/shopping_view', $data);

        $this->load->view('footer');
    }


    public function add()
    {
              // Set array for send data.
        $insert_data = array(
            'id' => $this->input->post('id'),
            'name' => $this->input->post('name'),
            'price' => $this->input->post('price'),
            'qty' => 1
        );      

                 // This function add items into cart.
        $this->cart->insert($insert_data);

                // This will show insert data in cart.
        $this->load->view('header');
        $this->load->view('shopping/cart');
        $this->load->view('footer');
         }

    public function remove($rowid) 
    {
                    // Check rowid value.
        if ($rowid==="all"){
                       // Destroy data which store in  session.
            $this->cart->destroy();
        }else{
                    // Destroy selected rowid in session.
            $data = array(
                'rowid'   => $rowid,
                'qty'     => 0
            );
                     // Update cart data, after cancle.
            $this->cart->update($data);
        }

                 // This will show cancle data in cart.
        redirect('shopping/add');
    }

    public function update_cart()
    {

                // Recieve post values,calcute them and update
                $cart_info =  $_POST['cart'] ;
        foreach( $cart_info as $id => $cart)
        {   
                    $rowid = $cart['rowid'];
                    $price = $cart['price'];
                    $amount = $price * $cart['qty'];
                    $qty = $cart['qty'];

                        $data = array(
                'rowid'   => $rowid,
                                'price'   => $price,
                                'amount' =>  $amount,
                'qty'     => $qty
            );

            $this->cart->update($data);
        }
        redirect('shopping/add');        
    }   
  

некоторый код в shopping/cart.php просмотр

 <div id="cart" >
            <div id = "heading">
                <h2 align="center">Products on Your Shopping Cart</h2>
            </div>

                <div id="text"> 
            <?php  $cart_check = $this->cart->contents();

            // If cart is empty, this will show below message.
             if(empty($cart_check)) {
             echo 'To add products to your shopping cart click on "Add to Cart" Button'; 
             }  ?> </div>

                <table id="table" border="0" cellpadding="5px" cellspacing="1px">
                  <?php
                  // All values of cart store in "$cart". 
                  if ($cart = $this->cart->contents()): ?>
                    <tr id= "main_heading">  <!--เขียนแบบนี้ก็ได้เหมือนecho ต่อจากifนั่นเอง-->
                        <td>Product ID</td>
                        <td>Name</td>
                        <td>Price</td>
                        <td>Qty</td>
                        <td>Amount</td>
                        <td>Cancel Product</td>
                    </tr>
                    <?php
                     // Create form and send all values in "shopping/update_cart" function.
                    echo form_open('shopping/update_cart');
                    $grand_total = 0;
                    $i = 1;

                    foreach ($cart as $item):
                        //   echo form_hidden('cart[' . $item['id'] . '][id]', $item['id']);
                        //  Will produce the following output.
                        // <input type="hidden" name="cart[1][id]" value="1" />

                        echo form_hidden('cart[' . $item['id'] . '][id]', $item['id']);
                        echo form_hidden('cart[' . $item['id'] . '][rowid]', $item['rowid']);
                        echo form_hidden('cart[' . $item['id'] . '][name]', $item['name']);
                        echo form_hidden('cart[' . $item['id'] . '][price]', $item['price']);
                        echo form_hidden('cart[' . $item['id'] . '][qty]', $item['qty']);
                        ?>
                        <tr>
                            <td>
                       <?php echo $i  ; ?>
                            </td>
                            <td>
                      <?php echo $item['name']; ?>
                            </td>
                            <td>
                                $ <?php echo number_format($item['price'], 2); ?>
                            </td>
                            <td>
                            <!--
                             $data = array(
                              'maxlength' => '3',
                              'size' => '1',
                              'type' => 'number',
                              'style' => 'text-align:right'
                            ); -->
                            <?php echo form_input('cart[' . $item['id'] . '][qty]', $item['qty'], "maxlength='3' size='1' style='text-align: right'"); ?>
                            </td>
  

некоторый код в shopping_view.php

 <?php    foreach ($products as $product) { ?>
    <form action="shopping/add" method="post" target="hiddenFrame">
    <?php

     echo form_hidden('id', $product['product_id']);
     echo form_hidden('name', $product['name']);   
     echo form_hidden('price', $product['price']); 
     echo form_submit($btn); ?>
  

Комментарии:

1. Какая ваша библиотека с именем cart загружается с помощью «$this-> load-> library(array(‘cart'»

Ответ №1:

Он использует корзину библиотеки codeigniter. Смотрите документацию библиотеки cart — http://www.codeigniter.com/user_guide/libraries/cart.html

Добавление товаров в библиотеку корзины в контроллере..

 $this->cart->insert($data);
  

Затем извлеките добавленные продукты из представления, используя

 $this->cart->contents();
  

Вы также можете использовать тот же метод для получения продуктов для вашего нижнего колонтитула

Комментарии:

1. Вы имеете в виду, что это не требуется $this-> load-> view(‘покупки/ корзина’, $data)? Хм .. звучит как сессия

2. да, я пытаюсь написать $this-> cart-> contents(); на странице просмотра нижнего колонтитула. но это работает только тогда, когда я использую метод контроллера «добавить», но если я перейду к другому методу контроллера, это не сработает. (все методы контроллера имеют вид нижнего колонтитула) Пожалуйста, помогите мне T_T