【问题标题】:Opencart: Insert bulk products, product_id not uniqueOpencart:插入批量产品,product_id 不唯一
【发布时间】:2013-04-03 10:38:10
【问题描述】:

我刚刚看到一些来自 opencart 的扩展,这些扩展更新了 产品列表页面中的产品,我尝试了我的 opencart 项目,很有趣...现在我开始为我的 opencart 项目开发一个新的扩展,即: 插入Bulk product到管理员...一次最多可以添加10个产品,填写产品表格后点击保存按钮这10个产品可以存储到数据库...每个产品表格只有5个以下表单字段,

  • 价格
  • 数量
  • 型号
  • 姓名
  • 状态

我可以使用 opencart 默认的产品编辑页面来添加额外的细节/选项/描述,当插入这个批量产品时,只有以下 3 个表格与我的查询相关,

  • 产品
  • product_description
  • product_to_store

我尝试了一些代码,我的问题是当我单击保存按钮表productproduct_description 数据插入功能成功,但product_id 不是这两个表中唯一的,例如如果product 表@987654325 @ 然后product_descriptionproduct_id = 5,我需要这3 个表product_id 必须像我们默认的opencart 插入工作一样唯一...任何想法..??

我在这里尝试了什么...... 表格

<input type="text" name="product_description[<?php echo $language['language_id']; ?>][name]" value="<?php echo isset($product_description[$language['language_id']]) ? $product_description[$language['language_id']]['name'] : ''; ?>" />
<input type="text" name="model" value=""  />
<input type="text" name="quantity" value=""  />
<input type="text" name="price" value=""  />
<select name="stock_status_id">
<?php foreach ($stock_statuses as $stock_status) { ?>
<?php if ($stock_status['stock_status_id'] == $stock_status_id) { ?>
<option value="<?php echo $stock_status['stock_status_id']; ?>" selected="selected"><?php echo $stock_status['name']; ?></option>
<?php } else { ?>
<option value="<?php echo $stock_status['stock_status_id']; ?>"><?php echo $stock_status['name']; ?></option>
<?php } ?>
<?php } ?>
</select>

控制器

public function simple_pu() {
    $this->load->language('catalog/product');

    $this->document->setTitle($this->language->get('heading_title'));

    $this->load->model('catalog/product');

    if (isset($this->request->post['selected']) && $this->validateSimplePu()) {
        $url = '';

        foreach ($this->request->post['selected'] as $product_id) {

        $price_str = $product_id.'_price';
        $quantity_str = $product_id.'_quantity';
        $model_str = $product_id.'_model';
        $name_str = $product_id.'_name';
        $status_str = $product_id.'_status';

        $price = $this->request->post[$price_str];
        $quantity = $this->request->post[$quantity_str];
        $model = $this->request->post[$model_str];
        $name = $this->request->post[$name_str];
        $status = $this->request->post[$status_str];

        $su_data = array('price' => $price, 'quantity' => $quantity, 'model' => $model, 'name' => $name, 'status' => $status);
        $this->model_catalog_product->editPrices($product_id, $su_data);
        }

        $this->redirect($this->url->link('catalog/product', 'token=' . $this->session->data['token'] . $url, 'SSL'));
    }
    $this->getListbulk();
}

型号

public function addBulkproduct($product_id, $su_data) {     
    if (isset($su_data['product'])) {
        $this->db->query("INSERT INTO " . DB_PREFIX . "product SET price = '" . $this->db->escape($su_data['price']) . "', model = '" . $this->db->escape($su_data['model']) . "', quantity = '" . $this->db->escape($su_data['quantity']) . "', student_id = '" . (int)$student_id . "', date_added = NOW()");
    }

    if (isset($su_data['product_description'])) {
        $this->db->query("UPDATE " . DB_PREFIX . "product_description SET name = '" . $this->db->escape($su_data['name']) . "' WHERE product_id = '" . (int)$product_id . "'");
    }
}

仅此而已.... 上面的代码只是一个结构如果您知道任何与我的问题相关的扩展,您可以建议我...

谢谢...

【问题讨论】:

    标签: php mysql e-commerce opencart


    【解决方案1】:

    您必须更新您的模型。检查/admin/model/catalog/product.php 和方法addProduct() - 插入产品后,您必须检索$product_id,所以在您的模型中应该是这样的:

    public function addBulkproduct($su_data) {     
        if (isset($su_data['product'])) {
            $this->db->query("INSERT INTO " . DB_PREFIX . "product SET price = '" . $this->db->escape($su_data['price']) . "', model = '" . $this->db->escape($su_data['model']) . "', quantity = '" . $this->db->escape($su_data['quantity']) . "', student_id = '" . (int)$student_id . "', date_added = NOW()");
    
            $product_id = $this->db->getLastId();
    
            // INSERT INTO PRODUCT TO STORE
            $this->db->query("INSERT INTO " . DB_PREFIX . "product_store (store_id, product_id) SELECT store_id, " . (int)$product_id . " FROM " . DB_PREFIX . "store");
    
            if (isset($su_data['product_description'])) {
                $this->db->query("INSERT INTO " . DB_PREFIX . "product_description SET name = '" . $this->db->escape($su_data['name']) . "', product_id = '" . (int)$product_id . "'");
            }
        }
    }
    

    请注意,您不再将 $product_id 作为方法参数传递 - 产品被插入,新 ID 被生成,并且该 ID 的描述被存储。此外,产品描述也没有更新,而是作为新插入!仅在插入产品时才存储产品描述 - 即使没有产品数据,存储产品描述也是没有意义的......

    您也应该为产品描述行设置language_id

    【讨论】:

    • @shadyyx...你是对的...我只是想念它 $product_id = $this->db->getLastId();感谢您的回答,现在可以工作了
    • 我上面的问题我尝试过的所有事情,成功......但仍然没有更多关于将 product_id 插入存储表的想法,我的 opencart 有两个商店也 id=0,id=2... 任何主意。?谢谢
    • 在添加新的批量产品时,您必须获取所有商店 ID 并将链接 store_idproduct_id 存储到 product_store 表中...与 @987654328 中的方式相同@ 和方法 addProduct().
    • 我认为您应该尝试自己实现一些目标。您是否查看了我建议的模型文件?我猜不会。我们不会为您做所有的工作 - 我们只建议解决方案,建议如何解决并最终解决问题。这个问题只是“我不知道该怎么做” - 这确实是一个基本知识(INSERT INTO),在查看模型后我建议你应该能够解决这个问题。如果我为你写完整的解决方案,你什么都学不到……而 SO 的目的是让人们学习。
    • 我可以理解,但我的问题不是关于 opencart 默认产品插入结构,它与此完全不同,这里当批量产品插入表 mysql 查询时我可以计算,但我尝试获得两个商店我的表单中的 id 有错误,这就是为什么最后我问你一个建议,无论如何谢谢..
    猜你喜欢
    • 2011-12-22
    • 2015-02-23
    • 2012-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多