Генератор карт сайта для dle. v 1.0

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
<?php
/*Генератор карт сайта для DLE
Если на сервере строгие настройки безопасности то записуемые файлы должны быть созданы и должны иметь права chmod 666
*/
ERROR_REPORTING(E_ALL);
define ( 'DATALIFEENGINE', true );
define ( 'ROOT_DIR', dirname ( __FILE__ ) );
define ( 'ENGINE_DIR', ROOT_DIR . '/engine' );
require_once ENGINE_DIR.'/classes/mysql.php';
require_once ENGINE_DIR.'/data/dbconfig.php';
/*Подгружаем катигории*/
class GeneratorSitemapsDLE{
private $Sql;
private $categoryesArray=array();
private $siteMapTempArray=array();//Буферный массивдля сортировки по приаритету
private $imageMapFileName='imagesitemap.xml';
private $siteMapFileName='sitemap.xml';
private $siteUrl='http://new4mob.com/';
public
function __construct() {
global $db;
$this->Sql = $db;
/*Загружаем разделы*/
$this->loadCategorye();
/*Генерируем карту страниц*/
$this->imageMapGen();
/*генерируем карту изображений*/
$this->siteMapGen();
}
/*генератор карты изображений*/
private
function imageMapGen(){
$myrow = $this->Sql->query("
SELECT
`dle_images`.*,
`dle_post`.`id` `post_id`,
`dle_post`.`alt_name`,
`dle_post`.`title`,
`dle_post`.`category`
FROM
`dle_images`
LEFT JOIN `dle_post` ON(`dle_post`.`id`=`dle_images`.`news_id`)
");
if($this->Sql->db_id->affected_rows){
$map.='<?xml version="1.0" encoding="UTF-8"?>'.PHP_EOL.'<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">'.PHP_EOL;
while($result = array_map('stripslashes',$this->Sql->query_id->fetch_assoc())){
$cat= explode(',',$result['category']);
$map.= '<url>'.PHP_EOL.'<loc>'.$this->siteUrl.$this->category_url($cat[0]).$result['post_id'].'-'.$result['alt_name'].'.html'.'</loc>'.PHP_EOL;
$images = explode('|||',$result['images']);
$map.='<image:image>'.PHP_EOL;
foreach($images as $img){
$map.= '<image:loc>'.$this->siteUrl.'uploads/posts/'.$img.'</image:loc>'.PHP_EOL;
}
$map.='</image:image>'.PHP_EOL;
$map.='</url>'.PHP_EOL;
}
$map.='</urlset>'.PHP_EOL;
if(file_put_contents($this->imageMapFileName,$map)) echo '<p><b>'.$this->imageMapFileName.'</b>: OK</p>'; else echo '<p><b>'.$this->imageMapFileName.'</b>: ERROR</p>';
}else{die('no images');}
}
/*генератор карты сайта*/
private
function siteMapGen(){
//Перебираем корневые разделы
foreach($this->categoryesArray as $key=>$category){
if($category['parentid']==0){
$map='<url>'.PHP_EOL.'<loc>'.$this->siteUrl.$this->category_url($category['id']).'</loc>'.PHP_EOL.'<priority>0.9</priority>'.PHP_EOL.'<changefreq>weekly</changefreq> '.PHP_EOL.'</url>'.PHP_EOL.$map;
}else{
$map.='<url>'.PHP_EOL.'<loc>'.$this->siteUrl.$this->category_url($category['id']).'</loc>'.PHP_EOL.'<priority>0.8</priority>'.PHP_EOL.'<changefreq>weekly</changefreq> '.PHP_EOL.'</url>'.PHP_EOL;
}
}
/*Добовляем главную страницу*/
$map='<url>'.PHP_EOL.'<loc>'.$this->siteUrl.'</loc>'.PHP_EOL.'<priority>1</priority>'.PHP_EOL.'<changefreq>weekly</changefreq> '.PHP_EOL.'</url>'.PHP_EOL.$map;
/*Добовляем публикации*/
$myrow = $this->Sql->query("
SELECT
`dle_post`.`id` `post_id`,
`dle_post`.`alt_name`,
`dle_post`.`title`,
`dle_post`.`category`
FROM
`dle_post`");
if($this->Sql->db_id->affected_rows){
while($result = array_map('stripslashes',$this->Sql->query_id->fetch_assoc())){
$cat = explode(',',$result['category']);
$map.='<url>'.PHP_EOL.'<loc>'.$this->siteUrl.$this->category_url($cat[0]).$result['post_id'].'-'.$result['alt_name'].'.html'.'</loc>'.PHP_EOL.'<priority>0.5</priority>'.PHP_EOL.'<changefreq>weekly</changefreq> '.PHP_EOL.'</url>'.PHP_EOL;
}
}
if(file_put_contents($this->siteMapFileName,'<?xml version="1.0" encoding="UTF-8"?>'.PHP_EOL.'<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'.$map.'</urlset>')) echo'<p><b>'.$this->siteMapFileName.'</b>: OK.</p>'; else echo'<p><b>'.$this->siteMapFileName.'</b>: ERROR.</p>';
}
/*Разовая подгрузка катигорий*/
private
function loadCategorye(){
$myrow = $this->Sql->query("SELECT `id`,`name`,`parentid`,`alt_name` FROM `dle_category` ORDER BY `id`");
while($result = $this->Sql->get_row()){ $this->categoryesArray[$result['id']]=$result;}
}
/*Получение полной ссылки катигории*/
private
function category_url($category_id,$url=''){
if(is_array($this->categoryesArray[$category_id])){
if($this->categoryesArray[$category_id]['parentid']>0){
return $this->category_url($this->categoryesArray[$category_id]['parentid'], $url.$this->categoryesArray[$category_id]['alt_name']);
}else{
return $this->categoryesArray[$category_id]['alt_name'].'/'.$url;
}
}
return $url;
}
}
$Obj = new GeneratorSitemapsDLE();