home = make_url(); } function build_map () { $map = "\n\n"; $map .= $this->get_static(); $map .= $this->get_forum(); $map .= $this->get_topic(); $map .= ""; return $map; } function build_index ($count) { $lm = date('c'); $map = "\n\n"; $map .= "\n{$this->home}internal_data/sitemap/sitemap1.xml\n{$lm}\n\n"; for ($i = 0; $i < $count; $i++) { $t = $i + 2; $map .= "\n{$this->home}internal_data/sitemap/sitemap{$t}.xml\n{$lm}\n\n"; } $map .= ""; return $map; } function build_stat () { $map = "\n\n"; $map .= $this->get_static(); $map .= $this->get_forum(); $map .= ""; return $map; } function build_map_topic ($n) { $map = "\n\n"; $map .= $this->get_topic($n); $map .= ""; return $map; } function get_forum () { global $datastore; $this->priority = $this->cat_priority; $xml = ''; $lm = date('c'); if (!$forums = $datastore->get('cat_forums')) { $datastore->update('cat_forums'); $forums = $datastore->get('cat_forums'); } $not_forums_id = $forums['not_auth_forums']['guest_view']; $ignore_forum_sql = ($not_forums_id) ? "WHERE forum_id NOT IN($not_forums_id)" : ''; $sql = DB()->sql_query("SELECT forum_id, forum_topics, forum_parent, forum_name FROM " . BB_FORUMS . " " . $ignore_forum_sql . " ORDER BY forum_id ASC"); while ($row = DB()->sql_fetchrow($sql)) { if (function_exists('seo_url')) $loc = $this->home . seo_url(FORUM_URL . $row['forum_id'], $row['forum_name']); else $loc = $this->home . FORUM_URL . $row['forum_id']; $xml .= $this->get_xml($loc, $lm); } return $xml; } function get_topic ($page = false) { global $datastore; $xml = ''; $this->priority = $this->topic_priority; if ($page) { $page = $page - 1; $page = $page * 40000; $this->limit = " LIMIT {$page},40000"; } else { if ($this->limit < 1) $this->limit = false; if ($this->limit) { $this->limit = " LIMIT 0," . $this->limit; } else { $this->limit = ''; } } if (!$forums = $datastore->get('cat_forums')) { $datastore->update('cat_forums'); $forums = $datastore->get('cat_forums'); } $not_forums_id = $forums['not_auth_forums']['guest_view']; $ignore_forum_sql = ($not_forums_id) ? "WHERE forum_id NOT IN($not_forums_id)" : ''; $sql = DB()->sql_query("SELECT topic_id, topic_title, topic_time FROM " . BB_TOPICS . " " . $ignore_forum_sql . " ORDER BY topic_time ASC" . $this->limit); while ($row = DB()->sql_fetchrow($sql)) { if (function_exists('seo_url')) $loc = $this->home . seo_url(TOPIC_URL . $row['topic_id'], $row['topic_title']); else $loc = $this->home . TOPIC_URL . $row['topic_id']; $xml .= $this->get_xml($loc, date('c', $row['topic_time'])); } return $xml; } function get_static () { global $bb_cfg; $xml = ''; $lm = date('c'); $this->priority = $this->stat_priority; if (isset($bb_cfg['static_sitemap'])) { $static_url = preg_replace("/\s/", '', $bb_cfg['static_sitemap']); //вырезаем переносы строк preg_match_all('#(https?://[\w-]+[\.\w-]+/((?!https?://)[\w- ./?%&=])+)#', $static_url, $out); $static_url = count($out['0']); if ($static_url > 0) { foreach ($out['0'] as $url) { $loc = $url; $xml .= $this->get_xml($loc, $lm); } } } return $xml; } function get_xml ($loc, $lm) { $xml = "\t\n"; $xml .= "\t\t$loc\n"; $xml .= "\t\t$lm\n"; $xml .= "\t\t" . $this->priority . "\n"; $xml .= "\t\n"; return $xml; } function send_url ($url, $map) { $data = false; $file = $url.urlencode($map); if (function_exists('curl_init')) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $file); curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 6); $data = curl_exec($ch); curl_close($ch); return $data; } else { return @file_get_contents($file); } } function create () { $row = DB()->fetch_row("SELECT COUNT(*) AS count FROM " . BB_TOPICS); if (!$this->limit) $this->limit = $row['count']; if ($this->limit > 40000) { $pages_count = @ceil($row['count'] / 40000); $sitemap = $this->build_index($pages_count); $handler = fopen(SITEMAP_DIR. "sitemap.xml", "wb+"); fwrite($handler, $sitemap); fclose($handler); @chmod(SITEMAP_DIR. "sitemap.xml", 0666); $sitemap = $this->build_stat(); $handler = fopen(SITEMAP_DIR. "sitemap1.xml", "wb+"); fwrite($handler, $sitemap); fclose($handler); @chmod(SITEMAP_DIR. "sitemap.xml", 0666); for ($i = 0; $i < $pages_count; $i++) { $t = $i + 2; $n = $i + 1; $sitemap = $this->build_map_topic($n); $handler = fopen(SITEMAP_DIR. "sitemap{$t}.xml", "wb+"); fwrite($handler, $sitemap); fclose($handler); @chmod(SITEMAP_DIR. "sitemap{$t}.xml", 0666); } } else { $sitemap = $this->build_map(); $handler = fopen(SITEMAP_DIR. "sitemap.xml", "wb+"); fwrite($handler, $sitemap); fclose($handler); @chmod(SITEMAP_DIR. "sitemap.xml", 0666); } $params['sitemap_time'] = TIMENOW; bb_update_config($params); } }