[evo] Делаем xml-карту сайта для Google и Яндекса на Evo

Тема в разделе "MODx", создана пользователем ecco, 10 июл 2011.

  1. ecco

    ecco Постоялец

    Регистр.:
    21 апр 2007
    Сообщения:
    63
    Симпатии:
    16
    Создаем сниппет Sitemap и вставляем в него код:
    PHP:
    <?php
    //откуда начать
    $startid = (isset($startid)) ? $startid 0;
    //в каком формате выводить результат (url или xml)
    global $formatSP
    $formatSP = (isset($format)) ? $format 'xml';
    //название TV-параметра, по которому отмечаются запрещенные для вывода элементы
    global $excludeTVSP;
    $excludeTVSP = (isset($excludeTV)) ? $excludeTV 'sitemap_exclude';
    //номера шаблонов которые запрещается выводить (0 - blank)
    global $excludeTemplatesSP;
    $excludeTemplatesSP = (isset($excludeTemplates)) ? $excludeTemplates '';
        
    $excludeTemplatesSP explode(","$excludeTemplatesSP);
    //номера ID-шников которые выводить надо, но их дочерние элементы - нет    
    global $excludeChildsSP;
    $excludeChildsSP = (isset($excludeChilds)) ? $excludeChilds '';
        
    $excludeChildsSP explode(","$excludeChildsSP);    
    //номера ID-шников которые не надо выводить
    global $excludeIdSP;
    $excludeIdSP = (isset($excludeDocs)) ? $excludeDocs '';
        
    $excludeIdSP explode(","$excludeIdSP);    
    $out getDocs($startid);
    if (
    $formatSP=='url')
    {
        
    $output "<ul class=\"sitemap\">$out</ul>";
    }
    else
    {
        
    $output '<?xml version="1.0" encoding="UTF-8"?>'."\n";
        
    $output .='<urlset '."\n";
        
    $output .='xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" ';
        
    $output .='xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ';
        
    $output .='xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 ';
        
    $output .='http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd" ';
        
    $output .='>';
        
    $output .= $out;
        
    $output .= '</urlset>';
    }
    return 
    $output;
    # gets list of published documents with properties
    function getDocs($startid)
    {
        global 
    $modx,$formatSP,$excludeTVSP,$excludeTemplatesSP,$excludeChildsSP,$excludeIdSP;
        
    // get children documents
        
    $docs $modx->getActiveChildren($startid,'menuindex','asc','id,editedon,template,published,deleted,searchable,pagetitle,type'); 
        
    // add sub-children to the list
        
    foreach ($docs as $key => $doc)
        {
            
    $tv $modx->getTemplateVar($excludeTVSP,'*',$doc['id']);
            if ((
    $tv['value']!=1
                && (!
    in_array($doc['template'],$excludeTemplatesSP))
                && (
    $doc['type']=='document')
                && (
    $doc['id']!=$modx->documentIdentifier)
                && (
    $doc['published'])
                && (!
    $doc['deleted'])
                && (!
    in_array($doc['id'],$excludeIdSP))
                )
    // tv default value is overriden (including empty)
            
    {
                if (
    in_array($doc['id'],$excludeChildsSP))
                    
    $child='';
                else
                    
    $child getDocs($doc['id']);
                if (
    $doc['id'] == $modx->config['site_start'])
                    
    $url '[(site_url)]';
                else
                    
    $url '[(site_url)][~'.$doc['id'].'~]';
                if(
    $formatSP=='url')
                {
                    
    $date date("d-m-Y"$doc['editedon']);
                    
    $output .= "<li>";
                    
    $output .= "<a href=\"$url\">".$doc['pagetitle']."</a>";
                    if (
    $child$output.="<ul>$child</ul>";
                    
    $output .= "</li>\n";
                }else
                {
                    
    $date date("Y-m-d"$doc['editedon']);
                    
    $output .= "\t<url>\n";
                    
    $output .= "\t\t<loc>$url</loc>\n";
                    
    $output .= "\t\t<lastmod>$date</lastmod>\n";
                    
    $output .= "\t</url>\n";
                    
    $output .= $child;
                }
            }
        }
        return 
    $output;
    }
    ?>
    Выбор «Показывать/не показывать» в карте сайта:
    — создаем TV "sitemap_exclude"
    — тип Dropdown List Menu
    — возможные значения Показывать==0||Не показывать==1
    — по умолчанию
    — отмечаем все шаблоны, какие нужно
    Далее создаем в корне сайта документ «Карта сайта»:
    — тип содержимого html/xml
    — убрать галочку у html-редкатора (Очень важно!!!)
    — псеводним sitemap.xml
    — шаблон blank
    — в тело документа вставляем:

    [!SiteMap? &format=`xml` &excludeTV=`sitemap_exclude` &excludeTemplates=`` &excludeChilds=``!]

    Параметры:
    excludeTemplates — не отправлять в карту сайта документы с таким ID шаблона
    excludeChilds — не показывть в карте дочерние документы этих папок

    Индекс в ЧПУ должен быть отключен, иначе получится sitemap.xml.tml например.
    Работает в 1.0.2 и выше.

    ЗЫ: Статья взята с http://community.modx-cms.ru/blog/626.html
     
  2. alica

    alica

    Регистр.:
    28 июл 2008
    Сообщения:
    243
    Симпатии:
    76
    Проще сделать через ditto.

    Код страницы:
    Код:
    <?xml version="1.0" encoding="UTF-8"?>
    <urlset xmlns="http://www.google.com/schemas/sitemap/0.84">
    [[Ditto?&dateFormat=`%Y-%m-%d`&parents=`0` &tpl=`google-sitemap-tpl` &displayArchive=`0`&dateSource=`editedon`&summarize=`500` &total=`500`&sortBy=`createon`&depth=`6`&showInMenuOnly=`1`]]
    </urlset>
    
    Чанк google-sitemap-tpl:
    Код:
    <url>      
    <loc>[(site_url)][~[+id+]~]</loc>      
    <lastmod>[+date+]</lastmod>      
    </url>
    
     
    ecco нравится это.
  3. Lexx59

    Lexx59

    Регистр.:
    9 янв 2009
    Сообщения:
    179
    Симпатии:
    38
    Есть внятная инструкция как сделать sitemap для Revo?
     
  4. alica

    alica

    Регистр.:
    28 июл 2008
    Сообщения:
    243
    Симпатии:
    76
    Для REVO есть дополнение GoogleSiteMap