Last active
July 18, 2019 09:26
-
-
Save andronex/873a9d82799e52de4febc8fe560d44b3 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
require(MODX_BASE_PATH.'parser/phpquery-master/phpQuery/phpQuery.php'); | |
$modx->addPackage('easycomm', $modx->getOption('core_path') . 'components/easycomm/model/', 'kr0n0s_'); | |
$modx->loadClass('ecMessage'); | |
// Сколько ресурсов обрабатывать за раз | |
$step = 1; | |
// Если процесс уже остановлен, сбрасываем OFFSET | |
if (!isset($_SESSION['Console']['completed'])) { | |
$_SESSION['console_offset'] = 0; | |
} | |
$offset = isset($_SESSION['console_offset']) && $_SESSION['console_offset'] ? $_SESSION['console_offset'] : 0; | |
//функция скачивания и сохранения картинок | |
function downloadImg($image, $urlImages){ | |
global $modx; | |
//if (!file_exists(dirname(__FILE__).'/thumbs/'.$image)) { | |
$ch = curl_init($urlImages); | |
curl_setopt($ch, CURLOPT_HEADER, 0); | |
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); | |
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1); | |
$file_get = curl_exec($ch); | |
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); | |
if($httpCode == 404) { | |
return; | |
} | |
if(!file_put_contents(dirname(__FILE__).'/thumbs/'.$image, $file_get)){ | |
$modx->log(modX::LOG_LEVEL_ERROR, "Неудача при скачивании картинки товара {$urlImages}"); | |
return ''; | |
} | |
curl_close($ch); | |
//} | |
return dirname(__FILE__).'/thumbs/'.$image; | |
} | |
//функция добавления к товару картинок | |
function addImages($image, $res_id, $pagetitle){ | |
if ($image) { | |
global $modx; | |
$modx->setLogLevel(modX::LOG_LEVEL_ERROR); | |
$response_img = $modx->runProcessor('gallery/upload', | |
array('id' => $res_id, 'name' => $pagetitle, 'file' => $image), | |
array('processors_path' => MODX_CORE_PATH.'components/minishop2/processors/mgr/') | |
); | |
if ($response_img->isError()) { | |
$modx->log(modX::LOG_LEVEL_ERROR, "Ошибка привязки картинки \"{$image}\" к товару id = {$res_id}: \n". print_r($response_img->getAllErrors(), 1)); | |
} | |
else { | |
$sql = "UPDATE {$modx->getTableName('msProductFile')} SET `name` = \"{$pagetitle}\" WHERE `product_id` = {$res_id};"; | |
$stmt = $modx->prepare($sql); | |
$stmt->execute(); | |
$stmt->closeCursor(); | |
unset($sql, $stmt); | |
unlink($image); | |
//$modx->log(modX::LOG_LEVEL_INFO, "Удачно загружена картинка \"$image\": \n". print_r($response_img->getObject(), 1)); | |
return true; | |
} | |
} | |
return false; | |
} | |
//функция получения страницы по URL | |
function get_web_page( $url ){ | |
$options = array( | |
CURLOPT_RETURNTRANSFER => true, // return web page | |
CURLOPT_HEADER => false, // don't return headers | |
CURLOPT_FOLLOWLOCATION => false, // follow redirects | |
CURLOPT_ENCODING => "", // handle all encodings | |
CURLOPT_USERAGENT => "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17", // who am i | |
CURLOPT_AUTOREFERER => true, // set referer on redirect | |
CURLOPT_CONNECTTIMEOUT => 120, // timeout on connect | |
CURLOPT_TIMEOUT => 120, // timeout on response | |
CURLOPT_MAXREDIRS => 10, // stop after 10 redirects | |
); | |
$ch = curl_init( $url ); | |
curl_setopt_array( $ch, $options ); | |
$content = curl_exec( $ch ); | |
$err = curl_errno( $ch ); | |
$errmsg = curl_error( $ch ); | |
$header = curl_getinfo( $ch ); | |
curl_close( $ch ); | |
$header['errno'] = $err; | |
$header['errmsg'] = $errmsg; | |
$header['content'] = $content; | |
return $header; | |
} | |
function get_meta($url_goods = ''){ | |
$page = get_web_page($url_goods); | |
unset($document); | |
if($page['http_code'] == 404) return array('longtitle' => '', 'description' => ''); | |
$document = phpQuery::newDocument($page['content']); | |
$pagetitle = $document->find('title')->text(); | |
$field['longtitle'] = $pagetitle; | |
//$h1 = $document->find('h1')->text(); | |
//$field['pagetitle'] = $h1; | |
//$menutitle = $document->find('.pathway ul > li:last')->text(); | |
//$field['menutitle'] = $menutitle; | |
$description = $document->find('meta[name="description"]')->attr('content'); | |
$field['description'] = $description; | |
$tv3 = $document->find('a.one_man_img_link')->attr('href'); | |
$field['tv3'] = (ltrim($tv3, "/"))?:''; | |
$title_complectation = $document->find('.title_complectation')->text(); | |
$field['title_complectation'] = ($title_complectation)?:''; | |
return $field; | |
} | |
//ф-ия создания новых ресурсов | |
function createProduct($prop, $filtersArray = array(), $gallery = array(), $parents = array(), $artForAlias = '', $tplProduct = 6) { | |
//return 'upd';//временно | |
global $modx; | |
$q = $modx->newQuery('msProduct'); | |
$q->select($modx->getSelectColumns('msProduct','msProduct').','.$modx->getSelectColumns('msProductData','Data').','.$modx->getSelectColumns('msProductOption','Option')); | |
$q->innerJoin('msProductData', 'Data', 'msProduct.id = Data.id'); | |
$q->rightJoin('msProductOption', 'Option', 'msProduct.id = Option.product_id'); | |
$q->where(array('msProduct.parent' => $prop['parent'], 'msProduct.alias' => $prop['alias'])); | |
$q->prepare(); | |
if($modx->getObject('msProduct', $q)) { | |
return; | |
} | |
$modx->error->message = null; | |
$response = $modx->runProcessor('resource/create', $prop, | |
array('processors_path' => MODX_CORE_PATH.'model/modx/processors/') | |
); | |
if ($response->isError()) { | |
return $response->getAllErrors(); | |
} | |
$resource = $response->getObject(); | |
//доп. категории только если их более одной в массиве $productTree[$prop['product_id']], начиная со второй, первая основная (parent) | |
if(count($parents) > 0){ | |
foreach ($parents as $catProduct){ | |
$category = $modx->newObject('msCategoryMember'); | |
$category->set('category_id', $catProduct); | |
$category->set('product_id', $resource['id']); | |
$category->save(); | |
} | |
} | |
//привязка фильтров к товару и к категории товара из массива фильтров $productFilters и массива фильтров товара $filtersArray | |
if(is_array($filtersArray)){ | |
foreach($filtersArray as $keyF => $valF){ | |
if(!$valF) continue; | |
if($keyF == 'color') continue; | |
if(is_array($valF)){ | |
foreach($valF as $valF_inner){ | |
$optionProduct = $modx->newObject('msProductOption'); | |
$optionProduct->set('product_id', $resource['id']); | |
$optionProduct->set('key', $keyF); | |
$optionProduct->set('value', $valF_inner); | |
$optionProduct->save(); | |
} | |
} | |
else{ | |
$optionProduct = $modx->newObject('msProductOption'); | |
$optionProduct->set('product_id', $resource['id']); | |
$optionProduct->set('key', $keyF); | |
$optionProduct->set('value', $valF); | |
$optionProduct->save(); | |
} | |
/*if($temp = $modx->getObject('msOption', array('key' => $keyF))){ | |
$optionId = $temp->get('id'); | |
$categoryId = $res->get('parent'); | |
if( !$modx->getObject('msCategoryOption', array('option_id' => $optionId, 'category_id' => $categoryId)) ){ | |
$optionCat = $modx->newObject('msCategoryOption'); | |
$optionCat->set('option_id', $optionId); | |
$optionCat->set('category_id', $categoryId); | |
$optionCat->set('active', 1); | |
$optionCat->save(); | |
} | |
unset($optionId, $categoryId); | |
} | |
unset($temp);*/ | |
} | |
} | |
//удаление пустых значений фильтров из таблицы фильтров в БД | |
$sql = "DELETE FROM {$modx->getTableName('msProductOption')} WHERE `product_id` IN ({$resource['id']}) AND (`value`='' OR `value` IS NULL);"; | |
$stmt = $modx->prepare($sql); | |
$stmt->execute(); | |
$stmt->closeCursor(); | |
unset($sql, $stmt); | |
//привязка картинок | |
//дополнительных | |
if(isset($gallery)){ | |
foreach($gallery as $imgs){ | |
addImages($imgs, $resource['id'], $prop['pagetitle']); | |
} | |
} | |
$prod_id = $resource['id']; | |
unset($res, $resource); | |
return $prod_id; | |
} | |
$q = 'SELECT id FROM `com_catalog`'; | |
$c = new xPDOCriteria($modx, $q); // connect to the MODX DB | |
$rows = array(); | |
if ($c->stmt && $c->stmt->execute()) | |
{ | |
while ($row = $c->stmt->fetch(PDO::FETCH_ASSOC)) | |
{ | |
$goods[] = $row; | |
} | |
} | |
//print_r(count($goods)); | |
$total = count($goods); | |
//echo $total; | |
$a = 1; | |
$ab = 0; | |
$offset_continue = 0; | |
foreach($goods as $good){ | |
if($ab < $offset){ | |
$ab++; | |
continue; | |
} | |
$prop = array('class_key' => 'msProduct', 'tvs' => 1, 'context_key' => 'web'); | |
$options = array(); | |
//$good['id'] = 12430; | |
$q_goods = 'SELECT Product.*, | |
Product.text AS Product_text, | |
Product.title AS Product_title, | |
Product.sostav AS Product_sostav, | |
Product.material AS Product_material, | |
Product.filler AS Product_filler, | |
Product.articul AS Product_articul, | |
Manufacturer.*, Alias.* FROM `com_catalog` AS Product | |
LEFT JOIN `com_catalog_mans` AS Manufacturer ON Manufacturer.id = Product.id_man | |
LEFT JOIN `_pages_link_component` AS LinkAlias ON LinkAlias.id_id = Product.id | |
LEFT JOIN `_aliases` AS Alias ON Alias.id_page = LinkAlias.id_page | |
WHERE Product.id = '.$good['id'] . ' ORDER BY Alias.id_page ASC'; | |
$c = new xPDOCriteria($modx, $q_goods); // connect to the MODX DB | |
$goods_row = array(); | |
if ($c->stmt && $c->stmt->execute()) | |
{ | |
while ($row = $c->stmt->fetch(PDO::FETCH_ASSOC)) | |
{ | |
$goods_row[] = $row; | |
} | |
} | |
//print_r($goods_row); | |
$uri_cat = array(); | |
$url_goods = ''; | |
$id_manufacturer = 0; | |
foreach($goods_row as $good_row){ | |
$uri = explode('/', $good_row['alias']); | |
if(count($uri) <= 1){ | |
continue; | |
} | |
//$prop['alias'] = ($prop['alias'])?:end($uri); | |
if(!$prop['alias']){ | |
$prop['alias'] = end($uri); | |
$url_goods = 'https://umex.ru/'.$good_row['alias']; | |
} | |
if($prev = prev($uri)){ | |
$uri_cat[] = $prev; | |
} | |
$prop['publishedon'] = $prop['createdon'] = $good_row['ts']; | |
$prop['published'] = $good_row['status']; | |
$prop['pagetitle'] = $good_row['Product_title']?:$good_row['title']; | |
$prop['content'] = $good_row['Product_text']; | |
$options['material_text'] = $good_row['text']; | |
$options['sostav'] = $good_row['sostav']?:$good_row['Product_sostav']; | |
$options['material'] = $good_row['material']?:$good_row['Product_material']; | |
$options['filler'] = $good_row['filler']?:$good_row['Product_filler']; | |
$prop['new'] = $good_row['is_new']; | |
$prop['popular'] = $good_row['is_hit']; | |
$prop['article'] = $good_row['articul']?:$good_row['Product_articul']; | |
$prop['made_in'] = $good_row['show_title']; | |
$id_manufacturer = $good_row['id_man']; | |
} | |
array_unique($uri_cat); | |
//print_r($prop['alias'] . '||'); | |
//print_r($uri_cat); | |
if(!$prop['alias'] || empty($uri_cat)){ | |
$offset_continue++; | |
continue; | |
} | |
$i = 1; | |
$parents = array(); | |
foreach($uri_cat as $uri_category){ | |
if($category_main = $modx->getObject('msCategory', array('alias' => trim($uri_category)))){ | |
if($i == 1){ | |
//основная категория | |
$prop['parent'] = $category_main->id; | |
} | |
else{ | |
//доп.категории | |
$parents[] = $category_main->id; | |
} | |
$i++; | |
} | |
} | |
//выборка категорий товаров и их алиасов | |
$q_cats = 'SELECT Cats.*, Alias.* FROM `com_catalog_cats` AS Cats | |
LEFT JOIN `_pages_link_component` AS LinkAlias ON LinkAlias.id_id = Cats.id | |
LEFT JOIN `_aliases` AS Alias ON Alias.id_page = LinkAlias.id_page | |
WHERE Cats.id IN (SELECT `id_catalog_cat` FROM `com_catalog_link_cats` WHERE id_catalog = '.$good['id'].')'; | |
$c = new xPDOCriteria($modx, $q_cats); // connect to the MODX DB | |
$cats_row = array(); | |
if ($c->stmt && $c->stmt->execute()) | |
{ | |
while ($row = $c->stmt->fetch(PDO::FETCH_ASSOC)) | |
{ | |
$cats_row[] = $row; | |
} | |
} | |
$uri_cat = array(); | |
foreach($cats_row as $cat_row){ | |
$uri = explode('/', $cat_row['alias']); | |
if(count($uri) <= 1){ | |
continue; | |
} | |
if($end = end($uri)){ | |
$uri_cat[] = $end; | |
} | |
} | |
array_unique($uri_cat); | |
foreach($uri_cat as $uri_category){ | |
if($category_main = $modx->getObject('msCategory', array('alias' => trim($uri_category)))){ | |
if($prop['parent'] != $category_main->id){ | |
$parents[] = $category_main->id; | |
} | |
} | |
} | |
array_unique($parents); | |
//выборка размеров товаров, их названий и цен, комплектаций | |
$q_sizes_complectation = 'SELECT SizeName.*, Sizes.*, Complectation.* FROM `com_catalog_link_property_size` AS Sizes | |
LEFT JOIN `com_catalog_property_size` AS SizeName ON SizeName.id = Sizes.id_prop | |
LEFT JOIN `com_catalog_mans_link_size` AS Complectation ON Complectation.id_man = '.$id_manufacturer.' AND Complectation.id_prop = Sizes.id_prop | |
WHERE Sizes.id_catalog = '.$good['id'].' ORDER BY SizeName.ord2 ASC'; | |
$c = new xPDOCriteria($modx, $q_sizes_complectation); // connect to the MODX DB | |
$sizes_complectation_row = array(); | |
if ($c->stmt && $c->stmt->execute()) | |
{ | |
while ($row = $c->stmt->fetch(PDO::FETCH_ASSOC)) | |
{ | |
$sizes_complectation_row[] = $row; | |
} | |
} | |
//запрос к web странице | |
$fields = array(); | |
if($url_goods){ | |
$fields = get_meta($url_goods); | |
} | |
$i = 1; | |
$tv4 = array(); | |
foreach($sizes_complectation_row as $s_compl_row){ | |
$tv4[] = array('MIGX_id' => $i, 'size' => $s_compl_row['title'], | |
'price' => $s_compl_row['price1'], | |
'old_price' => ($s_compl_row['price1']==$s_compl_row['price_original'])?0:$s_compl_row['price_original'], | |
'complectation' => ($s_compl_row['text'])?:'','title_complectation' => ($fields['title_complectation'])?:'Комплектность', | |
'weight' => ($s_compl_row['weight'])?:'0.1', 'article' => ($s_compl_row['articul'])?:'', | |
'published' => (!$s_compl_row['balance'])?'0':$s_compl_row['status'], | |
'balance' => $s_compl_row['balance']); | |
$i++; | |
} | |
$prop['tv4'] = json_encode($tv4); | |
$q_colors = 'SELECT ColorName.*, Colors.* FROM `com_catalog_link_property_color` AS Colors | |
LEFT JOIN `com_catalog_property_color` AS ColorName ON ColorName.id = Colors.id_prop | |
WHERE Colors.id_catalog = '.$good['id'].' ORDER BY ColorName.ord2 ASC'; | |
$c = new xPDOCriteria($modx, $q_colors); // connect to the MODX DB | |
$colors_row = array(); | |
if ($c->stmt && $c->stmt->execute()) | |
{ | |
while ($row = $c->stmt->fetch(PDO::FETCH_ASSOC)) | |
{ | |
$colors_row[] = $row; | |
} | |
} | |
foreach($colors_row as $color_row){ | |
if($color_row['title']){ | |
$options['color'][] = $color_row['title']; | |
$prop['color'][] = $color_row['title']; | |
} | |
} | |
if(!$prop['parent']){ | |
if(empty($parents)) {$offset_continue++;continue;} | |
$prop['parent'] = $parents[0]; | |
unset($parents[0]); | |
$parents = array_values($parents); | |
} | |
//скачивание картинок | |
$images = array(); //картинки в этом массиве | |
for($img=1;$img<=10;$img++){ | |
if($image = downloadImg("{$img}_original.jpg", "https://umex.ru/files/catalog/photos/{$good['id']}/{$img}_original.jpg")){ | |
$images[] = $image; | |
} | |
} | |
$prop = array_merge($prop, $fields); | |
//print_r($prop); | |
//print_r($options); | |
//print_r($parents); | |
//print_r($images); | |
//print_r($url_goods); | |
if($id_resource = createProduct($prop, $options, $images, $parents)){ | |
if(is_numeric($id_resource)){ | |
//выборка отзывов в конце, когда уже создан товар | |
$q_reviews = 'SELECT * FROM `com_catalog_feedback` WHERE id_catalog = '.$good['id']; | |
$c = new xPDOCriteria($modx, $q_reviews); // connect to the MODX DB | |
$reviews_row = array(); | |
if ($c->stmt && $c->stmt->execute()) | |
{ | |
while ($row = $c->stmt->fetch(PDO::FETCH_ASSOC)) | |
{ | |
$reviews_row[] = $row; | |
} | |
} | |
$fields = array(); | |
$fields['resource'] = $id_resource; | |
$fields['name'] = "resource-{$id_resource}"; | |
if($ecThread = $modx->newObject('ecThread', $fields)){ | |
$ecThread->save(); | |
$ec_t_id = $ecThread->get('id'); | |
} | |
foreach($reviews_row as $rev_row){ | |
//print_r($rev_row); | |
$fields = array(); | |
if($ec_t_id){ | |
$fields['thread'] = $ec_t_id; | |
$fields['text'] = $rev_row['text']; | |
$fields['reply_text'] = str_replace(['<p> </p>','<p></p>',"\n","\r"], ['<br>','<br>','',''], $rev_row['answer']); | |
$fields['published'] = $rev_row['status']; | |
$fields['publishedon'] = ($rev_row['status'])?date('Y-m-d H:i:s', $rev_row['ts']):0; | |
//$fields['subject'] = $rev_row['org']; | |
$fields['date'] = date('Y-m-d H:i:s', $rev_row['ts']); | |
$fields['user_name'] = $rev_row['title']; | |
$fields['rating'] = $rev_row['rating']; | |
$fields['user_email'] = $rev_row['email']; | |
//$fields['user_contacts'] = $rev_row['phone']; | |
$fields['reply_author'] = ($rev_row['answer'])?'Интернет-магазин «Юмекс»':''; | |
$fields['ip'] = ($rev_row['ip'])?:'91.235.185.162'; | |
$fields['createdon'] = date('Y-m-d H:i:s', $rev_row['ts']); | |
$fields['createdby'] = 0; | |
if($response_ec = $modx->newObject('ecMessage', $fields)){ | |
$response_ec->save(); | |
} | |
} | |
} | |
} | |
} | |
$a++; | |
if($a > 1) break; | |
} | |
// Меняем offset | |
$_SESSION['console_offset'] = $offset + $step + $offset_continue; | |
if ($_SESSION['console_offset'] >= $total) { | |
$sucsess = 100; | |
$_SESSION['Console']['completed'] = true; | |
} else { | |
$sucsess = round($_SESSION['console_offset'] / $total, 2) * 100; | |
$_SESSION['Console']['completed'] = false; | |
} | |
for ($i=0; $i<=100; $i++) { | |
if ($i <= $sucsess) { | |
print '='; | |
} else { | |
print '_'; | |
} | |
} | |
print "\n"; | |
print $sucsess.'% ('.$_SESSION['console_offset'].')'."\n\n"; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
выборка товаров, их алиасов и производителей (может быть несколько в выборке) | |
SELECT Product.*, Manufacturer.*, Alias.* FROM `com_catalog` AS Product | |
LEFT JOIN `com_catalog_mans` AS Manufacturer ON Manufacturer.id = Product.id_man | |
LEFT JOIN `_pages_link_component` AS LinkAlias ON LinkAlias.id_id = Product.id | |
LEFT JOIN `_aliases` AS Alias ON Alias.id_page = LinkAlias.id_page | |
WHERE Product.id = 9345 | |
выборка категорий товаров и их алиасов | |
SELECT Cats.*, Alias.* FROM `com_catalog_cats` AS Cats | |
LEFT JOIN `_pages_link_component` AS LinkAlias ON LinkAlias.id_id = Cats.id | |
LEFT JOIN `_aliases` AS Alias ON Alias.id_page = LinkAlias.id_page | |
WHERE Cats.id IN (SELECT `id_catalog_cat` FROM `com_catalog_link_cats` WHERE id_catalog = 3354) | |
выборка размеров товаров, их названий и цен, комплектаций | |
SELECT SizeName.*, Sizes.*, Complectation.* FROM `com_catalog_link_property_size` AS Sizes | |
LEFT JOIN `com_catalog_property_size` AS SizeName ON SizeName.id = Sizes.id_prop | |
LEFT JOIN `com_catalog_mans_link_size` AS Complectation ON Complectation.id_man = 16 AND Complectation.id_prop = Sizes.id_prop | |
WHERE Sizes.id_catalog = 688 ORDER BY SizeName.ord2 ASC | |
выборка цветов товаров, их названий и цен | |
SELECT ColorName.*, Colors.* FROM `com_catalog_link_property_color` AS Colors | |
LEFT JOIN `com_catalog_property_color` AS ColorName ON ColorName.id = Colors.id_prop | |
WHERE Colors.id_catalog = 9345 ORDER BY ColorName.ord2 ASC | |
выборка отзывов на товар | |
SELECT * FROM `com_catalog_feedback` WHERE id_catalog = 12430 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
$modx->addPackage('easycomm', $modx->getOption('core_path') . 'components/easycomm/model/', 'kr0n0s_'); | |
$modx->loadClass('ecMessage'); | |
$sql = 'SELECT * FROM `com_feedback`;'; | |
$c = new xPDOCriteria($modx,$sql); // connect to the MODX DB | |
$rows = array(); | |
if ($c->stmt && $c->stmt->execute()) | |
{ | |
while ($row = $c->stmt->fetch(PDO::FETCH_ASSOC)) | |
{ | |
$rows[] = $row; | |
} | |
} | |
//print_r($rows); | |
foreach($rows as $row){ | |
//print_r($row); | |
$fields = array(); | |
$fields['thread'] = 3; | |
$fields['text'] = $row['question']; | |
$fields['reply_text'] = str_replace(['<p> </p>','<p></p>',"\n","\r"], ['<br>','<br>','',''], $row['answer']); | |
$fields['published'] = $row['status']; | |
$fields['publishedon'] = ($row['status'])?date('Y-m-d H:i:s', $row['ts']):0; | |
$fields['subject'] = $row['org']; | |
$fields['date'] = date('Y-m-d H:i:s', $row['ts']); | |
$fields['user_name'] = $row['author']; | |
$fields['user_email'] = $row['email']; | |
$fields['user_contacts'] = $row['phone']; | |
$fields['reply_author'] = ($row['answer'])?'Интернет-магазин «Юмекс»':''; | |
$fields['ip'] = ($row['ip'])?:'91.235.185.162'; | |
$fields['createdon'] = date('Y-m-d H:i:s', $row['ts']); | |
$fields['createdby'] = 0; | |
/*$otherProps = array( | |
'processors_path' => $modx->getOption('core_path') . 'components/easycomm/processors/' | |
); | |
$response = $modx->runProcessor('web/message/create', $fields, $otherProps);*/ | |
if($response = $modx->newObject('ecMessage', $fields)){ | |
$response->save(); | |
} | |
//return; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
require(MODX_BASE_PATH.'parser/phpquery-master/phpQuery/phpQuery.php'); | |
//функция получения страницы по URL | |
function get_web_page( $url ){ | |
$options = array( | |
CURLOPT_RETURNTRANSFER => true, // return web page | |
CURLOPT_HEADER => false, // don't return headers | |
CURLOPT_FOLLOWLOCATION => false, // follow redirects | |
CURLOPT_ENCODING => "", // handle all encodings | |
CURLOPT_USERAGENT => "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17", // who am i | |
CURLOPT_AUTOREFERER => true, // set referer on redirect | |
CURLOPT_CONNECTTIMEOUT => 120, // timeout on connect | |
CURLOPT_TIMEOUT => 120, // timeout on response | |
CURLOPT_MAXREDIRS => 10, // stop after 10 redirects | |
); | |
$ch = curl_init( $url ); | |
curl_setopt_array( $ch, $options ); | |
$content = curl_exec( $ch ); | |
$err = curl_errno( $ch ); | |
$errmsg = curl_error( $ch ); | |
$header = curl_getinfo( $ch ); | |
curl_close( $ch ); | |
$header['errno'] = $err; | |
$header['errmsg'] = $errmsg; | |
$header['content'] = $content; | |
return $header; | |
} | |
function get_meta($url_goods = 'https://umex.ru/kpb-postelnoe-bele'){ | |
$page = get_web_page($url_goods); | |
unset($document); | |
$document = phpQuery::newDocument($page['content']); | |
$pagetitle = $document->find('title')->text(); | |
$field['longtitle'] = $pagetitle; | |
$h1 = $document->find('h1')->text(); | |
$field['pagetitle'] = $h1; | |
$menutitle = $document->find('.pathway ul > li:last')->text(); | |
$field['menutitle'] = $menutitle; | |
$description = $document->find('meta[name="description"]')->attr('content'); | |
$field['description'] = $description; | |
return $field; | |
} | |
function select_bd($parent){ | |
global $modx; | |
$sql = 'SELECT Pages.*, Page.*, Alias.*, Link.*, | |
Pages.title AS `Pages.title`, Pages.window_title AS `Pages.window_title`, | |
Pages.meta_description AS `Pages.meta_description`, Pages.menu_title AS `Pages.menu_title`, | |
Pages.id AS `Pages.id` | |
FROM `com_catalog_cats` AS Pages | |
LEFT JOIN `_pages_link_component` AS Link | |
ON Pages.id = Link.id_id | |
LEFT JOIN `_pages` AS `Page` | |
ON BINARY Pages.title = Page.title AND Link.id_page = Page.id | |
LEFT JOIN _aliases AS Alias ON Page.id = Alias.id_page | |
WHERE Pages.status= 1 AND Pages.parent = '.$parent.' AND Alias.alias != "" AND Alias.alias IS NOT NULL;'; | |
$c = new xPDOCriteria($modx,$sql); // connect to the MODX DB | |
$rows = array(); | |
if ($c->stmt && $c->stmt->execute()) | |
{ | |
while ($row = $c->stmt->fetch(PDO::FETCH_ASSOC)) | |
{ | |
$rows[] = $row; | |
} | |
} | |
return $rows; | |
} | |
function foreach_tree($parent_bd, $parent_modx){ | |
global $modx; | |
if($rows = select_bd($parent_bd)){ | |
foreach($rows as $row){ | |
$url = 'https://umex.ru/' . $row['alias']; | |
$fields = get_meta($url); | |
$alias = explode('/', $row['alias']); | |
$fields['alias'] = end($alias); | |
$fields['uri'] = $row['alias']; | |
$fields['alias_visible'] = 1; | |
$fields['published'] = 1; | |
$fields['publishedon'] = $fields['createdon'] = $row['page_ts']; | |
$fields['parent'] = $parent_modx; | |
$fields['template'] = 5; | |
$fields['content'] = $row['text']; | |
if($response = $modx->newObject('modResource', $fields)){ | |
$response->save(); | |
foreach_tree($row['Pages.id'], $response->id); | |
} | |
} | |
} | |
return true; | |
} | |
$sql = 'SELECT Pages.*, Page.*, Alias.*, Link.*, | |
Pages.title AS `Pages.title`, Pages.window_title AS `Pages.window_title`, | |
Pages.meta_description AS `Pages.meta_description`, Pages.menu_title AS `Pages.menu_title`, | |
Pages.id AS `Pages.id` | |
FROM `com_catalog_cats` AS Pages | |
LEFT JOIN `_pages_link_component` AS Link | |
ON Pages.id = Link.id_id | |
LEFT JOIN `_pages` AS `Page` | |
ON BINARY Pages.title = Page.title AND Link.id_page = Page.id | |
LEFT JOIN _aliases AS Alias ON Page.id = Alias.id_page | |
WHERE Pages.status= 1 AND Pages.parent = 0 AND Alias.alias != "" AND Alias.alias IS NOT NULL;'; | |
$c = new xPDOCriteria($modx,$sql); // connect to the MODX DB | |
$rows = array(); | |
if ($c->stmt && $c->stmt->execute()) | |
{ | |
while ($row = $c->stmt->fetch(PDO::FETCH_ASSOC)) | |
{ | |
$rows[] = $row; | |
} | |
} | |
//print_r($rows); | |
foreach($rows as $row){ | |
//print_r($row); | |
//if($row['Pages.id'] != 515) continue; | |
$url = 'https://umex.ru/' . $row['alias']; | |
$fields = get_meta($url); | |
$alias = explode('/', $row['alias']); | |
$fields['alias'] = end($alias); | |
$fields['uri'] = $row['alias']; | |
$fields['alias_visible'] = 1; | |
$fields['published'] = 1; | |
$fields['publishedon'] = $fields['createdon'] = $row['page_ts']; | |
$fields['parent'] = 33; | |
$fields['template'] = 5; | |
//preg_match('/<h1>(.*)<\/h1>/ius', $row['text'], $output_array); | |
//$row['text'] = preg_replace('/<h1>(.*)<\/h1>/ius', '', $row['text']); | |
$fields['content'] = $row['text']; | |
/*if(isset($output_array[1])){ | |
$fields['longtitle'] = ($row['window_title'])?:$fields['pagetitle']; | |
$fields['pagetitle'] = $output_array[1]; | |
}*/ | |
//print_r($fields); | |
if($response = $modx->newObject('modResource', $fields)){ | |
$response->save(); | |
foreach_tree($row['Pages.id'], $response->id); | |
} | |
//return; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment