Skip to content

Instantly share code, notes, and snippets.

@salayhin
Created May 31, 2012 19:48
Show Gist options
  • Save salayhin/2845775 to your computer and use it in GitHub Desktop.
Save salayhin/2845775 to your computer and use it in GitHub Desktop.
Class for create sitemap in PHP
<?php
/**
* Create Site map
*
* @category Model
* @author Md. Sirajus Salayhin <[email protected]>
*
*/
class xmlSitemap
{
public function generateXML()
{
$xmlFile = "../sitemap.xml";
$fh = fopen($xmlFile, 'w') or die("can't open file");
$sql = "SELECT DISTINCT * ,DATE_FORMAT(date, '%Y-%m-%dT%H:%i:%s+00:00') AS new_date FROM articles
WHERE articles.status = 0 ORDER BY articles.id DESC";
$res = mysql_query($sql);
while ($row = mysql_fetch_assoc($res)) {
$content[] = $row;
}
$str = '';
$str .= '<?xml version="1.0" encoding="UTF-8"?>';
$str .= '<?xml-stylesheet type="text/xsl" href="sitemap.xsl"?>
<!-- sitemap-generator-url="http://www.yourdomain.com" sitemap-generator-version="3.2.6" -->
<!-- generated-on="October 13, 2011 05:29" -->';
$str .= '<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';
for ($i = 0; $i < count($content); $i++) {
$str .= '<url>';
$str .= '<loc>http://www.yourdomain.com/article.php?id=' . $content[$i]['id'] . '</loc>';
$str .= '<lastmod>' . $content[$i]['new_date'] . '</lastmod>';
$str .= '<changefreq>daily</changefreq>';
$str .= '<priority>1.0</priority>';
$str .= '</url>';
}
$str .= '</urlset>';
fwrite($fh, $str);
fclose($fh);
}
}
<?xml version = "1.0" encoding = "UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns:html="http://www.w3.org/TR/REC-html40"
xmlns:sitemap="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>XML Sitemap</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<style type="text/css">
body {
font-family: "Lucida Grande", "Lucida Sans Unicode", Tahoma, Verdana;
font-size: 13px;
}
#intro {
background-color: #CFEBF7;
border: 1px #2580B2 solid;
padding: 5px 13px 5px 13px;
margin: 10px;
}
#intro p {
line-height: 16.8667px;
}
td {
font-size: 11px;
}
th {
text-align: left;
padding-right: 30px;
font-size: 11px;
}
tr.high {
background-color: whitesmoke;
}
#footer {
padding: 2px;
margin: 10px;
font-size: 8pt;
color: gray;
}
#footer a {
color: gray;
}
a {
color: black;
}
</style>
</head>
<body>
<h1>XML Sitemap</h1>
<div id="intro">
<p>
articleofweek.com
</p>
</div>
<div id="content">
<table cellpadding="5">
<tr style="border-bottom:1px black solid;">
<th>URL</th>
<th>Priority</th>
<th>Change Frequency</th>
<th>LastChange (GMT)</th>
</tr>
<xsl:variable name="lower" select="'abcdefghijklmnopqrstuvwxyz'"/>
<xsl:variable name="upper" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'"/>
<xsl:for-each select="sitemap:urlset/sitemap:url">
<tr>
<xsl:if test="position() mod 2 != 1">
<xsl:attribute name="class">high</xsl:attribute>
</xsl:if>
<td>
<xsl:variable name="itemURL">
<xsl:value-of select="sitemap:loc"/>
</xsl:variable>
<a href="{$itemURL}">
<xsl:value-of select="sitemap:loc"/>
</a>
</td>
<td>
<xsl:value-of select="concat(sitemap:priority*100,'%')"/>
</td>
<td>
<xsl:value-of
select="concat(translate(substring(sitemap:changefreq, 1, 1),concat($lower, $upper),concat($upper, $lower)),substring(sitemap:changefreq, 2))"/>
</td>
<td>
<xsl:value-of
select="concat(substring(sitemap:lastmod,0,11),concat(' ', substring(sitemap:lastmod,12,5)))"/>
</td>
</tr>
</xsl:for-each>
</table>
</div>
<div id="footer">
</div>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
<?php
/**
* XML Pingomatic
*
* @category Model
* @author Md. Sirajus Salayhin <[email protected]>
*
*/
class xmlPingoMatic
{
public function pingoMatic($debug = false)
{
$sql = "SELECT DISTINCT * ,DATE_FORMAT(date, '%Y-%m-%dT%H:%i:%s+00:00') AS new_date FROM articles
WHERE articles.status = 0
AND DATE_FORMAT(date, '%Y-%m-%d') = CURDATE() ORDER BY articles.id DESC";
$res = mysql_query($sql);
while ($row = mysql_fetch_assoc($res)) {
$data[] = $row;
}
$content = '';
$content .= '<?xml version="1.0"?>';
$content .= '<methodCall>';
$content .= '<methodName>weblogUpdates.ping</methodName>';
$content .= '<params>';
for ($i = 0; $i < count($data); $i++) {
$content .= '<param>';
$content .= '<value>' . $data[$i]['title'] . '</value>';
$content .= '</param>';
$content .= '<param>';
$content .= '<value>' . 'http://www.yourdomain.com/article.php?id=' . $data[$i]['id'] . '</value>';
$content .= '</param>';
}
$content .= ' </params>';
$content .= '</methodCall>';
$headers = "POST / HTTP/1.0\r\n" .
"User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1) Gecko/20090624 Firefox/3.5 (.NET CLR 3.5.30729)\r\n" .
"Host: rpc.pingomatic.com\r\n" .
"Content-Type: text/xml\r\n" .
"Content-length: " . strlen($content);
if ($debug) nl2br($headers);
$request = $headers . "\r\n\r\n" . $content;
$response = "";
$fs = fsockopen('rpc.pingomatic.com', 80, $errno, $errstr);
if ($fs) {
fwrite($fs, $request);
while (!feof($fs)) $response .= fgets($fs);
if ($debug) echo "<xmp>" . $response . "</xmp>";
fclose($fs);
preg_match_all("/<(name|value|boolean|string)>(.*)<\/(name|value|boolean|string)>/U", $response, $ar, PREG_PATTERN_ORDER);
for ($i = 0; $i < count($ar[2]); $i++) $ar[2][$i] = strip_tags($ar[2][$i]);
return array('status' => ($ar[2][1] == 1 ? 'ko' : 'ok'), 'msg' => $ar[2][3]);
} else {
if ($debug) echo "<xmp>" . $errstr . " (" . $errno . ")</xmp>";
return array('status' => 'ko', 'msg' => $errstr . " (" . $errno . ")");
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment