02.04.202007:1902.04.2020 07:19:52
Можно импортировать на стороне сервера агентами. Но на стороне клиента нагляднее, видно сразу, что не загрузилось, какие ошибки.
html php
<?CJSCore::init("ajax");?>
<input type="file" id="fileTires" accept="text"><br>
<button id="importStart">импортировать</button>
<div id="result"></div>
<table id="tableTires" border='1'></table>
|
javascript
$('#importStart').click(function(){
if (window.FileReader && window.Blob) {
// All the File APIs are supported.
var files = document.getElementById('fileTires').files;
if(files.length != 0){
var file = files[0];
if(file.name.slice(-4)=='.csv'){ //проверка по типу
var reader = new FileReader();
reader.onload = function(event) {
var contents = event.target.result;
var lines = contents.split("\n");
for (var i = 2; i<lines.length; i++) { //читаем со 2й строки
//что-то делаем с lines[i]
linestr = '<tr><td>'+data+'</td><td id="line'+i+'"></td></tr>';
$('#tableTires').append(linestr);
data = {
'sessid': BX.bitrix_sessid(),
'site_id': BX.message('SITE_ID'),
action: 'add',
line_id: i,
item: lines[i]
};
setTimeout(function(data){
BX.ajax({
url: '/tools/ajax.php',
method: 'POST',
data: data,
dataType: 'json',
async: true,
onsuccess: function(result){
//result.LINE_ID номер строки (data.line_id)
if (typeof(result.STATUS) != "undefined"){
if(result.STATUS == 0){
$('#line'+result.LINE_ID).html('Нет бренда или секции');
}
}
},
onfailure: function(error){
console.log(error);
}
});
},
100*i,
data
);
}
}
reader.onerror = function(event) {
$('#result').html("Файл не может быть прочитан! код " + event.target.error.code);
};
reader.readAsText(file,'cp1251');
}
else{
$('#result').html('Ошибка! тип файла не csv');
}
}
else {
$('#result').html('файл не выбран');
}
}
else {
// File and Blob are not supported
$('#result').html('браузер не поддерживает данную технологию');
}
}
|
файл на сервере php
<?
define("STOP_STATISTICS", true);
if(array_key_exists('site_id',$_REQUEST) && is_string($_REQUEST['site_id']))
if($_REQUEST['site_id'] !== '' && preg_match('/^[a-z0-9_]{2}$/i',$_REQUEST['site_id']) === 1)
define('SITE_ID',$_REQUEST['site_id']);
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
define("LOG_FILENAME", $_SERVER["DOCUMENT_ROOT"]."/bitrix/php_interface/log.txt");
use Bitrix\Main\Loader,
Bitrix\Main\Application;
CModule::IncludeModule("iblock");
CModule::IncludeModule("catalog");
CModule::IncludeModule("sale");
CUtil::JSPostUnescape();
if (!check_bitrix_sessid() || $_SERVER["REQUEST_METHOD"] != "POST")
return;
$arRes = array();
if (isset($_POST["action"]) && strlen($_POST["action"]) > 0){
if($_POST["action"]=="add"){
$add = 0;
$price = floor(intval($_POST["item"]["price"]));
if($_POST["item"]["kod"] != ""){
//выбираем по коду поставщика
$arSelect = Array("IBLOCK_ID", "ID");
$arFilter = Array("IBLOCK_ID"=>$arIblocks[$_POST["item"]["category"]],"PROPERTY_KOD_POST" => $_POST["item"]["kod"]);
$res = CIBlockElement::GetList(Array(), $arFilter, false, Array("nPageSize"=>1), $arSelect);
if($ob = $res->GetNextElement()){
//нашли по коду
$arFields = $ob->GetFields();
//обновляем
$el = new CIBlockElement;
$el->Update($arFields["ID"], array("MODIFIED_BY" => $USER->GetID(),"ACTIVE"=>"Y"));
CCatalogProduct::Update($arFields["ID"], array("QUANTITY"=>intval($_POST["item"]["quant"]))); //обновили доступное количество
CPrice::SetBasePrice($arFields["ID"],$price,'RUB'); //обновили цену
$add = 1;
$arRes["FIND"] = $arFields;
}
}
if($add == 0){
//ищем по параметрам, если нашли, то обновляем и код добавляем
//..
//
if($add==0){
//добавляем
}
}
$arRes["STATUS"] = $add;
$arRes["LINE_ID"] = $_POST["line_id"];
}
elseif($_POST["action"]=="deactive_old"){
$el = new CIBlockElement;
$i = 0;
$arSelect = Array("IBLOCK_ID", "ID", "NAME");
$arFilter = Array(
"IBLOCK_ID"=>$arIblocks,
"ACTIVE"=>"Y",
"<TIMESTAMP_X"=> array(ConvertTimeStamp(time()-30000 , "FULL"))
);
$res = CIBlockElement::GetList(Array(), $arFilter, false, Array("nPageSize"=>10000), $arSelect);
while($ob = $res->GetNextElement()){
$i++;
$arFields = $ob->GetFields();
$el->Update($arFields["ID"], array("ACTIVE"=>"N", 'TIMESTAMP_X' => FALSE));
}
$arRes = $i.' деактивировано';
}
}
$APPLICATION->RestartBuffer();
header('Content-Type: application/json; charset='.LANG_CHARSET);
echo CUtil::PhpToJSObject($arRes);
die();
|
02.04.202007:1902.04.2020 07:19:52