Topic Closed
fly06
263 Posts
18.2K Downloads
1 Themes
8 Plugins

Wouldn't be nice to integrate plugins internal links to the site map?

Below is the modified version of the special_map.php file that supports this feature:

<?php
defined('is_running') or die('Not an entry point...');


class special_map{
    function special_map(){
        global $page,$langmessage,$config;


        /*
        An xml site map will not show any of the pages from dynamic add-ons
        ... which is precisely what the regular sitemap shows
        */

        if( isset($_GET['xml']) ){
            $this->xml();
            return;
        }

        $this->MultiSiteData();

        echo '<div class="sitemap_xml">';
        echo common::Link('Special_Site_Map','XML','xml');
        echo '</div>';
        echo '<h2>';
        echo gpOutput::ReturnText('site_map');
        echo '</h2>';

        //gpOutput::GetFullMenu();
        $this->GetSiteMap();

    }

    function GetSiteMap() {

        global $gp_menu, $gp_index, $gp_titles, $config, $dataDir;

        $addons = $config['addons'];

        echo '<ul>';

        $prev_level = 0;
        $i = 0;
        foreach ($gp_menu as $key => $val){
            $level = $val['level'];
            $title = array_search($key, $gp_index);
            $label = common::GetLabel($title, false);
            $type = common::SpecialOrAdmin($title);
            if ($level > $prev_level) {
                $i = 0;
                echo '<ul>';
            } elseif ($level < $prev_level) {
                $i = 0;
                echo '</ul>';
            }
            $class = 'class="li_'.$i.'"';
            echo '<li '.$class.'>'.common::Link($title, $label, '').'</li>';
            if (($type == 'special') && isset($gp_titles[$key]['addon'])) {
                $folder = $addons[$gp_titles[$key]['addon']]['code_folder_part'];
                $file = $dataDir.$folder.'/Site_Map.php';        
                if (file_exists($file)) {
                    $site_map = include($file);
                    $this->makeAddonSiteMap($site_map);
                }
            }
            $prev_level = $level;
            $i++;
        }

        echo '</ul>';

    }

    function MultiSiteData(){
        global $page, $config;

        $page->head .= '<meta name="mdu" content="'.substr(md5($config['gpuniq']),0,20).'" />';

        if( defined('multi_site_unique') ){
            $page->head .= '<meta name="multi_site_unique" content="'.multi_site_unique.'" />';
        }
        if( defined('service_provider_id') && is_numeric(service_provider_id) ){
            $page->head .= '<meta name="service_provider_id" content="'.service_provider_id.'" />';
        }
    }


    /*
    <url>
        <loc>http://www.example.com/</loc>
        <lastmod>2005-01-01</lastmod>
        <changefreq>monthly</changefreq>
        <priority>0.8</priority>
    </url>
    */
    function xml(){
        //global $gp_menu;
        global $gp_menu, $gp_index, $gp_titles, $config, $dataDir;

        $addons = $config['addons'];

        header('Content-Type: text/xml; charset=UTF-8');
        echo '<?xml version="1.0" encoding="UTF-8"?>';
        echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';


        foreach($gp_menu as $key => $info){

            $title = common::IndexToTitle($key);
            $type = common::SpecialOrAdmin($title);

            if( isset($info['level']) ){
                echo "\n";
                echo '<url>';
                echo '<loc>';
                echo 'http://';
                echo $_SERVER['SERVER_NAME'];
                //echo common::GetUrl(urlencode($title));
                echo common::GetUrl($title);
                echo '</loc>';
                echo '</url>';
            }

            // Addons
            if (($type == 'special') && isset($gp_titles[$key]['addon'])) {
                $folder = $addons[$gp_titles[$key]['addon']]['code_folder_part'];
                $file = $dataDir.$folder.'/Site_Map.php';        
                if (file_exists($file)) {
                    $site_map = include($file);
                    $this->makeAddonSiteMapXml($site_map);
                }
            }            
            
        }

        echo '</urlset>';

        die();
    }

Edited: 6 years ago#6647

fly06
263 Posts
18.2K Downloads
1 Themes
8 Plugins

[Continuing]

    function makeAddonSiteMap($site_map) {

        global $config, $dataDir;

        echo '<ul>';

        $prev_level = 0;
        $i = 0;
        foreach ($site_map as $link){
            $level = $link['level'];
            $title = $link['title'];
            $label = $link['label'];
            if ($level > $prev_level) {
                $i = 0;
                echo '<ul>';
            } elseif ($level < $prev_level) {
                $i = 0;
                echo '</ul>';
            }
            $class = 'class="li_'.$i.'"';
            echo '<li '.$class.'>'.common::Link($title, $label, '').'</li>';
            $prev_level = $level;
            $i++;
        }

        echo '</ul>';

    }

    function makeAddonSiteMapXml($site_map) {

        foreach ($site_map as $link){

            echo "\n";
            echo '<url>';
            echo '<loc>';
            echo 'http://';
            echo $_SERVER['SERVER_NAME'];
            echo common::GetUrl($link['title']);
            echo '</loc>';
            echo '</url>';

        }

    }

} // class

A "Site Map"-ready plugin should have a Site_Map.php file at the plugin root folder.

This file will return an array of data to be used by both the html and the xml Site Maps.

For instance (dummy file used for testing):

<?php

$site_map = array();

$site_map[0]['label'] = 'My Label 0';
$site_map[0]['title'] = 'My_Title_0';
$site_map[0]['level'] = 0;
$site_map[1]['label'] = 'My Label 1';
$site_map[1]['title'] = 'My_Title_1';
$site_map[1]['level'] = 1;
$site_map[2]['label'] = 'My Label 2';
$site_map[2]['title'] = 'My_Title_2';
$site_map[2]['level'] = 0;

return $site_map;

Hope you like the idea.

 

 

Edited: 6 years ago#6648

Topic Closed

 

News

Typesetter 5.1
8/12/2017

Typesetter 5.0.1 is now available for download. 5.1 includes bug fixes, UI/UX improvements, ... Read More

Over 8 Times Faster Than Wordpress
5/3/2016

We've known for a long time that Typesetter is fast. It's something we take pride ... Read More

More News

creisi productions

Dienstleistungen von creisi productions, Luzern (Schweiz): * Konzeption, Planung und Erstellung Ihres Internet-Auftritts * Betreuung und Aktualisierung/Pflege Ihrer Website * ...

Find out more about our Provider Spotlight

Log In

  Register