<?php
class insiteNavGenerator {
private $subject = false;
private $output = false;
private $menue = false;
private $insertNavMenue = false;
private $navID = false;
private $navClass = false;
private $insertNavBefore = false;
private $insertNavAfter = false;
private $pattern = '/(<[hH][1-6])(.*)(>.*)(<\/[hH][1-6]>)/';
private $idFormat = '_%06d';
private $i = 0;
private $navStart = '';
private $navEnd = '';
function __construct ( $subject, $idFormat='_%03d', $insertNavMenue=false, $insertNavAfter=false, $insertNavBefore=false, $navID=false, $navClass=false ) {
if ( $subject ) {
$this -> subject = $subject;
} else {
return false;
}
if ( $idFormat && 'default' != $idFormat ) {
$this -> idFormat = $idFormat;
}
if ( $insertNavAfter ) {
if ( ! $insertNavMenue ) {
$this -> insertNavMenue = false;
trigger_error( '$insertNavAfter wurde ignoriert, weil Navigation-Tag nicht eingefügt werden soll.', E_USER_Notice );
}
if ( $insertNavBefore ) {
trigger_error( 'insertNavAfter und insertNavBefore können nicht gleichzeitig gesetzt werden.', E_USER_ERROR );
}
if ( false === strpos ($subject, $insertNavAfter ) ) {
trigger_error( '$insertNavAfter wurde in $subjekt nicht gefunden.', E_USER_ERROR );
}
$this -> insertNavAfter = $insertNavAfter;
if ( $insertNavMenue ) $this -> insertNavMenue = true;
}
if ( $insertNavBefore ) {
if ( ! $insertNavMenue ) {
$this -> insertNavMenue = false;
trigger_error( '$insertNavAfter wurde ignoriert, weil Navigation-Tag nicht eingefügt werden soll.', E_USER_NOTICE );
}
if ( $insertNavAfter ) {
trigger_error( 'insertNavAfter und insertNavBefore können nicht gleichzeitig gesetzt werden.', E_USER_ERROR );
}
if ( false === strpos ($subject, $insertNavBefore ) ) {
trigger_error( '$insertNavAfter wurde in $subjekt nicht gefunden.', E_USER_ERROR );
}
$this -> insertNavBefore = $insertNavBefore;
if ( $insertNavMenue ) $this -> insertNavMenue = true;
}
if ( $subject ) {
$this -> subject = $subject;
}
if ( $this -> insertNavMenue ) {
if ( $navClass ) {
$classStr = ' class="' . $navClass . '"';
} else {
$classStr = '';
}
if ( $navID ) {
$idStr = ' id="' . $navID . '"';
} else {
$idStr = '';
}
$this -> navStart = "\n<nav" . $idStr . $classStr . ">\n\t<ul>\n";
$this -> navEnd = "\t</ul>\n<nav>\n";
} else {
$this -> navStart = "\n<ul>\n";
$this -> navEnd = "</ul>";
}
$this -> output = preg_replace_callback ( $this-> pattern , 'insiteNavGenerator::replFunkt' , $this-> subject , -1 , $count );
$this -> menue = $this -> navStart . $this -> menue . $this -> navEnd . "\n";
if ( $this -> insertNavBefore ) {
$this -> output = str_replace ( $this -> insertNavBefore, $this -> menue . $this -> insertNavBefore, $this -> output );
} else if ( $this -> insertNavAfter ) {
$this -> output = str_replace ( $this -> insertNavAfter, $this -> insertNavAfter . $this -> menue, $this -> output );
}
}
function replFunkt($ar) {
#print_r($ar);
$this -> i++;
$this -> menue .= "\t\t" . '<li><a href="#'. sprintf( $this -> idFormat , $this -> i ) . '"' . strip_tags( $ar[3] ) . '</a></li>' . "\n";
return $ar[1] . ' id="' . sprintf( $this -> idFormat , $this -> i ) . '"' . $ar[2] . $ar[3] . $ar[4];
}
function getMenue() {
return $this -> menue;
}
function getOutput() {
return $this -> output;
}
}