تالار گفتمان nCIS.ir

نسخه‌ی کامل: نسخه شئ گرای اسکریپت تولید خودکار SiteMap که قبلاً نوشته بودم
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
[shcode=php]<?php
   /**
    * Automated XML Site Map Generator
    * @author Mohammad Mostafa Shahreki
    * @copyright All rights reserved for barnamenevis
    * @link http://www.ncis.ir
    */
   class SiteMap {
       /**
        * @var array Ignore the file/folder if these words appear anywhere in the name
        */
       private static $alwaysIgnore;
       
       /**
        * @var array Allowed extensions to consider in sitemap
        */
       private static $extensions;
       
       /**
        * @var array The script will not enter these folders
        */
       private static $ignoreDirs;
       
       /**
        * @var array These files will not be linked in the sitemap
        */
       private static $ignoreFiles;
       
       /**
        * @var string Where is the root of the site path
        */
       private static $root;
       
       /**
        * @var string The Url of the site - the last '/' is needed
        */
       private static $url;
       
       /**
        * This function extracts pages
        * @param string $currentDir The current direcotry
        * @return array The array of extracted pages
        */
       private static function getPages($currentDir) {
           $pages = array();
           chdir($currentDir);
           $ext = '{*.' . implode(',*.', self::$extensions) . '}';
           $files = glob($ext, GLOB_BRACE);
           foreach($files as $file) {
               $flag = true;
               if(in_array($file, self::$ignoreFiles)) {
                   $flag = false;
               }
               else {
                   foreach(self::$alwaysIgnore as $ignore) {
                       if(strpos($file, $ignore) !== false) {
                           $flag = false;
                       }
                   }
               }
               if($flag) {
                   $pages[] = self::$url . ($currentDir != self::$root ? $currentDir . '/' : '') . $file;
               }
           }
           $dirs = glob('{*,*.*}', GLOB_BRACE | GLOB_ONLYDIR);
           foreach($dirs as $dir) {
               $flag = true;
               if(in_array($dir, self::$ignoreDirs)) {
                   $flag = false;
               }
               else {
                   foreach(self::$alwaysIgnore as $ignore) {
                       if(strpos($dir, $ignore) !== false) {
                           $flag = false;
                       }
                   }
               }
               if($flag) {
                   $cwd = getcwd();
                   $pages = array_merge($pages, self::getPages(str_replace('\\', '/', $dir)));
                   chdir($cwd);
               }
           }
           return $pages;
       }
       
       /**
        * Generate site map and store it in sitemap.xml in the site root folder
        * @param string $url The main URL of the site
        * @param string $root (Optional) The root path of the site (if not specified, the current directory of this file is used)
        * @param string $extensions (Optional) The comma separated string of extensions to index in the site map
        * @param string $alwaysIgnore (Optional) The current processing file/folder is ignored if contains any of words of this comma separated string
        * @param string $ignoreDirs (Optional) The directories mentioned in this comma separated string will not be scanned
        * @param string $ignoreFiles (Optional) The files mentioned in this comma separated string will be ommited from the site map
        */
       public static function Generate($url, $root = NULL, $extensions = NULL, $alwaysIgnore = NULL, $ignoreDirs = NULL, $ignoreFiles = NULL) {
           self::$url = trim($url, '/') . '/';
           self::$root = ($root === NULL ? str_replace('\\', '/', dirname(__FILE__)) : $root);
           self::$extensions = ($extensions === NULL ? array('htm', 'html', 'php') : explode(',', $extensions));
           self::$alwaysIgnore = ($alwaysIgnore === NULL ? array('.inc', 'admin', 'image') : explode(',', $alwaysIgnore));
           self::$ignoreDirs = ($ignoreDirs === NULL ? array('admin', 'css', 'images', 'inc', 'js', 'lib', 'styles', 'uploads') : explode(',', $ignoreDirs));
           self::$ignoreFiles = ($ignoreFiles === NULL ? array('404.html', 'config.php', 'include.inc') : explode(',', $ignoreFiles));
           $cwd = getcwd();
           $all_pages = self::getPages(self::$root);
           chdir($cwd);
           $output = '';
           $output .= '<?xml version="1.0" encoding="UTF-8"?>' . PHP_EOL;
           $output .= '<urlset xmlns="http://www.google.com/schemas/sitemap/0.84" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.google.com/schemas/sitemap/0.84 http://www.google.com/schemas/sitemap/0.84/sitemap.xsd">' . PHP_EOL;
           //Process the files
           foreach ($all_pages as $link) {
               //Find the modified time.
               if(preg_match('#index\.\w{3,4}$#', $link)) {
                   $link = preg_replace('#index\.\w{3,4}$#', '', $link);
               }
               $output .= '    <url>' . PHP_EOL;
               $output .= '        <loc>' . htmlentities($link, ENT_QUOTES, 'utf-8') . '</loc>' . PHP_EOL;
               $output .= '    </url>' . PHP_EOL;
           }
           $output .= '</urlset>' . PHP_EOL;
           file_put_contents(self::$root . '/sitemap.xml', $output);
           @chmod(self::$root . '/sitemap.xml', 0644);
       }
   }
?>[/shcode]

مثالی از نحوه استفاده:

[shcode=php]<?php
   require_once 'class.sitemap.php';
   SiteMap::Generate('http://localhost/sitemap', NULL, 'php', 'admin', 'languages,plugins,upgrade,uploads,wp-includes', 'wp-cron.php');
?>[/shcode]


یا میتونید توی همون فایل کلاس، این کد رو به انتهاش اضافه کنید:
[shcode=php]SiteMap::Generate('http://localhost/sitemap', NULL, 'php', 'admin',  'languages,plugins,upgrade,uploads,wp-includes', 'wp-cron.php');[/shcode]


و توسط Cron Jobs (در فواصل زمانی مشخص) یا توی اسکریپتتون (هرموقع مطالب تغییر کرد) فایل رو ضمیمه کنید.

نکته:
این اسکریپت ازروی فایلهای سایتتون SiteMap رو میسازه. اگه سایتتون Dynamic هست و مطالب با روشهایی مثل Get و... ازطریق یک صفحه خاص استخراج میشن، بهترین و ساده ترین کار، استخراج لینکهای اطلاعات از دیتابیس و تولید فایل SiteMap.xml هست.