Регистрация Войти
Войти через VK Войти через FB Войти через Google Войти через Яндекс
Войти через VK Войти через FB Войти через Google Войти через Яндекс
Поиск по сайту
Скрипт генератора карты сайта
Этот пример класса строит карту сайта на основании дерева каталогов текущего сайта. Бесполезен для динамических сайтов.
/**
* Class to generate the sitemap ( output a dir structure)
* Thsi class outputs the result in XMl or displays the result on the browser
* @author Rochak Chauhan
*/
class Sitemap
{
private $_dirArray = [] ;
private $_fileArray = [] ;
private $_dirName = '/';
private $_nameArray = [];
private static $_flag = true;
private $_nodeFlag = true;
private $_dom = '';
private $_root = '';
private $_fileNode = '';
private $_dirNode = '';
private $_childDirNode = '';
/**
* Contruction fucntion
* @param string $dirName
* @return void
*/
public function __construct($dirName)
{
if (trim($dirName) != '') $this->_dirName = trim($dirName);
}
/**
* Function to convert time in secs into mins
* @param $timeInSec int
* $return string
*/
public function convertSecToMins($timeInSec)
{
if( $timeInSec < 60 )
{
if( $timeInSec > 1)
$secString = "secs";
else
$secString = "sec";
$timeTaken = "$timeInSec $secString";
}
else
{
$seconds = ($timeInSec % 60);
$minutes = ($timeInSec/60);
$minutes = sprintf("%01.0f", $minutes);
if( $minutes > 1)
$minString = "mins";
else
$minString = "min";
if( $seconds > 1)
$secString = "secs";
else
$secString = "sec";
$timeTaken = "$minutes $minString $seconds $secString";
}
return trim($timeTaken);
}
/**
* Function to read a directory recursively and finds a string in all the files.
* it also returns the number of times a sting was found in a file
* @param $path string
* @return mixed
*/
public function readDirectory($path = '')
{
if (trim($path) == '') $path = $this->_dirName;
$returnArray = [];
$handle = @opendir($path);
while ($file = @readdir($handle) )
{
if (is_dir($path.$file) && $file != "." && $file != "..")
{ $sub_dir = $path . $file . "/" ;
array_push($this->_dirArray, $sub_dir);
$this->readDirectory($sub_dir);
}
elseif (is_file($path.$file) && $file != "." && $file != "..")
{ $sub_dir = $path . $file ;
array_push($this->_fileArray, $sub_dir);
}
}
$returnArray = array($this->_dirArray, $this->_fileArray );
return $returnArray;
}
/**
* This function generates the sitemap
* @return mixed
*/
public function generateXmlSiteMap($writeToFile = false)
{ $mainArray = $this->readDirectory('');
$fileArray = $mainArray[1];
$this->startDomXml('sitemap');
for ($i=0; $i < count($fileArray); $i++)
{ $fileName = trim(substr(strrchr($fileArray[$i], '/'), 1));
$dirName = trim(str_replace($fileName, '', $fileArray[$i]));
$this->populateArray($dirName);
}
$foldersInRootDir = $this->getFoldersInRootDir();
foreach ($this->_nameArray as $name=>$key)
{ $this->generateNodes($name, $key , $foldersInRootDir);
}
if ($writeToFile)
{ $fp = fopen('xmlOutput.xml', 'w+') or die("<B>ERROR: </B> Failed to open file for writing.");
fwrite($fp, $this->_dom->saveXML()) or die("<B>ERROR: </B> Failed to write contents to the file.");
fclose($fp);
echo "Content written to file: <a href='xmlOutput.xml'> Click to open.</a>";
}
else
{ return $this->_dom->saveXML();
}
}
/**
* This function generates the nodes
* @param string $name
* @param array $foldersInRootDir
* @param array $key
* @return void
*/
private function generateNodes($name, $key, $foldersInRootDir)
{
$childDirArray = $this->getChildDir($name);
/*echo "<pre>";
echo $name."<br>";
print_r($foldersInRootDir);
print_r($this->_dirArray);
print_r($childDirArray);
echo "<HR>";*/
if (in_array($name, $foldersInRootDir))
{
$this->createDirNode('dirname', $name);
for ($i=0; $i < count($key); $i++)
{
$this->createFileNode('filenode', $key[$i]);
}
if (count($childDirArray))
{
for ($i=0; $i < count($childDirArray); $i++)
{
$this->createDirNode('dirname', $childDirArray[$i], true);
$this->generateNodes($childDirArray[$i], $key, $this->_dirArray);
}
}
}
}
/**
* This fucntion creates the instance of DOM Xml object
*
* @return void
*/
private function startDomXml($rootNodeName)
{
$this->_dom = new DOMDocument('1.0');
$this->_dom->formatOutput = true;
$this->_root = $this->_dom->createElement($rootNodeName);
$this->_root = $this->_dom->appendChild($this->_root);
}
/**
* This function creates a dir node in the xml file
* @param string $dirNode
* @return void
*/
private function createDirNode($dirNode, $value, $isChildNode = false, $appendToChildNode = false)
{
if (!is_object($this->_dom))
{
die ("<B>ERROR:</B> Cannot call fucntion: ".__FUNCTION__." without creating dom xml object");
}
else
{
if ($appendToChildNode)
$node = $this->_childDirNode;
else
$node = $this->_dirNode;
if ($isChildNode)
{
$this->_childDirNode = $this->_dom->createElement($dirNode, $value);
$this->_childDirNode = $node->appendChild($this->_childDirNode);
}
else
{
$this->_dirNode = $this->_dom->createElement($dirNode, $value);
$this->_dirNode = $this->_root->appendChild($this->_dirNode);
}
}
}
/**
* This function creates a file node in the xml file
* @param string $fileNode
* @return void
*/
private function createFileNode($fileNode, $value, $appendToChildNode = false)
{
if (!is_object($this->_dom))
{
die ("<B>ERROR:</B> Cannot call fucntion: ".__FUNCTION__." without creating dom xml object");
}
else
{
if ($appendToChildNode)
{
$this->_fileNode = $this->_dom->createElement($fileNode, $value);
$this->_fileNode = $this->_childDirNode->appendChild($this->_fileNode);
}
else
{
$this->_fileNode = $this->_dom->createElement($fileNode, $value);
$this->_fileNode = $this->_dirNode->appendChild($this->_fileNode);
}
}
}
/**
* This function returns the names of the folder inside the parent dir
* @param string $parentDir
* @access private
* @return array
*/
public function getChildDir($parentDir)
{
$returnArray = [];
foreach ($this->_dirArray as $tmp)
{
if (substr_count($tmp, $parentDir))
{
$dirToBeAdded = substr($tmp, (strpos($tmp, $parentDir)+strlen($parentDir)) ) ;
if ( trim($dirToBeAdded) != '' && substr_count($dirToBeAdded, '/') == 1)
{
$returnArray[] = $parentDir.$dirToBeAdded;
}
}
}
return $returnArray;
}
/**
* This function returns the name(s) of all folders in the root/parent dir
* @param string $rootdir
* @return array
*/
private function getFoldersInRootDir()
{
$returnArray = [];
foreach ($this->_dirArray as $dir)
{
$tmpArray = explode('/', $dir);
if (isset($tmpArray[1]))
{ if (!in_array($this->_dirName.$tmpArray[1]."/", $returnArray))
array_push($returnArray, $this->_dirName.$tmpArray[1]."/");
}
}
return $returnArray;
}
/**
* This function populated the array for dir/file
* @param array $dirName
* @return void
*/
private function populateArray($dirName)
{
$fileArray = $this->_fileArray;
for ($i=0; $i < count($fileArray); $i++)
{
$dirPath = substr($fileArray[$i], 0, strrpos($fileArray[$i], '/')).'/';
if (trim($dirName) == trim($dirPath))
$tempArray[] = trim(str_replace($dirPath, '', $fileArray[$i]));
}
$this->_nameArray[$dirName] = $tempArray;
}
}
А здесь можно построить карту сайта
Здесь можно купить и скачать скрипт поиска по сайту + генератора карты сайта
Здесь можно скачать PHP скрипт генератора карты сайта
.
Прокомментировать/Отблагодарить