2012-03-28 2 views
2

Мне нужно добавить пользовательское поле ввода файла на свою вкладку в форме вставки/добавления продукта в Opencart в Opencart, чтобы загрузить файл csv в базу данных mysql. Я добавил вкладку/поле в файл вида, обновил языковые файлы, но не уверен, что мне нужно делать именно в контроллере, и модель, чтобы передать данные из загруженного csv в таблицу базы данных.Добавление нового поля ввода в форму ввода продукта Opencart

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); 
} 

Я был бы признателен за любую помощь.

+0

привет, не могли бы вы опубликовать ссылку или хотя бы пастебин сгенерированного html, я предполагаю, что это что-то простое, потому что имена полей opencart не имеют никаких основных трюков. – Jonathan

+0

Вы получаете сообщение об ошибке? Что происходит при попытке ввода? – Cleverbot

ответ

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 добавляется в $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) . "'"); 
    } 
} 

Надеюсь, это поможет ...

Смежные вопросы