czaks
11 years ago
3 changed files with 100 additions and 0 deletions
@ -0,0 +1,53 @@ |
|||||
|
<?php |
||||
|
$theme = Array(); |
||||
|
|
||||
|
// Theme name |
||||
|
$theme['name'] = 'Sitemap Generator'; |
||||
|
// Description (you can use Tinyboard markup here) |
||||
|
$theme['description'] = 'Generates an XML sitemap to help search engines find all threads and pages.'; |
||||
|
$theme['version'] = 'v1.0'; |
||||
|
|
||||
|
// Theme configuration |
||||
|
$theme['config'] = Array(); |
||||
|
|
||||
|
$theme['config'][] = Array( |
||||
|
'title' => 'Sitemap Path', |
||||
|
'name' => 'path', |
||||
|
'type' => 'text', |
||||
|
'default' => 'sitemap.xml', |
||||
|
'size' => '20' |
||||
|
); |
||||
|
|
||||
|
$theme['config'][] = Array( |
||||
|
'title' => 'URL prefix', |
||||
|
'name' => 'url', |
||||
|
'type' => 'text', |
||||
|
'comment' => '(with trailing slash)', |
||||
|
'default' => 'http://' . $_SERVER['HTTP_HOST'] . $config['root'], |
||||
|
'size' => '20' |
||||
|
); |
||||
|
|
||||
|
$theme['config'][] = Array( |
||||
|
'title' => 'Thread change frequency', |
||||
|
'name' => 'changefreq', |
||||
|
'type' => 'text', |
||||
|
'comment' => '(eg. "hourly", "daily", etc.)', |
||||
|
'default' => 'hourly', |
||||
|
'size' => '20' |
||||
|
); |
||||
|
|
||||
|
$__boards = listBoards(); |
||||
|
$__default_boards = Array(); |
||||
|
foreach ($__boards as $__board) |
||||
|
$__default_boards[] = $__board['uri']; |
||||
|
|
||||
|
$theme['config'][] = Array( |
||||
|
'title' => 'Boards', |
||||
|
'name' => 'boards', |
||||
|
'type' => 'text', |
||||
|
'comment' => '(boards to include; space seperated)', |
||||
|
'size' => 24, |
||||
|
'default' => implode(' ', $__default_boards) |
||||
|
); |
||||
|
|
||||
|
$theme['build_function'] = 'sitemap_build'; |
@ -0,0 +1,19 @@ |
|||||
|
{% filter remove_whitespace %} |
||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> |
||||
|
{% for board in boards %} |
||||
|
<url> |
||||
|
<loc>{{ settings.url ~ (config.board_path | format(board)) ~ config.file_index }}</loc> |
||||
|
</url> |
||||
|
{% endfor %} |
||||
|
{% for board, thread_list in threads %} |
||||
|
{% for thread in thread_list %} |
||||
|
<url> |
||||
|
<loc>{{ settings.url ~ (config.board_path | format(board)) ~ config.dir.res ~ (config.file_page | format(thread.thread_id)) }}</loc> |
||||
|
<lastmod>{{ thread.lastmod | date('%Y-%m-%dT%H:%M:%S') }}{{ timezone() }}</lastmod> |
||||
|
<changefreq>{{ settings.changefreq }}</changefreq> |
||||
|
</url> |
||||
|
{% endfor %} |
||||
|
{% endfor %} |
||||
|
</urlset> |
||||
|
{% endfilter %} |
@ -0,0 +1,28 @@ |
|||||
|
<?php |
||||
|
require 'info.php'; |
||||
|
|
||||
|
function sitemap_build($action, $settings) { |
||||
|
global $config; |
||||
|
|
||||
|
// Possible values for $action: |
||||
|
// - all (rebuild everything, initialization) |
||||
|
// - news (news has been updated) |
||||
|
// - boards (board list changed) |
||||
|
// - post (a post has been made) |
||||
|
|
||||
|
$boards = explode(' ', $settings['boards']); |
||||
|
|
||||
|
$threads = array(); |
||||
|
|
||||
|
foreach ($boards as $board) { |
||||
|
$query = query(sprintf("SELECT `id` AS `thread_id`, (SELECT `time` FROM `posts_%s` WHERE `thread` = `thread_id` OR `id` = `thread_id` ORDER BY `time` DESC LIMIT 1) AS `lastmod` FROM `posts_%s` WHERE `thread` IS NULL", $board, $board)) or error(db_error()); |
||||
|
$threads[$board] = $query->fetchAll(PDO::FETCH_ASSOC); |
||||
|
} |
||||
|
|
||||
|
file_write($settings['path'], Element('themes/sitemap/sitemap.xml', Array( |
||||
|
'settings' => $settings, |
||||
|
'config' => $config, |
||||
|
'threads' => $threads, |
||||
|
'boards' => $boards, |
||||
|
))); |
||||
|
} |
Loading…
Reference in new issue