[Okta Webinar] Learn how to a build a cloud-first strategyRegister Now

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 219
  • 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

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

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