После добавления товара в корзину и обновления страницы пользователем, как я могу отобразить данные, которые добавлены в корзину? - PullRequest
0 голосов
/ 21 января 2019

Я использую корзину CodeIgniter.Я отображаю записи типа

Строка 1

AFGFD ANAND
trdsd@gmail.com

ActivityName   | duration        | price   | Action
cricket        | Select duration | 100     | Add to cart

Строка 2

POIUY ANAND
mnbsd@gmail.com

ActivityName   | duration        | price   | Action
cricket        | Select duration | 100     | Add to cart
Badminton      | Select duration | 200     | Add to cart

Примечание длительность - это выпадающий список, который ниже

<select name="memberDuration"  class="form-control dropdownDuration"> 
<option selected disabled >Select duration</option>  
<option value="12m">1 Year</option>
<option value="6m">6 months</option>
</select>

Ниже приведен окончательный код, который работает для.Также нет проблем с добавлением в корзину.Пользователь не может добавить один и тот же продукт более одного.

     foreach ($SActivity as $sec_data) {
      $counter = 0; // COUNTER FOR KNOWING POSITION IN ACTIVITIES LOOP              $num_activities = count($sec_data); // TOTAL NUMBER OF ACTIVITIES FOR THIS USER 

foreach ($sec_data as $row) { $counter++; // ADD +1 TO COUNTER FOR EACH
    ACTIVITY // ONLY PRINT OUT THE NAME AND TABLE HEADER IF FIRST ROW if($counter == 1){ ?>

    <h2>
      <?php echo $row->first_name;?>
      <?php echo $row->last_name;?>
    </h2>
    <p>
      <?php echo $row->email;?>
    </p>
    <table>
      <thead>
        <tr>
          <th>ActivityName</th>
          <th>duration</th>
          <th>price</th>
          <th>Action</th>
        </tr>
      </thead>
      <tbody>

        <?php } ?>

        <tr>
          <td>
            <?php echo $row->ActivityName;?>
          </td>
          <td>
            <select name="memberDuration" class="form-control dropdownDuration">
              <option selected disabled>Select duration</option>
              <option value="12m">1 Year</option>
              <option value="6m">6 months</option>
            </select>

          </td>
          <td>
            <div class="calActivitylPrice"></div>
          </td>

          <td>
            <div class="display_table">
              <?php echo $secActivity_Addtocart_active;?>
            </div>
          </td>

        </tr>

        <?php 
                // IF THIS IS THE LAST ACTIVITY OF THIS USER IN THE LOOP: PRINT TABLE END TAG
                if($counter == $num_activities){
                    echo '</tbody></table>';
                }
            } 
        }

пример добавленного товара.

POIUY ANAND
mnbsd@gmail.com

ActivityName   | duration | price   | Action
cricket        | 12m      | 100     | remove
Badminton      | 6m       | 200     | remove

До сих пор проблем не было.

Теперь я заметил, что я добавил товар в корзину иЯ обновляю страницу, затем мой выпадающий список, и цена не отображается.

Я имею в виду, что я добавил продукт с продолжительностью 1 year и в соответствии с выпадающим списком отображаю цену, используя ajax.

После добавления товара в корзину и обновления страницы, я получаю

POIUY ANAND
mnbsd@gmail.com

ActivityName   | duration        | price   | Action
cricket        | Select duration |         | remove
Badminton      | Select duration |         | remove

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

Я нашел какое-то решение, и оно работает.но проблема в том, что выпадающий список выбора отображается во всех опциях выбора, а цена не отображается в правильной активности.

Я получаю вывод, как.Я выбираю 1 год из выпадающего списка в первой строке, и он отображается во всей строке

Row 1

AFGFD ANAND
trdsd@gmail.com

ActivityName   | duration  | price   | Action
cricket        | 12m       | 100     | remove

Row 2

POIUY ANAND
mnbsd@gmail.com

ActivityName   | duration  | price   | Action
cricket        | 12m       | 200     | remove
Badminton      | 12m       |         | remove



 <tr>
      <td>
        <?php echo $row->ActivityName;?>
      </td>
      <td>
    <?php 
     $product['options']['duration']=0;
    if (in_array($activityNO, array_column($this->cart->contents(), 'id'))){
            foreach ($this->cart->contents() as $product) { 
               //break;
             } }?>
                  <select name="memberDuration"  class="form-control dropdownDuration"> 
        <option selected disabled >Select duration</option>  
                <option value="12m" <?php if($product['options']['duration'] == "12m"){ echo 'selected="selected"';} ?> >1 Year</option>
                <option value="6m" <?php if($product['options']['duration'] == "6m"){ echo 'selected="selected"';} ?>>6 months</option>
              </select>


      </td>
      <td>
        <div class="calActivitylPrice">

            <?php if (in_array($activityNO, array_column($this->cart->contents(), 'id'))){
            foreach ($this->cart->contents() as $product)  {
              if ($product['id'] == $activityNO) { 
                //print_r($product['price']);
                $priceAct = $product['price']; 
              }
              //
            }
                print_r($priceAct);
          }
      ?>
        </div>
      </td>
      <td>
        <div class="display_table">
          <?php echo $Addtocart_active;?>
        </div>
      </td>
    </tr>

Значение $ this-> cart-> contents ()

 Array
    (
        [dc54c1ce61893fa725cf87c9e20b4c78] => Array
            (
                [id] => 1
                [name] => cricket
                [qty] => 1
                [price] => 100
                [options] => Array
                    (
                        [duration => 12m
                    )

                [rowid] => dc54c1ce61893fa725cf87c9e20b4c78
            )

        [e5966e762beda1762e461f27f1dc3ef4] => Array
            (
                [id] => 2
                [name] => Badminton 
                [qty] => 1
                [price] => 200
                [options] => Array
                    (
                        [duration] => 6m
                    )

                [rowid] => e5966e762beda1762e461f27f1dc3ef4
            )

    )

1 Ответ

0 голосов
/ 21 января 2019

Обновление в соответствии с обновлением

В этом блоке

            foreach ($this->cart->contents() as $product) { 

Вы проверяете $ activityNO в добавленных корзинах, и, возможно, это правда, но в цикле foreach вы не получили правильное значение $ activityNO из содержимого корзины.

И, кстати, ваше решение не очень хорошее, вы используете много foreach.

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

<?php
$productsInCart = [];
// Loop and prepare data similar to below
foreach ($this->cart->contents() as $cart) {
    $productsInCart[$cart['id']] = $cart;
}
?>

<?php 
foreach ($sec_data as $row) {
    $activityNo = $row->activityNo; // I am not sure about this
?>

<h2>
  <?php echo $row->first_name;?>
  <?php echo $row->last_name;?>
</h2>

<select name="memberDuration" class="form-control dropdownDuration"> 
    <option <?php if (empty($productsInCart[$activityNo])) { echo 'selected="selected"';} ?> disabled >Select duration</option>  
    <option value="12m" <?php if($productsInCart[$activityNo]['options']['duration'] == "12m"){ echo 'selected="selected"';} ?> >1 Year</option>
    <option value="6m" <?php if($productsInCart[$activityNo]['options']['duration'] == "6m"){ echo 'selected="selected"';} ?>>6 months</option>
</select>

<?php
} // END foreach
?>

И примените ту же стратегию для цены ниже.

Примечание. Выше код только идея, он не работает на 100%.


Для этого вам необходимо использовать одно из предложенных ниже решений, в зависимости от ваших требований.

  1. Использование сессии для хранения информации о корзине
    • Сохранить корзину для пользователя Сессия, когда пользователь добавляет в корзину
    • Загрузить корзину из сеанса, если вы хотите ее прочитать (со страницы, которую вы хотите показать)
    • При таком способе данные корзины доступны только в области действия сеанса
  2. Использование базы данных для хранения информации о корзине
    • Хранить корзину в вашей базе данных, когда пользователь добавляет в корзину
    • Загрузить корзину из базы данных, если вы хотите ее прочитать (со страницы, которую вы хотите показать)
    • Более сложное решение, но это вечная корзина, которая может использоваться разными браузерами для одного пользователя.
...