| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 | <?php// $Id: xmlsitemap.pages.inc,v 1.6 2010/01/24 05:54:40 davereid Exp $/** * @file * Page callbacks for the xmlsitemap module. * * @ingroup xmlsitemap *//** * Output a sitemap page. * * @see xmlsitemap_file_transfer() */function xmlsitemap_output_chunk($chunk = 0) {  global $language;  // @todo Remove this from the final version?  if (isset($_GET['refresh']) && user_access('administer xmlsitemap')) {    module_load_include('inc', 'xmlsitemap');    xmlsitemap_generate($chunk, $language);  }  $file = xmlsitemap_get_chunk_file($chunk, $language->language);  xmlsitemap_output_file($file);}/** * Output the contents of a file to the browser and check caching headers. */function xmlsitemap_output_file($file, array $headers = array()) {  if (!file_exists($file) || !is_readable($file)) {    return MENU_NOT_FOUND;  }  $mtime = filemtime($file);  $last_modified = gmdate(DATE_RFC1123, $mtime);  $etag = '"' . md5($last_modified) . '"';  // See if the client has provided the required HTTP headers.  $if_modified_since = isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) ? stripslashes($_SERVER['HTTP_IF_MODIFIED_SINCE']) : FALSE;  $if_none_match = isset($_SERVER['HTTP_IF_NONE_MATCH']) ? stripslashes($_SERVER['HTTP_IF_NONE_MATCH']) : FALSE;  if ($if_modified_since && $if_none_match && $if_none_match == $etag && $if_modified_since == $last_modified) {    header('HTTP/1.1 304 Not Modified');    // All 304 responses must send an etag if the 200 response for the same object contained an etag    header('Etag: ' . $etag);    exit;  }  $headers += array(    'Content-type' => 'text/xml; charset=utf-8',    //'Content-length' => filesize($file),    'Last-modified' => $last_modified,    'Etag' => $etag,    'Expires' => gmdate(DATE_RFC1123, $mtime + variable_get('xmlsitemap_minimum_lifetime', 0)),    'Cache-Control' => 'must-revalidate',    'X-Robots-Tag' => 'noindex, follow',  );  // Transfer the file as output.  xmlsitemap_file_transfer($file, $headers);}/** * Modified version of file_transfer() that invokes hook_exit()s afterwards. * * @see file_transfer() */function xmlsitemap_file_transfer($uri, $headers) {  if (ob_get_level()) {    ob_end_clean();  }  foreach ($headers as $name => $value) {    drupal_add_http_header($name, $value);  }  drupal_send_headers();  $scheme = $scheme = variable_get('file_default_scheme', 'public');  // Transfer file in 1024 byte chunks to save memory usage.  if ($scheme && file_stream_wrapper_valid_scheme($scheme) && $fd = fopen($uri, 'rb')) {    while (!feof($fd)) {      print fread($fd, 1024);    }    fclose($fd);  }  else {    drupal_not_found();  }  drupal_exit();}/** * Output an XML transformation file for the sitemap XML. */function xmlsitemap_output_xsl() {  // Read the XSL content from the file.  $module_path = drupal_get_path('module', 'xmlsitemap');  $xsl_content = file_get_contents($module_path . '/xsl/xmlsitemap.xsl');  // Make sure the strings in the XSL content are translated properly.  $replacements = array(    'Sitemap file' => t('Sitemap file'),    'Generated by the <a href="http://drupal.org/project/xmlsitemap">Drupal XML sitemap module</a>.' => t('Generated by the <a href="@link-xmlsitemap">Drupal XML sitemap module</a>.', array('@link-xmlsitemap' => 'http://drupal.org/project/xmlsitemap')),    'Number of sitemaps in this index' => t('Number of sitemaps in this index'),    'Click on the table headers to change sorting.' => t('Click on the table headers to change sorting.'),    'Sitemap URL' => t('Sitemap URL'),    'Last modification date' => t('Last modification date'),    'Number of URLs in this sitemap' => t('Number of URLs in this sitemap'),    'URL location' => t('URL location'),    'Change frequency' => t('Change frequency'),    'Priority' => t('Priority'),    '[jquery]' => base_path() . 'misc/jquery.js',    '[jquery-tablesort]' => base_path() . $module_path . '/xsl/jquery.tablesorter.min.js',    '[xsl-js]' => base_path() . $module_path . '/xsl/xmlsitemap.xsl.js',    '[xsl-css]' => base_path() . $module_path . '/xsl/xmlsitemap.xsl.css',  );  $xsl_content = strtr($xsl_content, $replacements);  // Output the XSL content.  drupal_add_http_header('Content-type', 'application/xml; charset=utf-8');  drupal_add_http_header('X-Robots-Tag', 'noindex, follow');  echo $xsl_content;}
 |