Beispiel #1
0
/**
 * 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();
 }