ryan Posted January 17, 2012 Share Posted January 17, 2012 Quote I'm on the verge of converting your code back to a template, this is getting silly... Just want to clarify that the problem is not with Pete's module. There was an obscure problem with the modules installer in the core which has been fixed. I'm not certain this is the problem in your case as you are still getting a different behavior than us, but I suggest grabbing the latest copy of ProcessWire before trying anything else. Link to comment Share on other sites More sharing options...
theSeekerr Posted January 17, 2012 Share Posted January 17, 2012 On 1/17/2012 at 3:33 PM, ryan said: Just want to clarify that the problem is not with Pete's module. My apologies for implying any such thing, just getting frustrated. When I saw this module it looked like a great timesaver, and that hasn't worked out. I'm uploading a fresh copy of PW now, we'll see how it goes. EDIT: Still no go! Link to comment Share on other sites More sharing options...
ryan Posted January 17, 2012 Share Posted January 17, 2012 Can you confirm that you still get this same error message and that your ProcessWire reports it's version number as 2.2? Quote Exception: Unable to create path: /MarkupSitemapXML/ (in /home/theseeke/public_html/wire/core/CacheFile.php line 62) This error message was shown because you are logged in as a Superuser. Error has been logged. thanks, Ryan Link to comment Share on other sites More sharing options...
theSeekerr Posted January 17, 2012 Share Posted January 17, 2012 Correct - the error message remains exactly as quoted, and the admin page reports the version number as 2.2.0. Link to comment Share on other sites More sharing options...
ryan Posted January 17, 2012 Share Posted January 17, 2012 I just downloaded a fresh/blank copy of PW 2.2 and installed this module just to make sure it didn't have anything to do with the dev site I had tested on before. But it's working as expected, creating the dir in the right place, etc. So there must be something else that I'm missing. The behavior you are describing definitely indicates a core bug. I can't think of any other possibility. I'm going to do more testing here and hope to find and push a solution shortly. Link to comment Share on other sites More sharing options...
theSeekerr Posted January 31, 2012 Share Posted January 31, 2012 I'm pleased to say that this issue is resolved, and when it came right down to it, Problem Existed Between Keyboard and Chair. Stupid me forgot to read the instructions, and installed the module to /wire/modules instead of /site/modules. Now that it's in the right place it's working fine, cheers! Link to comment Share on other sites More sharing options...
ryan Posted January 31, 2012 Share Posted January 31, 2012 Thanks for reporting back, glad that it's working. I was stuck trying to determine how it was doing that, so it's a relief to hear it's resolved. This has still been valuable though as we did solve a bug as a result (top of this page). Link to comment Share on other sites More sharing options...
ffub Posted March 3, 2012 Share Posted March 3, 2012 Hi there, I've been using this module on a couple of sites in place of the template I previously used and it certainly is a boon in keeping my template folder a lot tidier — great work! I changed line 53 to check for access when iterating the children so that user-restricted pages do not show up in the sitemap. I think this is a saner default but could be a settting too. foreach($page->children("check_access=1") as $child) $entry .= $this->sitemapListPage($child); Thanks, Stephen Link to comment Share on other sites More sharing options...
apeisa Posted March 3, 2012 Share Posted March 3, 2012 Stephen: check_access=1 is default, so you don't have to include that. If you don't want to check access, then you need to use check_access=0. 1 Link to comment Share on other sites More sharing options...
ffub Posted March 4, 2012 Share Posted March 4, 2012 Very true. I obviously visited the sitemap straight after installing, while still logged in as admin. My mistake! Thanks, apeisa Link to comment Share on other sites More sharing options...
PHPSpert Posted August 19, 2012 Share Posted August 19, 2012 (edited) Want to share a few things I've added for a magazine site I'm building: First of all, I think "priority" and "changefreq" are fairly important if you're going to have a sitemap at all. This post has some info on Google's guidelines: http://www.eduki.com...-are-important/ What I decided to do was quickly add two global fields to PW so I can set these values manually in each page: -sitemap_priority -changefreq And in the code: public function sitemapListPage($page) { $entry = ""; $default_priority = "0.5"; $default_changefreq = "monthly"; include $this->fuel('config')->paths->templates . "sitemap_module_defaults.inc"; if ($page->sitemap_ignore == 0 || $page->path == '/') { // $page->path part added so that it ignores hiding the homepage, else you wouldn't have ANY pages returned $modified = date ('Y-m-d', $page->modified); $entry = "\n <url>\n"; $entry .= " <loc>{$page->httpUrl}</loc>\n"; $entry .= " <lastmod>{$modified}</lastmod>\n"; if(!empty($page->sitemap_priority)) { $entry .= " <priority>{$page->sitemap_priority}</priority>\n"; } else { $entry .= " <priority>{$default_priority}</priority>\n"; } if(!empty($page->changefreq)) { $entry .= " <changefreq>{$page->changefreq}</changefreq>\n"; } else { $entry .= " <changefreq>{$default_changefreq}</changefreq>\n"; } $entry .= " </url>"; if($page->numChildren) { foreach($page->children as $child) $entry .= $this->sitemapListPage($child); } } return $entry; } The sitemap_module_defaults.inc file in the templates dir is so I can set some values on the fly without doing it manually: <?php switch($page->template->name) { case "blog_post": case "blog_topic": case "blog_topic_type": $default_priority = "0.7"; $default_changefreq = "daily"; break; } ?> That's done and works fine for me. Something I found frustrating with the sitemap module was that I couldn't add virtual pages I made. For example, if there's a page with urlSegments with some kind of page manipulation they won't show up on the sitemap, for obvious reasons. So what I did was add this method to the module: public function sitemapListVirtualPage($httpUrl, $modified = NULL, $sitemap_priority = "0.5", $changefreq = "monthly") { $entry = ""; $modified = date ('Y-m-d', $modified); $entry = "\n <url>\n"; $entry .= " <loc>{$httpUrl}</loc>\n"; if($modified) { $entry .= " <lastmod>{$modified}</lastmod>\n"; } if($sitemap_priority) { $entry .= " <priority>" . (float)$sitemap_priority . "</priority>\n"; } if($changefreq) { $entry .= " <changefreq>{$changefreq}</changefreq>\n"; } $entry .= " </url>"; return $entry; } And added this include to the init method before the output is saved to cache: public function init() { // Intercept a request for a root URL ending in sitemap.xml and output if (strpos($_SERVER['REQUEST_URI'], wire('config')->urls->root . 'sitemap.xml') !== FALSE) { // Check for the cached sitemap, else generate and cache a fresh sitemap $cache = wire('modules')->get("MarkupCache"); if(!$output = $cache->get("MarkupSitemapXML", 3600)) { $output = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"; $output .= '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'; $output .= $this->sitemapListPage(wire('pages')->get("/")); include $this->fuel('config')->paths->templates . "sitemap_module_virtual.inc"; $output .= "\n</urlset>"; $cache->save($output); } header("Content-Type: text/xml"); echo $output; exit; } } And in my sitemap_module_virtual.inc file I did this: <?php foreach(wire('pages')->find("template=blog_topic|blog_topic_type") as $real_page) { $output .= $this->sitemapListVirtualPage("http://" . $this->fuel('config')->httpHost . $real_page->url . "archives/", wire('pages')->get("template=blog_post,sort=-created")->modified, "0.4", "daily"); } foreach(wire('pages')->find("template=blog_topic|blog_topic_type") as $real_page) { $output .= $this->sitemapListVirtualPage("http://" . $this->fuel('config')->httpHost . $real_page->url . "rss/", wire('pages')->get("template=blog_post,sort=-created")->modified, "0.4", "daily"); } ?> In this part, I have manipulated /archive/ and /rss/ sub-pages for each blog_topic and sub-topic(or blog_topic_type) using urlSegments. I wanted these to show up on the sitemap, even though they're probably not super important. Usually I wouldn't bother doing this if it was just these kinds of pages. But what if you have countless articles with manipulated urls that don't show in the sitemap? This is perfect example of why I did this for the future as well. I've been trying to understand how to do these things for a while, so I hope it helps someone out. EDIT: I have a download with all of my changes if anyone's interested in taking a look: http://clintonskakun.com/processwire-docs/posts/the-xml-sitemap-module-with-priority-and-changefreq-and-more/ Edited August 19, 2012 by ClintonSkakun 1 Link to comment Share on other sites More sharing options...
ryan Posted August 20, 2012 Share Posted August 20, 2012 Thanks for posting this, these seem like some useful additions and some good insights on sitemap.xml too. Link to comment Share on other sites More sharing options...
Pete Posted November 18, 2012 Author Share Posted November 18, 2012 jukooz asked me a while back how to stick the sitemaps into a template as he's using the multisite module and currently I guess that this module will pull the sitemap for EVERY site on an install...? This should work on a per-site basis having it in a separate template file per site as a workaround for now, but pay attention to the comments please as there are things to change per-site - please also note that this is un-tested and largely just pulled from the module and tweaked for pasting into a template for use instead of the module: EDIT: See attachment as the forum software tries to parse a URL in the code : sitemap.txt I've also updated the module (see first post) to v1.0.3 to check if the page is viewable before including it in the sitemap - I noticed that it was incorrectly listing pages that had no template file... oops! 1 Link to comment Share on other sites More sharing options...
DV-JF Posted January 10, 2013 Share Posted January 10, 2013 Hey, is it possible to use this module with the LanguageLocalizedURL ? I wanne make the site multilanguage like this: www.url.de/de/testindeutsch/ www.url.de/en/testinenglish/ Would like to hear from you... Greets Jens alias DV-JF Link to comment Share on other sites More sharing options...
ryan Posted January 10, 2013 Share Posted January 10, 2013 While I've not tried it, I would guess that this module does not collaborate with or accommodate the LanguageLocalizedURL module in any special way. Though Pete could say for sure. Link to comment Share on other sites More sharing options...
DV-JF Posted January 10, 2013 Share Posted January 10, 2013 Hey Ryan, thx for answering... On 1/10/2013 at 1:39 PM, ryan said: Though Pete could say for sure. Hope so Greets Link to comment Share on other sites More sharing options...
Pete Posted January 10, 2013 Author Share Posted January 10, 2013 It doesn't accommodate it at the moment, no, but I may need this myself soon so if you can wait a week or two I may have an update (it's not at the top of my list at the moment but I might surprise myself and do it sooner ). Thinking out loud, it needs: Check if LanguageLocalizedURL is installed Find the root page for each language Generate a sitemap.xml page under each root page (it doesn't really generate a page in the database, it just outputs the sitemap if you request that URL) I think that's it, but I need to get to grips with the LanguageLocalizedURL first. Link to comment Share on other sites More sharing options...
Soma Posted January 10, 2013 Share Posted January 10, 2013 Pete the LLU module doesn't have separate trees, it uses a gateways page for each language in the root like "/de/" "/en/" with url segments to then get the page and switch user language. The site structure is still all the same as without, you just use text language fields. The parsing of the url happend automaticly through these gateway pages and it hooks into Page::path to change the url of the pages system wide. So if you do a echo $page->url you'll get the language url in the language you're currently in. Like /en/about-us/, /de/ueber-uns/. Have anyone tried yet if it doesn't already work? Link to comment Share on other sites More sharing options...
Pete Posted January 10, 2013 Author Share Posted January 10, 2013 Soma just submitted a pull request and I merged it. The 1.0.4 version should allow you to use this with the LanguageLocalizedURL module - let us know how you get on and thanks to Soma Link to comment Share on other sites More sharing options...
Soma Posted January 10, 2013 Share Posted January 10, 2013 Pete, thanks, but I already pulled another request, forgot to up the cache time. Also to fully work it would also have to add the "language_published" check to see if language version of the page is really published. Will try to add that later. Also wanted to add that I never use sitemaps for google and never will again (used to try long time ago, but it doesn't really help at all if you build the site carefully. It just eating time doing it and making sure everthing works still). It's not as easy as it first seems and can even be contra productive if not done carefully. Problem with this module as it is now, it will not find and list pages that may are added through urlSegments and I don't see a way to do it easy. Also it doesn't have weighting etc. 1 Link to comment Share on other sites More sharing options...
Pete Posted January 10, 2013 Author Share Posted January 10, 2013 Thanks - merged it The main reason I created it was because it gets a new site listed faster - plain and simple. That was my experience from sitemaps a few years ago at least so I hope it still happens, but it does seem to work from my experience. I've never bothered with weighting or anything like that. Not bothered about URL segments either as for a start the crawler will find a link to that from a normal page on the site presumably, but my main goal was to get Google to crawl the page sooner than it normally would - and I think it will do this every time it looks at the sitemap and sees a new page (assuming it doesn't find it in the crawl already on its own by following links in the content). Think of it this way - if you release a brand new site without telling Google, it will take until someone links to your site before Google is aware of its existence. On a small, personal site with no blog or comments that could be a loooong time, but the first thing I usually do is launch a site and submit it so I know it's done. The argument against this is there are other ways of doing that as search engine companies often have pages where you can just type your domain in and they will search it sometime later, but I like to keep Google informed when I add new pages etc just in case it has a lapse in concentration and misses something Link to comment Share on other sites More sharing options...
Soma Posted January 10, 2013 Share Posted January 10, 2013 just uped another pull request... I think google doesn't parse the website if it has a sitemap.xml. Or has this changed? I found myself fixing others website by actually removing the sitemap form google. Google is so fast nowadays it doesn't matter that much, as it won't be in index before index update. I could be wrong as things change all the time, but thats my personal experience and from readup. Also if you add a sitemap page to your site will help if you really worry about it. As with most seo things you have to take everything with a grain of salt at the end. It's maybe ok if google doesn't come to your new site if it's new, but tests have shown even only 1 link to your site and google will parse it in 1 day if you have a nice structure. Link to comment Share on other sites More sharing options...
Soma Posted January 10, 2013 Share Posted January 10, 2013 I used to post a link on my website to give my new client sites a poke. Work well. Or even in this forum. 1 Link to comment Share on other sites More sharing options...
Pete Posted January 12, 2013 Author Share Posted January 12, 2013 Forgot to mention, I've pulled in the last of Soma's pull requests so this is now v1.0.5 to implement the added functionality he wrote as well as the fixes for the bugs he created My fault for not testing 1 Link to comment Share on other sites More sharing options...
Soma Posted January 12, 2013 Share Posted January 12, 2013 Read me comment on my still open pull request... you forgot something https://github.com/Notanotherdotcom/MarkupSitemapXML/pull/4#issuecomment-12185247 Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now