developer.jelix.org is not used any more and exists only for history. Post new tickets on the Github account.
developer.jelix.org n'est plus utilisée, et existe uniquement pour son historique. Postez les nouveaux tickets sur le compte github.

Ticket #12: 12-sitemap.diff

File 12-sitemap.diff, 7.2 KB (added by Surfoo, 12 years ago)
  • build/manifests/jelix-lib.mn

     
    7575  jResponseTcpdf.class.php
    7676  jResponseSoap.class.php
    7777  jResponseHtmlFragment.class.php
     78  jResponseSitemap.class.php
    7879
    7980cd lib/jelix/core-modules/jelix
    8081  module.xml
     
    178179  cruddfk_edit.tpl
    179180  cruddfk_view.tpl
    180181  defaultmain.tpl
     182  sitemap.tpl
     183  sitemapindex.tpl
    181184cd lib/jelix/core-modules/jelix/templates/en_EN
    182185  check_install.tpl
    183186cd lib/jelix/core-modules/jelix/templates/en_US
  • lib/jelix/core/response/jResponseSitemap.class.php

     
     1<?php
     2/**
     3* @package     jelix
     4* @subpackage  core_response
     5* @author      Baptiste Toinot
     6* @copyright   2008 Baptiste Toinot
     7* @link        http://www.jelix.org
     8* @licence     GNU Lesser General Public Licence see LICENCE file or http://www.gnu.org/licenses/lgpl.html
     9*/
     10
     11/**
     12*
     13*/
     14require_once(JELIX_LIB_PATH.'tpl/jTpl.class.php');
     15require_once(JELIX_LIB_CORE_PATH.'response/jResponseXml.class.php');
     16
     17/**
     18* Sitemap 0.9 response
     19*
     20* @package  jelix
     21* @subpackage core_response
     22* @link http://www.sitemaps.org/
     23* @since 1.1RC1
     24*/
     25class jResponseSitemap extends jResponse {
     26
     27    protected $_type = 'sitemap';
     28
     29    protected $allowedChangefreq = array('always', 'hourly', 'daily', 'weekly',
     30                                         'monthly', 'yearly', 'never');
     31
     32    protected $countUrl = 0;
     33
     34    protected $maxUrl = 50000;
     35
     36    public $charset = 'UTF-8';
     37
     38    /**
     39     * Class constructor
     40     * @return void
     41     */
     42    function __construct () {
     43        $this->_template    = new jTpl();
     44        $this->_mainTpl     = 'jelix~sitemap';
     45        parent::__construct ();
     46    }
     47
     48    /**
     49     * Generate the content and send it
     50     * Errors are managed
     51     * @return boolean true if generation is ok, else false
     52     */
     53    final public function output() {
     54        $this->_headSent = false;
     55
     56        $this->_httpHeaders['Content-Type'] =
     57                'application/xml;charset=' . $this->charset;
     58
     59        $this->sendHttpHeaders();
     60
     61        echo '<?xml version="1.0" encoding="'. $this->charset .'"?>', "\n";
     62        echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">', "\n";
     63
     64        $this->_headSent = true;
     65
     66        $this->_template->assign('urls', $this->urlList);
     67        $this->_template->display($this->_mainTpl);
     68
     69        if ($this->hasErrors()) {
     70            echo $this->getFormatedErrorMsg();
     71        }
     72        echo '</urlset>';
     73        return true;
     74    }
     75
     76    final public function outputErrors() {
     77        if (!$this->_headSent) {
     78            if (!$this->_httpHeadersSent) {
     79                header("HTTP/1.0 500 Internal Server Error");
     80                header('Content-Type: text/xml;charset='.$this->charset);
     81            }
     82            echo '<?xml version="1.0" encoding="'. $this->charset .'"?>';
     83        }
     84
     85        echo '<errors xmlns="http://jelix.org/ns/xmlerror/1.0">';
     86        if ($this->hasErrors()) {
     87            echo $this->getFormatedErrorMsg();
     88        } else {
     89            echo '<error>Unknow Error</error>';
     90        }
     91        echo '</errors>';
     92    }
     93
     94    /**
     95     * Format error messages
     96     * @return string formated errors
     97     */
     98    protected function getFormatedErrorMsg() {
     99        $errors = '';
     100        foreach ($GLOBALS['gJCoord']->errorMessages  as $e) {
     101           $errors .=  '<error xmlns="http://jelix.org/ns/xmlerror/1.0" type="'. $e[0] .'" code="'. $e[1] .'" file="'. $e[3] .'" line="'. $e[4] .'">'. $e[2] .'</error>'. "\n";
     102        }
     103        return $errors;
     104    }
     105
     106    /**
     107     * add an URL
     108     * @param string $loc URL of the page
     109     * @param string $lastmod The date of last modification of the file
     110     * @param string $changefreq How frequently the page is likely to change
     111     * @param string $priority The priority of this URL relative to other URLs
     112     * @return void
     113     */
     114    public function addUrl($loc, $lastmod = false, $changefreq = false, $priority = false) {
     115
     116        if (isset($loc[2048]) || $this->countUrl >= $this->maxUrl) {
     117            return false;
     118        }
     119
     120        $url = new jSitemapUrl();
     121
     122        if ($loc[0] == '/') {
     123            $loc = 'http'. (empty($_SERVER['HTTPS']) ? '' : 's') .'://'. $_SERVER['HTTP_HOST'] . $loc;
     124        }
     125        $url->loc = htmlspecialchars($loc);
     126
     127        if (($timestamp = strtotime($lastmod))) {
     128            $url->lastmod = date('c', $timestamp);
     129        }
     130
     131        if ($changefreq && in_array($changefreq, $this->allowedChangefreq)) {
     132            $url->changefreq = $changefreq;
     133        }
     134
     135        if ($priority && preg_match('/^(1|0\.\d{1})$/', $priority)) {
     136            $url->priority = $priority;
     137        }
     138
     139        ++$this->countUrl;
     140        $this->urlList[] = $url;
     141    }
     142}
     143
     144/**
     145 * Content of an URL
     146 * @package    jelix
     147 * @subpackage core_response
     148 * @since 1.1RC1
     149 */
     150class jSitemapUrl {
     151
     152    /**
     153     * URL of the page
     154     * @var string
     155     */
     156    public $loc;
     157    /**
     158     * The date of last modification of the file
     159     * @var string
     160     */
     161    public $lastmod;
     162    /**
     163     * How frequently the page is likely to change
     164     * @var string
     165     */
     166    public $changefreq;
     167    /**
     168     * The priority of this URL relative to other URLs
     169     * @var string
     170     */
     171    public $priority;
     172}
     173
     174/**
     175 * Content of a sitemap index file
     176 * @package    jelix
     177 * @subpackage core_response
     178 * @since 1.1RC1
     179 */
     180class jSitemapIndex {
     181
     182    /**
     183     * URL of the sitemap file
     184     * @var string
     185     */
     186    public $loc;
     187    /**
     188     * The date of last modification of the sitemap file
     189     * @var string
     190     */
     191    public $lastmod;
     192
     193}
     194 No newline at end of file
  • lib/jelix/core/defaultconfig.ini.php

     
    5555soap = jResponseSoap
    5656htmlfragment = jResponseHtmlFragment
    5757htmlauth = jResponseHtml
     58sitemap = jResponseSitemap
    5859
    5960[_coreResponses]
    6061html = jResponseHtml
     
    8182soap = jResponseSoap
    8283htmlfragment = jResponseHtmlFragment
    8384htmlauth = jResponseHtml
     85sitemap = jResponseSitemap
    8486
    8587[error_handling]
    8688messageLogFormat = "%date%\t[%code%]\t%msg%\t%file%\t%line%\n"
  • lib/jelix/core-modules/jelix/templates/sitemap.tpl

     
     1{foreach $urls as $url}
     2    <url>
     3        <loc>{$url->loc}</loc>
     4        {if $url->lastmod}<lastmod>{$url->lastmod}</lastmod>{/if}
     5
     6        {if $url->changefreq}<changefreq>{$url->changefreq}</changefreq>{/if}
     7
     8        {if $url->priority}<priority>{$url->priority}</priority>{/if}
     9
     10    </url>
     11{/foreach}
     12{* endtag is generated by the response *}
     13 No newline at end of file