将新输入字段添加到产品插入表单Opencart

时间:2012-03-28 12:07:03

标签: php csv opencart

我需要在Opencart中的Opencart产品插入/添加表单中将自定义文件输入字段添加到其自己的选项卡,以将csv文件上载到mysql数据库中。我已将选项卡/字段添加到视图文件中,更新了语言文件,但我不确定我需要在控制器中做什么,以及模型以便将数据从上载的csv传递到数据库表中。

product_pins表:

pin_id (AI) | pin_product_id | pin_pin_number

csv文件数据(示例):

342353535345
345345346346
235434534634

我到目前为止:

控制器 admin/controller/catalog/product.php(第807行):

if (isset($this->request->post['product_pins']) ) {
    $this->data['product_pins'] = is_uploaded_file($this->request->post['product_pins']);
} else {
    $this->data['product_pins'] = '';
}

模型 admin/model/catalog/product.php(第7行):

if ( isset($this->data['product_pins']) ) {
    $handle = fopen($this->data['product_pins'], "r");
    while (($pins = fgetcsv($handle, 1000, ",")) !== false) {
        foreach ($pins as $pin) {
            $this->db->query("INSERT INTO " . DB_PREFIX . "product_pins SET pin_product_id = '" . (int)$product_id . "', pin_pin_number = '" . $this->db->escape($pin) . "'");
        }
    }
    fclose($handle);
}

我将不胜感激。

1 个答案:

答案 0 :(得分:1)

首先,CSV处理部分应位于控制器内,而不是模型类中。模型(当谈到正确的MVC时)应该只检索或设置数据并将它们传递给控制器​​或从控制器传递 - 然后应该操纵和控制它们并转发到前端视图(模板)或从前端视图(模板)获取。

其次:OpenCart中提交的文件存在于$this->request->files数组中。

最后:方法is_uploaded_file()返回boolean值,因此我不知道你怎么能解析boolean并从中创建文件句柄。

所以,让我们来看看吧......试试下面的代码。

<强>控制器:

if (is_uploaded_file($this->request->files['product_pins']['tmp_name'])) {
    $handle = fopen($this->request->files['product_pins']['tmp_name'], "r");
    while (($pins = fgetcsv($handle, 50, ",")) !== false) { // If we know there is only a 10 chars PIN per line it is better to lower the expected line length to lower the memory consumption...
       $this->data['product_pins'][] = $pins; // there is only one PIN per line
    }
    fclose($handle);
} else {
   $this->data['product_pins'] = array();
}

现在您(应该)将CSV文件中的所有PIN添加到$this->data['product_pins']数组 - 假设您正在将$this->data传递给模型,它应该包含以下代码:

<强>型号:

if (!empty($this->data['product_pins'])) {
    foreach ($this->data['product_pins'] as $pin) {
        $this->db->query("INSERT INTO " . DB_PREFIX . "product_pins SET pin_product_id = '" . (int)$product_id . "', pin_pin_number = '" . $this->db->escape($pin) . "'");
    }
}

希望这会有所帮助......