Прежде всего - часть обработки 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-файла в массив $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) . "'");
}
}
Надеюсь, это поможет ...