Импорт и экспорт редиректов в csv
Материал из Umicms
Актуально для версии 18.
Задача
Реализовать массовый импорт/экспорт редиректов для модуля Редиректы.
Решение
Для реализации данной задачи напишем небольшой standalone PHP скрипт для импорта и экспорта редиректов. В корне сайта создаем файл redirect.php в который помещаем следующий код:
<?php
require_once('standalone.php');
if (isset($_REQUEST['list'])) {
$list = json_decode($_REQUEST['list']);
$umiRedirectsCollection = umiRedirectsCollection::getInstance();
foreach ($list as $obj)
$redirect = $umiRedirectsCollection->create([
'source' => $obj->s, // перенаправление с этого адреса
'target' => $obj->t, // перенаправление на этот адрес
'status' => $obj->st, // статус перенаправления
'made_by_user' => $obj->fl, // флаг принудительного редиректа
'field_name_prefix' => 'data[new]'
]);
echo "ok";
} elseif (isset($_REQUEST['get'])) {
$umiRedirectsCollection = umiRedirectsCollection::getInstance();
$redirects = $umiRedirectsCollection->export([
'offset' => 0,
'limit' => 1000,
'count' => 1,
'like_mode' => [],
'compare_mode' => []
]);
echo json_encode($redirects);
} else {
?>
<html>
<head>
<title>Redirects</title>
<meta charset="utf-8">
<style type="text/css">
* {
margin: 0;
}
.but {
padding: 10px;
}
.cont {
margin: 10px;
}
</style>
</head>
<body>
<div class='cont'>
<textarea id="textarea" name="list"></textarea>
<br>
<input id="output_redd" class="but" type="button" value="Получить редиректы">
<input id="input_redd" class="but" type="button" value="Отправить редиректы">
<input id="clear" class="but" type="button" value="Очистить">
</div>
<script>
function xhrajax(data,rType,func) {
var xhr = new XMLHttpRequest;
xhr.open("POST", location.href, true);
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
xhr.onreadystatechange = function() {
if(xhr.readyState == 4) {
if(xhr.response) {
func(xhr.response);
} else {
alert("Что-то пошло не так");
}
}
};
xhr.responseType = rType;
xhr.send(data);
}
window.onload = function() {
textarea.style.width = window.innerWidth/2;
textarea.style.height = 500;
input_redd.onclick = function() {
if(confirm("Вы действительно хотите записать редиректы?")) {
data = [];
ptext = textarea.value;
regexp = /'(.+)','(.+)','(.+)','(.+)'/g;
var r;
var str = "";
while ((r = regexp.exec(ptext)) !== null) {
data.push({'s':r[1],'t':r[2],'st':r[3],'fl':(+r[4]?true:false)})
}
xhrajax("list="+JSON.stringify(data),"document",function(r){
alert("Редиректы добавлены");
});
}
};
output_redd.onclick = function() {
xhrajax("get=1","json",function(res){
var str = "";
for(var i in res) {
str += "'"+res[i]['source']+"','";
str += res[i]['target']+"','";
str += res[i]['status']+"','";
str += (res[i]['made_by_user']?1:0)+"'\n";
}
textarea.value = str;
});
}
clear.onclick = function() {
textarea.value = "";
}
}
</script>
</body>
</html>
<?
}
Кнопка Получить редиректы записывает редиректы в поле textarea в формате csv.
Кнопка Отправить редиректы записывает редиректы в csv формате из поля textarea в модуль Редиректы.
Кнопка Очистить очищает поле textarea.