• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 220
  • Last Modified:

Still sitemap issues

Hi, I recently posted a question and is just has not worked for me in the end.

I need a sitemap generator script that will generate an xml sitemap and a html sitemap too and save it to the root.

I also need to be able to set folders and files which I don't want to appear in the list.

I bought a generator from http://www.xml-sitemaps.com/ but it's not working properly and support there is really poor so I'm looking for another script that will do the job.

Can anyone help please?

thanks

st3vo
0
ST3VO
Asked:
ST3VO
  • 3
  • 2
1 Solution
 
thehagmanCommented:
The attached code is a slight modification of what generates my sitemap.
The part given here recursively looks for *.html files
For dynamic pages you'd need to know what parameters are possible.
For example, you may have to make a mysql_query "SELECT id from ArticleTable", and for each entry $id call
SitemapUrl("/showarticle.php?id=$id", date("Y-m-d"), 1.0, 'weekly');
<?
$basedir = $_SERVER['DOCUMENT_ROOT'];
$indextime = date("Y-m-d",filemtime("$basedir/index.html"));
 
function SitemapUrl($U,$T,$P,$F) {
?>
 <url>
  <loc>http://www.mydomain.com<?=$U?></loc>
  <lastmod><?=$T?></lastmod>
  <changefreq><?=$F?></changefreq>
  <priority><?=$P?></priority>
 </url>
<?}
 
?>
<urlset xmlns="http://www.google.com/schemas/sitemap/0.84">
<?
SitemapUrl('/', $indextime, 0.4, 'monthly');
 
function ListHtml($Dir,$Url) {
        $handle = @opendir($Dir);
        if ($handle !== false) {
                while (($file = readdir($handle)) !== false) {
                        $t = filetype($Dir.$file);
                        if ($file == '.' || $file == '..') {
                                // self or parent -- ignore
                        } else if ($t == 'dir') {
                                $file .= '/';
                                ListHtml($Dir.$file, $Url.$file);
                        } else if ($t == 'file' && pathinfo($file,PATHINFO_EXTENSION) == 'html') {
                                $T = date('Y-m-d',filemtime($Dir.$file));
                                $pr = 0.6; $fr = 'monthly';
                                // e.g. make "news" more important
                                if (strstr($Url,'/news/')) { $pr = 1.0; $fr = 'weekly'; }
                                SitemapUrl($Url.$file,$T,$pr,$fr);
                        }
                }
                closedir($handle);
        } else {
                echo "<!-- failed to open $Dir -->\n";
        }
}
 
ListHtml($basedir."/", "/");
 
?>

Open in new window

0
 
ST3VOAuthor Commented:
What about searching for .php files and setting directories and files that you don't want in the sitemap?
0
 
thehagmanCommented:
The code I gave should be easy enough to adapt for at least some very simple scenarios.
E.g. if you have directories /A/, /B/, /C/ and don't want (C) to occur, change the line
ListHtml($basedir."/", "/");
to
ListHtml($basedir."/A/", "/A/");
ListHtml($basedir."/B/", "/B/");

I deliberately left out php files since I don't know if they require parameters.
If all your php are parameterless, you can change
} else if ($t == 'file' && pathinfo($file,PATHINFO_EXTENSION) == 'html') {
to
} else if ($t == 'file' && (pathinfo($file,PATHINFO_EXTENSION) == 'html' || pathinfo($file,PATHINFO_EXTENSION) == 'php') ) {
However, I cannot predict how dynamic your php pages are -- you may want to use the current date instead of the filetime and a different frequency setting for php files.

0
 
ST3VOAuthor Commented:
I'll give it a shot and let you know how I get on..thanks!
0
 
ST3VOAuthor Commented:
Thanks a lot! :o)
0

Featured Post

[Webinar] Improve your customer journey

A positive customer journey is important in attracting and retaining business. To improve this experience, you can use Google Maps APIs to increase checkout conversions, boost user engagement, and optimize order fulfillment. Learn how in this webinar presented by Dito.

  • 3
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now