Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@andronex
Last active July 18, 2019 09:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save andronex/873a9d82799e52de4febc8fe560d44b3 to your computer and use it in GitHub Desktop.
Save andronex/873a9d82799e52de4febc8fe560d44b3 to your computer and use it in GitHub Desktop.
<?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>&nbsp;</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";
выборка товаров, их алиасов и производителей (может быть несколько в выборке)
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
<?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>&nbsp;</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;
}
<?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