• twitter image
  • facebook image
  • youtube image
  • linkedin image
Language: CMS Made Simple Czech CMS Made Simple France CMS Made Simple Hungary CMS Made Simple Russia CMS Made Simple Netherlands

All times are UTC




Post new topic Reply to topic  [ 1 post ] 
Author Message
 Post subject: UDT - table_of_contents
PostPosted: Tue Jun 24, 2008 8:25 am 
Genera un box (div) contenente un indice dei contenuti della pagina in base ai tag presenti nel contenuto ai quali sia stata impostata la proprietà id.
E' possibile specificare un testo che viene mostrato come titolo nel box (parametro header).
Il div generato ha id="toc", mentre l'elemento header ha classe "head" per poterli manipolare via CSS.

Code:
/**
 * Genera un indice della pagina (Tabella dei Contenuti) a partire dai tag Header
 * definiti nella pagina stessa che presentano il parametro id
 * Ad Esempio: <h2 id="Titolo1">Titolo 1</h2>
 *
 * Uso:
 * {contents assign=pagecontent}
 * {table_of_contents thepagecontent="$pagecontent" header="Titolo"}
 */
function get_table_of_contents($page_contents, $header)
{
    // Genera l'Indice dei Contenuti (TOC=Table Of Contents)
    // cercando tutte le occorrenze dei tag <h> per le quali è stato definita la proprietà id
    // e restituisce un array 2D contenente, per ciascun, tag riconosciuto, il testo completo del tag,
    // il livello, il valore della proprietà ID e il testo racchiuso dal tag stesso.

    preg_match_all("/<h([[:digit:]]).* id=\"([a-z0-9]+).*>(.*)<\/[^>]+>/i", $page_contents, $match);


    if (FALSE == empty($match[0])) {
       
        // E' stato trovato almeno un tag valido!
        // Prepara l'inizio del contenitore xhtml per visualizzare il box col relativo titolo
        $contents  = "<div id=\"toc\"><ul>\n     <li class=\"head\">".$header."</li>\n";

        // Per ciascun tag trovato crea un entry nella TOC
        foreach ($match[0] as $key => $value) {

            // Indenta il codice generato per maggiore leggibilità
            if (2 == $match[1][$key]) {
                $contents .= '';
            } else {
                $contents .= '        ';
            }

            // Crea la voce nella TOC con associato il link all'elemento nella pagina
            $contents .= '<li><a href="'.$_SERVER['REQUEST_URI'].'#'.$match[2][$key].'">'.$match[3][$key].'</a>';

            // Se il livello è maggiore di quello precedente, crea una sotto-lista per rientrare le
            // le voci del livello inferiore
            if (FALSE == empty($match[1][$key + 1]) && $match[1][$key + 1] == $match[1][$key] + 1) {
                $contents .= "\n    <ul>\n";
                $unclosed_list = TRUE;
            } else {
                $contents .= "</li>\n";
            }

            // Se il prossimo elemento ha un livello maggiore, chiude questo livello della TOC
            // (Esempio: elemento corrente h3 e il prossimo è h2)
            if (FALSE == empty($match[1][$key + 1]) && $match[1][$key + 1] == $match[1][$key] - 1) {
                $contents .= "    </ul>\n</li>\n";
                $unclosed_list = FALSE;
            }
        }
        if (FALSE == empty($unclosed_list)) {
            $contents .= "    </ul>\n</li>\n";
        }
        $contents .= "</ul></div>\n";
    } else {
        $contents = '';
    }

    // Retituisce il codice che genera il box della TOC
    return $contents;
}
echo get_table_of_contents($params['thepagecontent'], $params['header']);


Osvaldo


Last edited by osvaldo on Wed Jul 02, 2008 1:17 pm, edited 1 time in total.

Top
   
 
Share On:
Share on Facebook Share on Twitter Share on Google+
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 1 post ] 

All times are UTC


Who is online

Users browsing this forum: No registered users


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Hosting Nation - Managed CMSMS Hosting