Я пытаюсь создать модуль импорта XML, который преобразует данный файл в формат CSV, а затем использует этот CSV для импорта категорий и продуктов.Загрузка файла в панель конфигурации модуля, Prestashop
У меня есть рабочая страница конфигурации, созданная с помощью getContent(), она в основном вызывает метод, который генерирует эту форму через $ helper-> generateForm(). $ helper - это объект HelperForm().
protected function getConfigForm()
{
return array(
'form' => array(
'legend' => array(
'title' => $this->l('Settings'),
'icon' => 'icon-cogs',
),
'input' => array(
array(
'type' => 'file',
'label' => $this->l('XML file'),
'name' => 'XMLIMPORT_XML_FILE',
'desc' => $this->l('Select file you wish to import.'),
'required' => true
),
array(
'col' => 3,
'type' => 'text',
'prefix' => '<i class="icon icon-envelope"></i>',
'desc' => $this->l('Enter a valid email address'),
'name' => 'XMLIMPORT_LINES',
'label' => $this->l('Records per file'),
),
),
'submit' => array(
'title' => $this->l('Save'),
),
),
);
}
Мне нужно передать эти данные в мой XML-конвертер. Как загрузить файл (около 10-20 МБ) в Prestashop, чтобы он мог делать с ним другие вещи? Как сохранить его на сервере?
Я попытался сделать это:
return array(
'XMLIMPORT_XML_FILE' => Configuration::get('XMLIMPORT_XML_FILE', null),
'XMLIMPORT_LINES' => Configuration::get('XMLIMPORT_LINES', 1000)
);
И после того, что это:
$form_values = $this->getConfigFormValues(); // returned array from above
foreach (array_keys($form_values) as $key)
Configuration::updateValue($key, Tools::getValue($key));
И позже, используя свой собственный класс для преобразования XML, как это, в надежде, что это даст мне файл ручку.
$xml_converter = new XMLToCSVConverter(Configuration::get('XMLIMPORT_XML_FILE'), 'output', 'example_products.php');
По-видимому, это не произошло, поскольку ничего не происходит. Сам класс отлично работает за пределами модуля Prestashop. Конструктор - __construct($xml_file, $csv_filename, $template_file)
.
Мне нужно передать файл, который я загружаю в этот конструктор. Я уже много дней борется.
@edit: Я вижу содержимое файла внутри HTTP-вызова при нажатии на кнопку отправки. Но как передать этот файл в мой класс?
AFAIK PHP сохраняет все файлы, которые поступают из формы во временном состоянии, если только не перемещено в другое место. И в этом случае «XMLIMPORT_XML_FILE» содержит обработчик файла. Также я смущен, потому что $ _FILES пуст. –
Вы должны, вероятно, посмотреть массив $ _FILEs до рендеринга getContent – gskema