Jump to content
xt:Commerce Community Forum

sitemap aktuelles Datum festlegen und verwenden


Haxley

Recommended Posts

Hallo,

wie bekomme ich das aktuelle Datum in meine Sitemap?

Leider liefert meine WAWI alle Zeiten in den Tabellen mit 000000, das ist nicht schlimm aber die Sitemap hat dadurch immer das Datum:

<lastmod>1970-01-01T01:00:00+01:00</lastmod>[/PHP]

Kann man nicht $date daklarieren/ verwenden und dem das aktuelle Datum geben?

[PHP]<?php
/*
osCommerce, Open Source E-Commerce Solutions
http://www.oscommerce.com
Copyright (c) 2005 osCommerce
Released under the GNU General Public License
@Author: Raphael Vullriede ([email protected])
Port to xtCommerce
@Author: Winfried Kaiser ([email protected])
*/
require('includes/application_top.php');
// if the customer is not logged on, redirect them to the login page
if (!isset($_SESSION['customer_id'])) {
xtc_redirect(xtc_href_link(FILENAME_LOGIN, '', 'NONSSL'));
}
// XML-Specification: https://www.google.com/webmasters/sitemaps/docs/de/protocol.html
define('CHANGEFREQ_CATEGORIES', 'weekly'); // Valid values are "always", "hourly", "daily", "weekly", "monthly", "yearly" and "never".
define('CHANGEFREQ_PRODUCTS', 'daily'); // Valid values are "always", "hourly", "daily", "weekly", "monthly", "yearly" and "never".
define('PRIORITY_CATEGORIES', '1.0');
define('PRIORITY_PRODUCTS', '0.5');
define('MAX_ENTRYS', 50000);
define('MAX_SIZE', 10000000);
define('GOOGLE_URL', 'http://www.google.com/webmasters/sitemaps/ping?sitemap=');
define('SITEMAPINDEX_HEADER', "
<?xml version='1.0' encoding='UTF-8'?>"."\n".'
<sitemapindex xmlns="http://www.google.com/schemas/sitemap/0.84"'."\n".'
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"'."\n".'
xsi:schemaLocation="http://www.google.com/schemas/sitemap/0.84'."\n".'
http://www.google.com/schemas/sitemap/0.84/siteindex.xsd">'."\n"
);
define('SITEMAPINDEX_FOOTER', '</sitemapindex>');
define('SITEMAPINDEX_ENTRY', "\t".'<sitemap>'."\n\t\t".'<loc>%s</loc>'."\n\t\t".'<lastmod>%s</lastmod>'."\n\t".'</sitemap>'."\n");
define('SITEMAP_HEADER', "
<?xml version='1.0' encoding='UTF-8'?>"."\n".'
<urlset xmlns="http://www.google.com/schemas/sitemap/0.84"'."\n".'
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"'."\n".'
xsi:schemaLocation="http://www.google.com/schemas/sitemap/0.84'."\n".'
http://www.google.com/schemas/sitemap/0.84/sitemap.xsd">'."\n"
);
define('SITEMAP_FOOTER', '</urlset>');
define('SITEMAP_ENTRY', "\t".'<url>'."\n\t\t".'<loc>%s</loc>'."\n\t\t".'<priority>%s</priority>'."\n\t\t".'<lastmod>%s</lastmod>'."\n\t\t".'<changefreq>%s</changefreq>'."\n\t".'</url>'."\n");
$smarty = new Smarty;
$breadcrumb->add('Google Sitemap', xtc_href_link(FILENAME_GOOGLE_SITEMAP, xtc_get_all_get_params(), 'NONSSL'));
// include boxes
require(DIR_FS_CATALOG .'templates/'.CURRENT_TEMPLATE. '/source/boxes.php');
require(DIR_WS_INCLUDES . 'header.php');
include (DIR_WS_MODULES . 'default.php');
define('SITEMAP_CATALOG', HTTP_SERVER.DIR_WS_CATALOG);
$usegzip = false;
$autogenerate = false;
$output_to_file = false;
$notify_google = false;
$notify_url = '';
// request over http or command line?
if (!isset($_SERVER['SERVER_PROTOCOL'])) {
if (count($_SERVER['argv'] > 1)) {
// option p ist only possible of min 1 more option isset
if ( (strlen($_SERVER['argv'][1]) >= 2) && strpos($_SERVER['argv'][1], 'p') !== true) {
$notify_google = true;
$_SERVER['argv'][1] = str_replace('p', '', $_SERVER['argv'][1]);
}
switch($_SERVER['argv'][1]) {
// dump to file
case '-f':
$output_to_file = true;
$filename = $_SERVER['argv'][2];
break;
// dump to compressed file
case '-zf':
$usegzip = true;
$output_to_file = true;
$filename = $_SERVER['argv'][2];
break;
// autogenerate sitemaps. useful for sites with more the 500000 Urls
case '-a':
$autogenerate = true;
break;
// autogenerate sitemaps and use gzip
case '-za':
$autogenerate = true;
$usegzip = true;
break;
}
}
} else {
if (count($_GET) > 0) {
// dump to file
if (isset($_GET['f'])) {
$output_to_file = true;
$filename = $_GET['f'];
}
// use gzip
$usegzip = (isset($_GET['gzip']) && $_GET['gzip'] == true) ? true : false;
// autogenerate sitemaps
$autogenerate = (isset($_GET['auto']) && $_GET['auto'] == true) ? true : false;
// notify google
$notify_google = (isset($_GET['ping']) && $_GET['ping'] == true) ? true : false;
}
}
// use gz... functions for compressed files
if ($usegzip) {
$function_open = 'gzopen';
$function_close = 'gzclose';
$function_write = 'gzwrite';
$file_extension = '.xml.gz';
} else {
$function_open = 'fopen';
$function_close = 'fclose';
$function_write = 'fwrite';
$file_extension = '.xml';
}
$c = 0;
$i = 1;
$sitemap_filename = 'sitemap'.$i.$file_extension;
if ($autogenerate) {
$filename = $sitemap_filename;
}
$autogenerate = $autogenerate || $output_to_file;
if ($autogenerate) {
$fp = $function_open($filename, 'w');
$main_content = "Sitemap-Datei '<b>" . $filename . "</b>' erstellt.";
}
$notify_url = SITEMAP_CATALOG.$sitemap_filename;
output(SITEMAP_HEADER);
$strlen = strlen(SITEMAP_HEADER);
$cat_result = xtc_db_query("
SELECT
c.categories_id,
c.parent_id,
cd.language_id,
UNIX_TIMESTAMP(c.date_added) as date_added,
UNIX_TIMESTAMP(c.last_modified) as last_modified,
l.code
FROM
".TABLE_CATEGORIES." c,
".TABLE_CATEGORIES_DESCRIPTION." cd,
".TABLE_LANGUAGES." l
WHERE
c.categories_id = cd.categories_id AND
cd.language_id = l.languages_id
ORDER by
cd.categories_id
");
$cat_array = array();
if (xtc_db_num_rows($cat_result) > 0) {
while($cat_data = xtc_db_fetch_array($cat_result)) {
$cat_array[$cat_data['categories_id']][$cat_data['code']] = $cat_data;
}
}
reset($cat_array);
foreach($cat_array as $lang_array) {
foreach($lang_array as $cat_id => $cat_data) {
$lang_param = ($cat_data['code'] != DEFAULT_LANGUAGE) ? '&language='.$cat_data['code'] : '';
$date = ($cat_data['last_modified'] != NULL) ? $cat_data['last_modified'] : $cat_data['date_added'];
$string = sprintf(SITEMAP_ENTRY, htmlspecialchars(utf8_encode(xtc_href_link(FILENAME_DEFAULT,
rv_get_path($cat_data['categories_id'], $cat_data['code']).$lang_param, 'NONSSL', false,
SEARCH_ENGINE_FRIENDLY_URLS))) ,PRIORITY_CATEGORIES, iso8601_date($date), CHANGEFREQ_CATEGORIES);
$c_cat_total++;
output_entry();
}
}
$product_result = xtc_db_query("
SELECT
p.products_id,
pd.language_id,
UNIX_TIMESTAMP(p.products_date_added) as products_date_added,
UNIX_TIMESTAMP(p.products_last_modified) as products_last_modified,
l.code
FROM
".TABLE_PRODUCTS." p,
".TABLE_PRODUCTS_DESCRIPTION." pd,
".TABLE_LANGUAGES." l
WHERE
p.products_status='1' AND
p.products_id = pd.products_id AND
pd.language_id = l.languages_id
ORDER BY
p.products_id
");
if (xtc_db_num_rows($product_result) > 0) {
while($product_data = xtc_db_fetch_array($product_result)) {
$lang_param = ($product_data['code'] != DEFAULT_LANGUAGE) ? '&language='.$product_data['code'] : '';
$date = ($product_data['products_last_modified'] != NULL) ?
$product_data['products_last_modified'] : $product_data['products_date_added'];
$string = sprintf(SITEMAP_ENTRY, htmlspecialchars(utf8_encode(xtc_href_link(FILENAME_PRODUCT_INFO,
'products_id='.$product_data['products_id'].$lang_param, 'NONSSL', false, SEARCH_ENGINE_FRIENDLY_URLS))) ,
PRIORITY_PRODUCTS, iso8601_date($date), CHANGEFREQ_PRODUCTS);
$c_prod_total++;
output_entry();
}
}

output(SITEMAP_FOOTER);
if ($autogenerate) {
$function_close($fp);
}
$main_content .= "<br><br>" . $c_cat_total . " <b>Kategorien</b> und " . $c_prod_total . " <b>Produkte</b> exportiert.";
// generates sitemap-index file
if ($autogenerate && $i > 1) {
$sitemap_index_file = 'sitemap_index'.$file_extension;
$main_content = $main_content . "<br><br>Sitemap-Index-Datei '<b>" . $sitemap_index_file . "</b>' erstellt.";
$notify_url = SITEMAP_CATALOG.$sitemap_index_file;
$fp = $function_open('sitemap_index'.$file_extension, 'w');
$function_write($fp, SITEMAPINDEX_HEADER);
for($ii=1; $ii<=$i; $ii++) {
$function_write($fp, sprintf(SITEMAPINDEX_ENTRY, SITEMAP_CATALOG.'sitemap'.$ii.$file_extension, iso8601_date(time())));
}
$function_write($fp, SITEMAPINDEX_FOOTER);
$function_close($fp);
}
if ($notify_google) {
fopen(GOOGLE_URL.urlencode($notify_url), 'r');
$google_response = file_get_contents(GOOGLE_URL . urlencode($notify_url));
$main_content .= "<br><br>Google-Aufruf mit<br><b>" . GOOGLE_URL . '<br>' . $notify_url . "</b><br><br>" .
'<b><font color="red">Google Antwort:</font></b><br>' . $google_response;
}
require(DIR_WS_INCLUDES . 'application_bottom.php');
$smarty->caching = 0;
$smarty->assign('language', $_SESSION['language']);
$smarty->assign('CONTENT_BODY',$main_content);
$smarty->assign('BUTTON_CONTINUE','<a href="' . xtc_href_link(FILENAME_START) . '">' . xtc_image_button('button_continue.gif', IMAGE_BUTTON_CONTINUE) . '</a>');
$main_content = $smarty->fetch(CURRENT_TEMPLATE . '/module/google_sitemap.html');
$smarty->assign('main_content',$main_content);
if (!defined(RM)) $smarty->load_filter('output', 'note');
$smarty->display(CURRENT_TEMPLATE . '/index.html');
// < PHP5
if (!function_exists('file_put_contents')) {
function file_put_contents($filename, $content) {
$fp = fopen($filename, 'w');
fwrite($fp, $content);
fclose($fp);
}
}
// < PHP5
function iso8601_date($timestamp) {
if (PHP_VERSION < 5) {
$tzd = date('O',$timestamp);
$tzd = substr(chunk_split($tzd, 3, ':'),0,6);
return date('Y-m-d\TH:i:s', $timestamp) . $tzd;
} else {
return date('c', $timestamp);
}
}
// generates cPath with helper array
function rv_get_path($cat_id, $code) {
global $cat_array;
$my_cat_array = array($cat_id);
while($cat_array[$cat_id][$code]['parent_id'] != 0) {
$my_cat_array[] = $cat_array[$cat_id][$code]['parent_id'];
$cat_id = $cat_array[$cat_id][$code]['parent_id'];
}
return 'cPath='.implode('_', array_reverse($my_cat_array));
}

function output($string) {
global $function_open, $function_close, $function_write, $fp, $autogenerate;
if ($autogenerate) {
$function_write($fp, $string);
} else {
echo $string;
}
}
function output_entry()
{
global $string, $strlen, $c, $autogenerate, $fp, $function_open, $function_close, $main_content, $strlen;

output($string);
$strlen += strlen($string);
$c++;
if ($autogenerate) {
// 500000 entrys or filesize > 10,485,760 - some space for the last entry
if ( $c == MAX_ENTRYS || $strlen >= MAX_SIZE) {
output(SITEMAP_FOOTER);
$function_close($fp);
$c = 0;
$i++;
$filename = 'sitemap'.$i.$file_extension;
$fp = $function_open($filename, 'w');
$main_content = $main_content . "<br>Sitemap-Datei '<b>" . $filename . "</b>' erstellt.";
output(SITEMAP_HEADER);
$strlen = strlen(SITEMAP_HEADER);
}
}
}
?>[/PHP]

Besten Dank

Gruß Haxley

Link to comment
Share on other sites

Die time() und date() funktion von php ist hier dein Freund.

Ja das hab ich probiert. Kannst Du mir da ein Beispiel geben

wie ich eben dieses Format bekomme:

<lastmod>1970-01-01T01:00:00+01:00</lastmod>[/CODE]

Ich bekomme nur sinnfreie Zahlen.

Tausend Dank

Gruß Haxley

Link to comment
Share on other sites

wie ich eben dieses Format bekomme:

<lastmod>1970-01-01T01:00:00+01:00</lastmod>[/CODE]

[PHP]date("c");[/PHP]

Anmerkung: Diese Formatierung gibt es erst seit PHP 5, in PHP 4 müsstest Du sie Dir selbst basteln - z.B. so:

[PHP]date("Y-m-d\\Th:i:sO");[/PHP]

Siehe auch: http://www.php.net/manual/de/function.date.php :D

Dasselbe macht in Deinem Script aber auch schon die function iso8601_date($timestamp) (ziemlich weit unten), die in der Konstante SITEMAPINDEX_ENTRY (wird oben definiert) %s mit dem aktuellen Datum austauschen soll...

Im Block

[PHP]// generates sitemap-index file
/* blablabla */
for($ii=1; $ii<=$i; $ii++) {
$function_write($fp, sprintf(SITEMAPINDEX_ENTRY, SITEMAP_CATALOG.'sitemap'.$ii.$file_extension, iso8601_date(time())));
}[/PHP]

Keine Ahnung, warum das in dem Script so nicht funktioniert... :confused:

Cheers,

IaN

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
  • Create New...