Квартиры, дома, земельные участки Краснодарского края без посредников. Объявления собственников недвижимости.
Реклама здесь
Главная
Примеры PHP Примеры JavaScript Примеры Ajax Примеры CSS,HTML

Скрипт генератора карты сайта

Этот пример класса строит карту сайта на основании дерева каталогов текущего сайта. Бесполезен для динамических сайтов.


<?php
/**
   * 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 = array() ;
    private 
$_fileArray = array() ;
    private 
$_dirName '/';
    private 
$_nameArray = array();
    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 = array();
      
$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 = array();
      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 = array();
      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], 0strrpos($fileArray[$i], '/')).'/';
        if (
trim($dirName) == trim($dirPath))
         
$tempArray[] = trim(str_replace($dirPath''$fileArray[$i]));
      }
      
$this->_nameArray[$dirName] = $tempArray;
    }
  }
?>

?>
Скопировать в буфер

А здесь можно построить карту сайта.

Здесь можно скачать скрипт генератора карты сайта.

© Copyright 2008-2012 by KDG