Quantcast
Channel: सत्यं वद धर्मं चर »преобразование
Viewing all articles
Browse latest Browse all 3

Генерация карты сайта в HTML из XML: часть 3

$
0
0

Автоматизация: перекладываем работу на

Продолжение цикла статей на тему генерации карты сайта в HTML из карты XML.

В данной статье будет рассмотрен вопрос модификации плагина Google XML Sitemaps с целью добавления поддержки автоматической генерации HTML-версии карты сайта; как и в предыдущих статьях, будет осуществляться средствами .

В первой части статьи мы рассматривали вариант, основанный на использовании утилиты xsltproc. Предполагалось, что генерация HTML-версии карты сайта осуществляется с использованием cron. Создание карты по расписанию означает, что построение HTML-карты будет запаздывать на некоторое время; а если не сравнивать время модификации XML- и HTML-версий карт, получим бесполезные вызовы xsltproc.

Те, кто используют , очень часто для автоматического построения карты сайта используют Google XML Sitemaps; для них предлагается вариант с модификацией кода плагина для автоматической генерации HTML-карты.

Плагин позволяет задавать свою таблицу стилей XSLT:

Настройки Google XML Sitemaps

Мы изменим плагин таким образом, чтобы при заданной таблице стилей XSL плагин создавал HTML-файл с результатами преобразований XSL.

В файле sitemap-core.php ищем такой кусок кода:

  1.                 if($this->GetOption("b_xml")) {
  2.                         if($this->_fileHandle && fclose($this->_fileHandle)) {
  3.                                 $this->_fileHandle = null;
  4.                                 $status->EndXml(true);
  5.                                 $pingUrl=$this->GetXmlUrl();
  6.                         } else $status->EndXml(false,"Could not close the sitemap file.");

После него добавляем такой:

            if (class_exists('XSLTProcessor', true)) {
                $file       = $this->GetXmlPath();
                $styleSheet = ($this->GetDefaultStyle() && $this->GetOption('b_style_default') === true ? $this->GetDefaultStyle() : $this->GetOption('b_style'));
                if (!empty($styleSheet)) {
                    $xsl = new DOMDocument();
                    $xsl->load($styleSheet);

                    $xml = new DOMDocument();
                    $xml->load($file);

                    $proc = new XSLTProcessor();
                    $proc->importStyleSheet($xsl);
                    $proc->transformToURI($xml, 'file://' . str_replace('.xml', '.html', $file));
                }
            }

Данный код требует PHP 5 и расширения XSLT (в Debian/Ubuntu оно предоставляется пакетом php5-xsl). Код получает имя файла с картой сайта и адрес таблицы стилей (этот адрес должен быть задан абсолютным URL); XML и XSL скармливаются XSLT Processor’у, результат записывается в файл с тем же именем, что и карта сайта XML, но с расширением .html.

Теперь при каждом построении карты сайта будет создаваться и HTML-версия.

Тем, кто любит патчи ( кумулятивный, исправляет и некоторые другие недостатки плагина):

--- sitemap-core.php.orig   2010-08-16 10:49:16.000000000 +0300
+++ sitemap-core.php    2010-11-28 02:10:08.000000000 +0200
@@ -1654,9 +1654,9 @@
            $this->AddElement(new GoogleSitemapGeneratorXmlEntry('<' . '?xml-stylesheet type="text/xsl" href="' . $styleSheet . '"?' . '>'));
        }
       
-       $this->AddElement(new GoogleSitemapGeneratorDebugEntry("generator=\"wordpress/" . get_bloginfo('version') . "\""));
-       $this->AddElement(new GoogleSitemapGeneratorDebugEntry("sitemap-generator-url=\"http://www.arnebrachhold.de\" sitemap-generator-version=\"" . $this->GetVersion() . "\""));
-       $this->AddElement(new GoogleSitemapGeneratorDebugEntry("generated-on=\"" . date(get_option("date_format") . " " . get_option("time_format")) . "\""));
+//     $this->AddElement(new GoogleSitemapGeneratorDebugEntry("generator=\"wordpress/" . get_bloginfo('version') . "\""));
+//     $this->AddElement(new GoogleSitemapGeneratorDebugEntry("sitemap-generator-url=\"http://www.arnebrachhold.de\" sitemap-generator-version=\"" . $this->GetVersion() . "\""));
+//     $this->AddElement(new GoogleSitemapGeneratorDebugEntry("generated-on=\"" . date(get_option("date_format") . " " . get_option("time_format")) . "\""));
       
        //All comments as an asso. Array (postID=>commentCount)
        $comments=($this->GetOption("b_prio_provider")!=""?$this->GetComments():array());
@@ -2172,6 +2172,22 @@
                $status->EndXml(true);
                $pingUrl=$this->GetXmlUrl();
            } else $status->EndXml(false,"Could not close the sitemap file.");
+
+           if (class_exists('XSLTProcessor', true)) {
+               $file       = $this->GetXmlPath();
+               $styleSheet = ($this->GetDefaultStyle() && $this->GetOption('b_style_default') === true ? $this->GetDefaultStyle() : $this->GetOption('b_style'));
+               if (!empty($styleSheet)) {
+                   $xsl = new DOMDocument();
+                   $xsl->load($styleSheet);
+
+                   $xml = new DOMDocument();
+                   $xml->load($file);
+
+                   $proc = new XSLTProcessor();
+                   $proc->importStyleSheet($xsl);
+                   $proc->transformToURI($xml, 'file://' . str_replace('.xml', '.html', $file));
+               }
+           }
        }
       
        if($this->IsGzipEnabled()) {
@@ -2514,9 +2530,9 @@
     * @return int The time in seconds
     */
    function GetTimestampFromMySql($mysqlDateTime) {
-       list($date, $hours) = split(' ', $mysqlDateTime);
-       list($year,$month,$day) = split('-',$date);
-       list($hour,$min,$sec) = split(':',$hours);
+       list($date, $hours) = explode(' ', $mysqlDateTime);
+       list($year,$month,$day) = explode('-',$date);
+       list($hour,$min,$sec) = explode(':',$hours);
        return mktime(intval($hour), intval($min), intval($sec), intval($month), intval($day), intval($year));
    }

© 2014 सत्यं वद धर्मं चर. Все права защищены. Перепубликация материалов без разрешения автора запрещена.

При использовании материалов блога наличие активной не закрытой от индексирования ссылки на источник обязательно.


Viewing all articles
Browse latest Browse all 3

Latest Images

Trending Articles





Latest Images