function xmlsitemap_generate_chunk in XML sitemap 6.2
Same name and namespace in other branches
- 7.2 xmlsitemap.generate.inc \xmlsitemap_generate_chunk()
1 call to xmlsitemap_generate_chunk()
File
- ./
xmlsitemap.generate.inc, line 166 - Sitemap generation and rebuilding functions for the xmlsitemap module.
Code
function xmlsitemap_generate_chunk(stdClass $sitemap, XMLSitemapWriter $writer, $chunk) {
$lastmod_format = variable_get('xmlsitemap_lastmod_format', XMLSITEMAP_LASTMOD_MEDIUM);
$url_options = $sitemap->uri['options'];
$url_options += array(
'absolute' => TRUE,
'base_url' => variable_get('xmlsitemap_base_url', $GLOBALS['base_url']),
'language' => language_default(),
'alias' => variable_get('xmlsitemap_prefetch_aliases', TRUE),
);
$last_url = '';
$link_count = 0;
$query = array(
'SELECT' => 'SELECT x.loc, x.lastmod, x.changefreq, x.changecount, x.priority, x.language',
'FROM' => 'FROM {xmlsitemap} x',
'WHERE' => 'WHERE x.access = 1 AND x.status = 1',
'ORDER BY' => 'ORDER BY x.language, x.loc',
);
$args = array();
// Allow other modules to alter the sitemap query SQL and arguments.
static $alter;
if (!isset($alter)) {
// Skip altering if there are no modules to invoke.
xmlsitemap_load_all_includes();
$alter = (bool) module_implements('query_xmlsitemap_generate_alter');
}
if ($alter) {
$data =& $query;
$data['__drupal_alter_by_ref'] = array(
&$args,
);
drupal_alter('query_xmlsitemap_generate', $data, $sitemap);
}
$sql = implode($query, ' ');
$offset = max($chunk - 1, 0) * xmlsitemap_get_chunk_size();
$limit = xmlsitemap_get_chunk_size();
$query = db_query_range($sql, $args, $offset, $limit);
while ($link = db_fetch_array($query)) {
$link['language'] = $link['language'] ? xmlsitemap_language_load($link['language']) : $url_options['language'];
if ($url_options['alias']) {
$link['loc'] = xmlsitemap_get_path_alias($link['loc'], $link['language']->language);
}
$link_options = array(
'language' => $link['language'],
'xmlsitemap_link' => $link,
'xmlsitemap_sitemap' => $sitemap,
);
// @todo Add a separate hook_xmlsitemap_link_url_alter() here?
$link_url = url($link['loc'], $link_options + $url_options);
// Skip this link if it was a duplicate of the last one.
// @todo Figure out a way to do this before generation so we can report
// back to the user about this.
if ($link_url == $last_url) {
continue;
}
else {
$last_url = $link_url;
// Keep track of the total number of links written.
$link_count++;
}
$element = array();
$element['loc'] = $link_url;
if ($link['lastmod']) {
$element['lastmod'] = gmdate($lastmod_format, $link['lastmod']);
// If the link has a lastmod value, update the changefreq so that links
// with a short changefreq but updated two years ago show decay.
// We use abs() here just incase items were created on this same cron run
// because lastmod would be greater than REQUEST_TIME.
$link['changefreq'] = (abs(REQUEST_TIME - $link['lastmod']) + $link['changefreq']) / 2;
}
if ($link['changefreq']) {
$element['changefreq'] = xmlsitemap_get_changefreq($link['changefreq']);
}
if (isset($link['priority']) && $link['priority'] != 0.5) {
// Don't output the priority value for links that have 0.5 priority. This
// is the default 'assumed' value if priority is not included as per the
// sitemaps.org specification.
$element['priority'] = number_format($link['priority'], 1);
}
$writer
->writeSitemapElement('url', $element);
}
return $link_count;
}