【问题标题】:Shopping cart cakephp+bootstrap modal购物车 cakephp+bootstrap 模态
【发布时间】:2015-11-16 03:15:19
【问题描述】:

我的购物车系统使用 cakephp + bootstrap 模式时出现问题。问题是当我单击/选择我的一张图片时,它会添加到购物车中,但它总是会显示我数据库中的最后一项/数据。即使我选择了第一项,它仍然会显示我数据库中的最后一项/数据。请帮我解决这个问题。

CartsController.php

class CartsController extends AppController {

public $uses = array('Sidedish','Cart');

public function add() {
    $this->autoRender = false;
    if ($this->request->is('post')) {
        $this->Cart->addProduct($this->request->data['Cart']['product_id']);
    }
    echo $this->Cart->getCount();
}

public function view() {
    $carts = $this->Cart->readProduct();
    $side_dishes = array();
    if (null!=$carts) {
        foreach ($carts as $productId => $count) {
            $side_dish = $this->Sidedish->read(null,$productId);
            $side_dish['Sidedish']['count'] = $count;
            $side_dishes[]=$side_dish;
        }
    } 
    $this->set(compact('side_dishes'));
            print_r($carts);
            print_r($side_dishes);
}}

views/Orders.ctp -> 这是我需要点击商品以显示在购物车中的地方。

                  <div class="col-sm-12">
                  <?php echo $this->Form->create('Cart',array('id'=>'add-form','url'=>array('controller'=>'carts','action'=>'add')));?>
                  <ul class="list-inline">
                      <?php foreach ($side_dish as $sidedish):?>
                      <li>
                        <?php echo $this->Form->hidden('product_id',array('value'=>$sidedish['Sidedish']['sidedish_id'])); ?>
                        <?php 
                        echo $this->Form->submit(//$sidedish['Sidedish']['sidedish_id'],
                                '',array(
                'name'=>'submit',
                                    'style'=>'height:130px;width:200px;'
                                    . 'background-repeat:no-repeat;'
                                    . 'border:none;'
                                    . 'background-image:url(/webapp' .$sidedish['Sidedish']['sidedish_img']. ')'));
                        ?>
                        <h5 class="text-center"><?php echo $sidedish['Sidedish']['sidedish_name'];?></h5>
                        <h5 class="text-center">$<?php echo $sidedish['Sidedish']['sidedish_price'];?></h5>
                      </li>
                      <?php endforeach;?>
                  </ul>
                  <?php echo $this->Form->end();?>

              </div>

有些人告诉我问题出在我的views/orders.ctp 中的foreach 循环,有些人告诉我问题出在控制器中。我不确定问题出在哪里。请需要帮助的人。

【问题讨论】:

  • 问题出在视图中:您正在循环浏览您的产品,但您创建了许多隐藏的输入,它们都具有相同的名称product_id。当您提交表单时,每个输入都会覆盖最后一个输入,最后只会将最后一个输入发送到操作。
  • 我明白了。是的。我也注意到它,但我想不出一个简单的方法来解决它。如果你有什么想法,可以分享给我吗?
  • 如果您想使用 POST 发送数据,您可以使用 Form-&gt;postlink()。但我会简单地使用链接而不是按钮,通过查询字符串发送数据。
  • 您好,感谢您的建议。我会尝试并希望它会奏效。

标签: cakephp shopping-cart bootstrap-modal


【解决方案1】:

能否请您出示此功能的代码$this-&gt;Cart-&gt;addProduct()

<?php
App::uses('AppModel', 'Model');
App::uses('CakeSession', 'Model/Datasource');

class Cart extends AppModel {

    public $useTable = false; 

    /*
     * add a product to cart
     */
    public function addProduct($productId) {
        $allProducts = $this->readProduct();
        if (null!=$allProducts) {
            if (array_key_exists($productId, $allProducts)) {
                $allProducts[$productId]++;
            } else {
                $allProducts[$productId] = 1;
            }
        } else {
            $allProducts[$productId] = 1;
        }

        $this->saveProduct($allProducts);
    }

    /*
     * get total count of products
     */
    public function getCount() {
        $allProducts = $this->readProduct();

        if (count($allProducts)<1) {
            return 0;
        }

        $count = 0;
        foreach ($allProducts as $product) {
            $count=$count+$product;
        }

        return $count;
    }

    /*
     * save data to session
     */
    public function saveProduct($data) {
        return CakeSession::write('cart',$data);
    }

    /*
     * read cart data from session
     */
    public function readProduct() {
        return CakeSession::read('cart');
    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-01
    • 2011-12-19
    相关资源
    最近更新 更多