/** * writes sitemap to file */ function writeSitemap($FILE) { global $SETTINGS, $openFile_error, $LAYOUT; $LAYOUT->setTitle("Writing sitemap"); $gsg = new GsgXml($SETTINGS[PSNG_WEBSITE]); $numb = 0; $txtfilehandle = null; if (isset($SETTINGS[PSNG_TXTSITEMAP_FILE]) && strlen($SETTINGS[PSNG_TXTSITEMAP_FILE]) > 0) { $txtfilehandle = openFile($SETTINGS[PSNG_PAGEROOT] . $SETTINGS[PSNG_TXTSITEMAP_FILE], TRUE); if ($txtfilehandle === FALSE) { $LAYOUT->addError($openFile_error, 'Could not write sitemap'); return FALSE; } } foreach ($FILE as $numb => $value) { if ($value[PSNG_FILE_ENABLED] != '') { debug($value, "Adding file " . $value[PSNG_FILE_URL]); if (isset($txtfilehandle)) { fputs($txtfilehandle, $value[PSNG_FILE_URL] . "\n"); } if ($gsg->addUrl($value[PSNG_FILE_URL], FALSE, $value[PSNG_LASTMOD], FALSE, $value[PSNG_CHANGEFREQ], $value[PSNG_PRIORITY]) === FALSE) { $LAYOUT->addError($value[PSNG_FILE_URL], 'Could not add file to sitemap' . $gsg->errorMsg); } } else { debug($value[PSNG_FILE_URL], 'Not enabled, so not writing file to sitemap'); } } $filehandle = openFile($SETTINGS[PSNG_PAGEROOT] . $SETTINGS[PSNG_SITEMAP_FILE], TRUE); if ($filehandle === FALSE) { $LAYOUT->addError($openFile_error, 'Could not write sitemap'); return FALSE; } $xml = $gsg->output(TRUE, $SETTINGS[PSNG_COMPRESS_SITEMAP], FALSE); fputs($filehandle, $xml); fclose($filehandle); if (isset($txtfilehandle)) { fclose($txtfilehandle); } if ($numb > 50000) { $LAYOUT->addWarning('Not implemented: split result into files with only 50000 entries', 'Only 50000 entries are allowed in one sitemap file at the moment!'); } $LAYOUT->addSuccess('Sitemap successfuly created and saved to <a href="' . $SETTINGS[PSNG_SITEMAP_URL] . '" target="_blank">' . basename($SETTINGS[PSNG_SITEMAP_FILE]) . '</a>!'); if (isset($SETTINGS[PSNG_TXTSITEMAP_FILE]) && strlen($SETTINGS[PSNG_TXTSITEMAP_FILE]) > 0) { $LAYOUT->addSuccess('Txt-Sitemap successfuly created and saved to <a href="' . $SETTINGS[PSNG_TXTSITEMAP_URL] . '" target="_blank">' . basename($SETTINGS[PSNG_TXTSITEMAP_FILE]) . '</a>!'); } $LAYOUT->addText('<form action="' . $SETTINGS[PSNG_SCRIPT] . '" method="post">' . "\n" . '<input type="hidden" name="' . PSNG_SETTINGS_ACTION . '" value="' . PSNG_ACTION_SETTINGS_PINGGOOGLE . '">' . "\n" . '<input type="Submit" value="Submit to google" name="submit">' . "\n" . '</form>' . "\n"); return TRUE; }
/** * writes sitemap to file */ function writeSitemap($FILE) { global $SETTINGS, $openFile_error, $LAYOUT; $LAYOUT->setTitle("Writing sitemap"); $website = $SETTINGS[PSNG_WEBSITE]; if (substr($website, -1, 1) == '/') { $website = substr($website, 0, strlen($website) - 1); } $numb = 0; $txtfilehandle = null; $htmlfilehandle = null; if (isset($SETTINGS[PSNG_SITEMAP_FILE]) && strlen($SETTINGS[PSNG_SITEMAP_FILE]) > 0) { $gsg = new GsgXml($SETTINGS[PSNG_WEBSITE]); $gsg->setGssHeader($SETTINGS[PSNG_GSSHEADER] == 1); // set usage of gss header } if (isset($SETTINGS[PSNG_TXTSITEMAP_FILE]) && strlen($SETTINGS[PSNG_TXTSITEMAP_FILE]) > 0) { $txtfilehandle = openFile($SETTINGS[PSNG_PAGEROOT] . $SETTINGS[PSNG_TXTSITEMAP_FILE], TRUE); if ($txtfilehandle === FALSE) { $LAYOUT->addError($openFile_error, 'Could not write txt sitemap file'); } } if (isset($SETTINGS[PSNG_HTMLSITEMAP_FILE]) && strlen($SETTINGS[PSNG_HTMLSITEMAP_FILE]) > 0) { $htmlfilehandle = openFile($SETTINGS[PSNG_PAGEROOT] . $SETTINGS[PSNG_HTMLSITEMAP_FILE], TRUE); if ($htmlfilehandle === FALSE) { $LAYOUT->addError($openFile_error, 'Could not write html sitemap file'); } } if (isset($SETTINGS[PSNG_RSSSITEMAP_FILE]) && strlen($SETTINGS[PSNG_RSSSITEMAP_FILE]) > 0) { $rss = new UniversalFeedCreator(); $rss->useCached(); $rss->title = "Sitemap of " . $SETTINGS[PSNG_WEBSITE]; // TODO use description? //$rss->description = "daily news from the PHP scripting world"; $rss->link = $SETTINGS[PSNG_WEBSITE]; $rss->syndicationURL = $SETTINGS[PSNG_WEBSITE] . $SETTINGS[PSNG_RSSSITEMAP_FILE]; // TODO use image ??? /* $image = new FeedImage(); $image->title = "dailyphp.net logo"; $image->url = "http://www.dailyphp.net/images/logo.gif"; $image->link = "http://www.dailyphp.net"; $image->description = "Feed provided by dailyphp.net. Click to visit."; $rss->image = $image; */ } foreach ($FILE as $numb => $value) { if ($value[PSNG_FILE_ENABLED] != '') { debug($value, "Adding file " . $value[PSNG_FILE_URL]); if (isset($txtfilehandle)) { fputs($txtfilehandle, $value[PSNG_FILE_URL] . "\n"); } if (isset($SETTINGS[PSNG_RSSSITEMAP_FILE]) && strlen($SETTINGS[PSNG_RSSSITEMAP_FILE]) > 0) { $item = new FeedItem(); $item->title = $value[PSNG_FILE_TITLE]; $item->link = $value[PSNG_FILE_URL]; //$item->description = $data->short; $item->date = $value[PSNG_FILE_LASTMOD]; //$item->source = "http://www.dailyphp.net"; //$item->author = "John Doe"; $rss->addItem($item); } if (isset($htmlfilehandle)) { // todo handle this in an external class (takes the urls and titles, writes a nice and clean sitemap file) fputs($htmlfilehandle, '<a href="' . $value[PSNG_FILE_URL] . '" title="' . $value[PSNG_FILE_TITLE] . '">' . $value[PSNG_FILE_TITLE] . '</a><br />' . "\n"); } if (isset($SETTINGS[PSNG_SITEMAP_FILE]) && strlen($SETTINGS[PSNG_SITEMAP_FILE]) > 0) { if ($gsg->addUrl($value[PSNG_FILE_URL], FALSE, $value[PSNG_LASTMOD], FALSE, $value[PSNG_CHANGEFREQ], $value[PSNG_PRIORITY]) === FALSE) { $LAYOUT->addError($value[PSNG_FILE_URL], 'Could not add file to sitemap' . $gsg->errorMsg); } } } else { debug($value[PSNG_FILE_URL], 'Not enabled, so not writing file to sitemap'); } } if (isset($SETTINGS[PSNG_SITEMAP_FILE]) && strlen($SETTINGS[PSNG_SITEMAP_FILE]) > 0) { $filehandle = openFile($SETTINGS[PSNG_PAGEROOT] . $SETTINGS[PSNG_SITEMAP_FILE], TRUE); if ($filehandle === FALSE) { $LAYOUT->addError($openFile_error, 'Could not write xml sitemap'); return FALSE; } $xml = $gsg->output(TRUE, $SETTINGS[PSNG_COMPRESS_SITEMAP], FALSE); fputs($filehandle, $xml); fclose($filehandle); } if (isset($txtfilehandle)) { fclose($txtfilehandle); } if (isset($htmlfilehandle)) { fclose($htmlfilehandle); } if (isset($SETTINGS[PSNG_RSSSITEMAP_FILE]) && strlen($SETTINGS[PSNG_RSSSITEMAP_FILE]) > 0) { $rss->saveFeed("RSS1.0", $SETTINGS[PSNG_PAGEROOT] . $SETTINGS[PSNG_RSSSITEMAP_FILE], false); } if (isset($SETTINGS[PSNG_HTMLSITEMAP_FILE]) && strlen($SETTINGS[PSNG_HTMLSITEMAP_FILE]) > 0) { $rss->saveFeed("HTML", $SETTINGS[PSNG_PAGEROOT] . $SETTINGS[PSNG_HTMLSITEMAP_FILE], false); } if ($numb > 50000) { $LAYOUT->addWarning('Not implemented: split result into files with only 50000 entries', 'Only 50000 entries are allowed in one sitemap file at the moment!'); } $LAYOUT->addSuccess('Sitemap successfuly created and saved to <a href="' . $SETTINGS[PSNG_SITEMAP_URL] . '" target="_blank">' . basename($SETTINGS[PSNG_SITEMAP_FILE]) . '</a>!'); if (isset($SETTINGS[PSNG_TXTSITEMAP_FILE]) && strlen($SETTINGS[PSNG_TXTSITEMAP_FILE]) > 0) { $LAYOUT->addSuccess('Txt-Sitemap successfuly created and saved to <a href="' . $SETTINGS[PSNG_TXTSITEMAP_FILE] . '" target="_blank">' . basename($SETTINGS[PSNG_TXTSITEMAP_FILE]) . '</a>!'); } if (isset($SETTINGS[PSNG_HTMLSITEMAP_FILE]) && strlen($SETTINGS[PSNG_HTMLSITEMAP_FILE]) > 0) { $LAYOUT->addSuccess('HTML-Sitemap successfuly created and saved to <a href="' . $SETTINGS[PSNG_HTMLSITEMAP_FILE] . '" target="_blank">' . basename($SETTINGS[PSNG_HTMLSITEMAP_FILE]) . '</a>!'); } if (isset($SETTINGS[PSNG_RSSSITEMAP_FILE]) && strlen($SETTINGS[PSNG_RSSSITEMAP_FILE]) > 0) { $LAYOUT->addSuccess('RSS-Sitemap successfuly created and saved to <a href="' . $SETTINGS[PSNG_RSSSITEMAP_FILE] . '" target="_blank">' . basename($SETTINGS[PSNG_RSSSITEMAP_FILE]) . '</a>!'); } $LAYOUT->addText('<form action="' . $SETTINGS[PSNG_SCRIPT] . '" method="post">' . "\n" . '<input type="hidden" name="' . PSNG_SETTINGS_ACTION . '" value="' . PSNG_ACTION_SETTINGS_PINGGOOGLE . '">' . "\n" . '<input type="Submit" value="Submit to search engines" name="submit">' . "\n" . '</form>' . "\n"); return TRUE; }
/** * Generate a sitemap of the website * @param sfWebRequest $request */ public function executeSitemap(sfWebRequest $request) { $gsg = new GsgXml(); $gsg->addUrl('http://' . $_SERVER['HTTP_HOST'], false, date('c'), false, 'daily', 1); $pages = sfPlopPageQuery::create()->filterByIsPublished(true)->filterByIsCategory(false)->find(); foreach ($pages as $page) { $url = '@sf_plop_page_show?slug=' . $page->getSlug(); $url_date = $page->getUpdatedAt('c'); foreach (sfPlop::get('sf_plop_cultures') as $culture) { $gsg->addUrl($this->getController()->genUrl($url . '&sf_culture=' . $culture, true), false, $url_date, false, 'daily', 0.5); } } $gsg->generateXml(); $this->setLayout(false); $this->getResponse()->setContentType('text/xml'); return $this->renderText($gsg->output()); }
/** * Returns the xml string * * @return string */ public function getXml() { return $this->gsgxml->output(); }