Aktuelles

Template($tags); $this->array_registeredParsers = array( new StrAPIFunctionsParser(), new CounterFunctionParser(), new IfFunctionParser() ); if(is_array($parser)) { $this->array_registeredParsers = $parser; } } /** * Generiert das Template und gibt es aus/zurück. * * @param $template string/file Template * @param $return bool Return or print template * @param $note bool Echo "Generated by ... " Comment * * @return string complete Template string */ function generate($template, $return = 0, $note = 1) { $template = parent::generate($template, true, $note); foreach($this->array_registeredParsers as $class) { if(is_string($class)) { $classInstance = new $class; } else if(is_object($class)) { $classInstance = $class; } if(is_object($classInstance)) { if(is_subclass_of($classInstance, "AbstractTemplateParser")) { $template = $classInstance->parse($template); } else { $template = "TemplateParserKlasse " . get_class($classInstance) . " ist nicht von AbstractTemplateParser abgeleitet!"; break; } } } if ($return) { return $template; } echo $template; } } /** * class AbstractTemplateParser * * Abstrakte Superklasse für alle Templateparser * * @author Stefan Welpot * @version 1.0 */ class AbstractTemplateParser { /** * Konstruktor */ function AbstractTemplateParser() {} /** * Parst das übergeben Template * * @param $template string das zu parsende Template * * @return string das geparste Template */ function parse($template) { return $template; } } /** * class IfFunctionParser * * Implemenation des AbstractTemplateParser zum Auswerten von * If-Konstrukten im Template * Als Tags im Template sind vorgesehen: * - {if(Bedigung)} * - {else if(Bedingung)} * - {else} * - {/if} * * Ein If-Konstrukt besteht dabei mindestens aus {if(Bedingung)} und einem abschließenden {/if}. * Das {else if(Bedingung)} kann beliebig oft hintereinander verwendet werden. * Die Konstrukte an sich können beliebig tief geschachtelt werden. * Die Bedinungen der {if()}- und {else if()}-Teile werden durch eval ausgewertet * und können somit auch PHP-Funktionen interpretieren. * * * @author Stefan Welpot * @version 1.0 */ class IfFunctionParser extends AbstractTemplateParser { /** * Regexp-Pattern für {if(Bedingung)} * @var pattern_if */ var $pattern_if = "\{if\040*\((.*?)\)\}"; /** * Regexp-Pattern für {else if(Bedingung)} * @var pattern_elseif */ var $pattern_elseif = "\{else if\040*\((.*?)\)\}"; /** * Regexp-Pattern für {else} * @var pattern_else */ var $pattern_else = "\{else\}"; /** * Regexp-Pattern für {/if} * @var pattern_endif */ var $pattern_endif = "\{\/if\}"; /** * Länge des {if(Bedinung)}-Tags ohne Bedingung * @var patternlength_if */ var $patternlength_if = 6; /** * Länge des {else if(Bedinung)}-Tags ohne Bedingung * @var patternlength_elseif */ var $patternlength_elseif = 11; /** * Länge des {else}-Tags * @var patternlength_else */ var $patternlength_else = 6; /** * Länge des {/if}-Tags * @var patternlength_endif */ var $patternlength_endif = 5; /** * Konstruktor */ function IfFunctionParser() { $this->AbstractTemplateParser(); } /** * @see AbstractTemplateParser#parse(string) */ function parse($template) { $array2_uncompletedConstructs = array(); //geöffnete, aber noch nicht geschlossene funktionen //hilfsvariablen $array_match_all = array(); $array_match_part = array(); $uncompletedConstructsIndex = 0; $elseifIndex = 0; $currentOffset = 0; $oldOffset = -1; $array_construct = array(); $pattern_all = "/(?is)(" . $this->pattern_if . "|" . $this->pattern_elseif . "|" . $this->pattern_else . "|" . $this->pattern_endif . ")/"; //das template solange nach konstruktteilen durchsuchen bis keine mehr gefunden werden while($currentOffset != $oldOffset) { $oldOffset = $currentOffset; //wenn irgendein teil einer if-konstruktion gefunden wird if(preg_match($pattern_all, $template, $array_match_all, PREG_OFFSET_CAPTURE, $currentOffset) > 0) { //herausfinden, welcher teil gefunden wurde //if-teil if(preg_match("/(?is)" . $this->pattern_if . "/", $array_match_all[0][0], $array_match_part) > 0) { $uncompletedConstructsIndex++; //inkrement openFunctionIndex $array2_uncompletedConstructs[$uncompletedConstructsIndex]['if']['condition'] = $array_match_part[1]; $array2_uncompletedConstructs[$uncompletedConstructsIndex]['if']['pos_start'] = $array_match_all[0][1]; $array2_uncompletedConstructs[$uncompletedConstructsIndex]['if']['pos_end'] = $array2_uncompletedConstructs[$uncompletedConstructsIndex]['if']['pos_start'] + $this->patternlength_if + strlen($array_match_part[1]); $currentOffset = $array2_uncompletedConstructs[$uncompletedConstructsIndex]['if']['pos_end']; } //elseif-teil else if(preg_match("/(?is)" . $this->pattern_elseif . "/", $array_match_all[0][0], $array_match_part) > 0) { $elseifIndex = count($array2_uncompletedConstructs[$uncompletedConstructsIndex]['elseif']); $array2_uncompletedConstructs[$uncompletedConstructsIndex]['elseif'][$elseifIndex]['condition'] = $array_match_part[1]; $array2_uncompletedConstructs[$uncompletedConstructsIndex]['elseif'][$elseifIndex]['pos_start'] = $array_match_all[0][1]; $array2_uncompletedConstructs[$uncompletedConstructsIndex]['elseif'][$elseifIndex]['pos_end'] = $array2_uncompletedConstructs[$uncompletedConstructsIndex]['elseif'][$elseifIndex]['pos_start'] + $this->patternlength_elseif + strlen($array_match_part[1]); $currentOffset = $array2_uncompletedConstructs[$uncompletedConstructsIndex]['elseif'][$elseifIndex]['pos_end']; } //else-teil else if(preg_match("/(?is)" . $this->pattern_else . "/", $array_match_all[0][0], $array_match_part) > 0) { $array2_uncompletedConstructs[$uncompletedConstructsIndex]['else']['pos_start'] = $array_match_all[0][1]; $array2_uncompletedConstructs[$uncompletedConstructsIndex]['else']['pos_end'] = $array2_uncompletedConstructs[$uncompletedConstructsIndex]['else']['pos_start'] + $this->patternlength_else; $currentOffset = $array2_uncompletedConstructs[$uncompletedConstructsIndex]['else']['pos_end']; } //endif else if(preg_match("/(?is)" . $this->pattern_endif . "/", $array_match_all[0][0], $array_match_part) > 0) { $array2_uncompletedConstructs[$uncompletedConstructsIndex]['endif']['pos_start'] = $array_match_all[0][1]; $array2_uncompletedConstructs[$uncompletedConstructsIndex]['endif']['pos_end'] = $array2_uncompletedConstructs[$uncompletedConstructsIndex]['endif']['pos_start'] + $this->patternlength_endif; $currentOffset = $array2_uncompletedConstructs[$uncompletedConstructsIndex]['endif']['pos_end']; //gefundene komplette funktion sofort ersetzen $array_construct = array_pop($array2_uncompletedConstructs); $uncompletedConstructsIndex--; $template = $this->replaceConstruct($array_construct, $template); //offset korrigieren = anfang der ersetzten funktion $currentOffset = $array_construct['if']['pos_start']; } } } // end while if($uncompletedConstructsIndex > 0) { // wenn noch offene Funktionen vorhanden sind => Fehler im Template $template = "Fehler in IF-Konstruktionen. Folgende If-Statements sind nicht abgeschlossen:
\n"; foreach($array2_uncompletedConstructs as $array_construct) { $template .= "- {if(" . $array_construct['if']['condition'] . ")}
\n"; } } return $template; } // end function /** * Ersetzt die als Array übergebene Funktion durch * den ersten Teil mit einer wahren Bedingung * * @param $array_construct Array das komplette If-Konstrukt das ausgewertet werden soll * @param $template string das Template in dem das Konstrukt ersetzt werden soll * * @return string das Template mit dem ersetzten Konstrukt */ function replaceConstruct($array_construct, $template) { $array_elseif = array(); $key = 0; $replace_text = ""; $boolConditionTrue = false; //prüfen ob der if-teil wahr ist und $replace_text finden if(eval("return " . $array_construct['if']['condition'] . ";")) { if(array_key_exists('elseif', $array_construct)) { //wenn ein elseif-teil existiert $replace_text = substr($template, $array_construct['if']['pos_end'], $array_construct['elseif'][0]['pos_start'] - $array_construct['if']['pos_end']); } else if(array_key_exists('else', $array_construct)) { //wenn nur ein else-teil existiert $replace_text = substr($template, $array_construct['if']['pos_end'], $array_construct['else']['pos_start'] - $array_construct['if']['pos_end']); } else {//wenn der nächste teil schon endif ist $replace_text = substr($template, $array_construct['if']['pos_end'], $array_construct['endif']['pos_start'] - $array_construct['if']['pos_end']); } } else { //alle elseif-teile prüfen if(is_array($array_construct['elseif'])) { foreach($array_construct['elseif'] as $key => $array_elseif) { if(eval("return " . $array_elseif['condition'] . ";")) { $boolConditionTrue = true; if(array_key_exists(($key + 1), $array_construct['elseif'])) { //wenn ein weiterer elseif-teil existiert $replace_text = substr($template, $array_elseif['pos_end'], $array_construct['elseif'][$key+1]['pos_start'] - $array_elseif['pos_end']); } else if(array_key_exists('else', $array_construct)) { //wenn nächster teil nur ein else-teil ist $replace_text = substr($template, $array_elseif['pos_end'], $array_construct['else']['pos_start'] - $array_elseif['pos_end']); } else {//wenn der nächste teil schon endif ist $replace_text = substr($template, $array_elseif['pos_end'], $array_construct['endif']['pos_start'] - $array_elseif['pos_end']); } break; } } } //wenn bisher noch keine wahre Bedingung gefunden wurde if(!$boolConditionTrue) { if(array_key_exists('else', $array_construct)) { // wenn ein else-teil existiert $replace_text = substr($template, $array_construct['else']['pos_end'], $array_construct['endif']['pos_start'] - $array_construct['else']['pos_end']); } else { // sonst wird das gesamte kontrukt durch einen leeren string ersetzt $replace_text = ""; } } } // end else //if-konstruktion durch wahren teil ersetzen $template = substr_replace($template, $replace_text, $array_construct['if']['pos_start'], $array_construct['endif']['pos_end'] - $array_construct['if']['pos_start']); return $template; } } /** * class CounterFunctionParser * * Implemenation des AbstractTemplateParser zur Verwendung von * Zählern im Template * Als Tag im Template ist vorgesehen: * - {counter PARAMETER} * Die PARAMETER sind: * - name=ZÄHLERNAME * - start=STARTWERT (default: 0) * - step=SCHRITTWEITE (default: 1) * - print=(true|false) (default: true) * Alle Parameter sind optional. * * Über die Name-Eigenschaft können mehrere unschiedliche Zähler verwendet werden. * Bei jedem Vorkommen des {counter}-Tags wird der gleichnamige Zähler um STEP erhöht. * Wird die Eigenschaft print auf true oder gar nicht gesetzt erfolgt eine Ausgabe des * Zählerwerts an der Stelle des {counter}-Tags * * * @author Stefan Welpot * @version 1.0 */ class CounterFunctionParser extends AbstractTemplateParser { /** * Regexp-Pattern für {counter PARAMETER} * @var pattern_countertag */ var $pattern_countertag = "/(?si)\{counter(.*?\})/"; /** * Regexp-Pattern für Parameter name=NAME * @var pattern_countername */ var $pattern_countername = "/(?i)name\040?\=(.+?)(\040|\})/"; /** * Regexp-Pattern für Parameter start=STARTWERT * @var pattern_counterstart */ var $pattern_counterstart = "/(?i)start\040?\=(\d+?)(\040|\})/"; /** * Regexp-Pattern für Parameter step=SCHRITTWEITE * @var pattern_counterstep */ var $pattern_counterstep = "/(?i)step\040?\=(\d+?)(\040|\})/"; /** * Regexp-Pattern für Parameter print=(true|false) * @var pattern_counterprint */ var $pattern_counterprint = "/(?i)print\040?\=(true|false)(\040|\})/"; /** * Defaultwert für Parameter name * @var default_countername */ var $default_countername = "unnamed"; /** * Defaultwert für Parameter start * @var default_counterstart */ var $default_counterstart = 0; /** * Defaultwert für Parameter step * @var default_counterstep */ var $default_counterstep = 1; /** * Defaultwert für Parameter print * @var default_counterprint */ var $default_counterprint = true; /** * Konstruktor */ function CounterFunctionParser() { $this->AbstractTemplateParser(); } /** * @see AbstractTemplateParser#parse(string) */ function parse($template) { $counterParameters = ""; $counterKey = ""; $array_matches = array(); $array_countermatches = array(); $array_initCounters = array(); $boolPrint = $this->default_counterprint; $boolDoNotInkr = false; preg_match_all($this->pattern_countertag, $template, $array_countermatches, PREG_SET_ORDER); for($i = 0; $i < count($array_countermatches); $i++) { $counterKey = ""; $counterParameters = $array_countermatches[$i][1]; //Attribut Countername auslesen, falls vorhanden preg_match($this->pattern_countername, $counterParameters, $array_matches); if(count($array_matches) > 0) { $counterKey = $array_matches[1]; } else { // sonst defaultname $counterKey = $this->default_countername; } if(!array_key_exists($counterKey, $array_initCounters)) { // neuen Counter initialisieren $array_initCounters[$counterKey]['value'] = $this->default_counterstart; $array_initCounters[$counterKey]['step'] = $this->default_counterstep; $boolDoNotInkr = true; } //Attribut step preg_match($this->pattern_counterstep, $counterParameters, $array_matches); if(count($array_matches) > 0) { $array_initCounters[$counterKey]['step'] = $array_matches[1]; } //Attribut start preg_match($this->pattern_counterstart, $counterParameters, $array_matches); if(count($array_matches) > 0) { $array_initCounters[$counterKey]['value'] = $array_matches[1]; $boolDoNotInkr = true; } // value regulär erhöhen if(!$boolDoNotInkr) { $array_initCounters[$counterKey]['value'] = $array_initCounters[$counterKey]['value'] + $array_initCounters[$counterKey]['step']; } else { $boolDoNotInkr = false; } //Attribut print preg_match($this->pattern_counterprint, $counterParameters, $array_matches); if(count($array_matches) > 0) { $boolPrint = (strcasecmp("true", $array_matches[1]) == 0) ? true : false; } else { $boolPrint = $this->default_counterprint; } if($boolPrint) { $template = preg_replace($this->pattern_countertag, $array_initCounters[$counterKey]['value'], $template, 1); } else { $template = preg_replace($this->pattern_countertag, '', $template, 1); } } return $template; } } /** * class StrAPIFunctionsParser * * Implemenation des AbstractTemplateParser zum Auswerten von * ContenidoStrAPIFunktionen. * Als erlaubte Funktionen sind vorgesehen: * - {capiStrTrimHard(STRING, LÄNGE)} * - {capiStrTrimAfterWord(STRING, LÄNGE)} * - {capiStrTrimSentence(STRING, LÄNGE)} * * Die die Funktionen werden ertrahiert, ausgewertet und anschließend durch das Ergebnis ersetzt. * * * @author Stefan Welpot * @version 1.0 */ class StrAPIFunctionsParser extends AbstractTemplateParser { /** * zu ersetzende Funktionen * @var array_strAPIFunctions */ var $array_strAPIFunctions = array( "capiStrTrimHard", "capiStrTrimAfterWord", "capiStrTrimSentence" ); /** * Konstruktor */ function StrAPIFunctionParser() { $this->AbstractTemplateParser(); } /** * @see AbstractTemplateParser#parse(string) */ function parse($template) { $anzahlMatches = 0; $array2_matches = array(); $evaledCode = ""; foreach($this->array_strAPIFunctions as $functionname) { $anzahlMatches = preg_match_all("/(?si)\{" . preg_quote($functionname, "/") . "\(\"?(.*?)\"?,\040?(\d+?)\)\}/", $template, $array2_matches); for($i = ($anzahlMatches - 1); $i >= 0; $i--) { $evaledCode = eval("return " . $functionname . "(\"" . $array2_matches[1][$i] . "\", " . $array2_matches[2][$i] . ");"); $template = preg_replace( "/(?si)\{" . preg_quote($functionname, "/") . "\(\"?" . preg_quote($array2_matches[1][$i], "/") . "\"?,\040?" . preg_quote($array2_matches[2][$i], "/") . "\)\}/", $evaledCode, $template ); } //end for(i) } // end foreach return $template; } } ?>

Optimierung Webseite ( 06.06.2025 )

img

Unsere Webseite hat eine Optimierung im Kontaktformular erhalten.

Aufgrund von vielen Spam-Nachrichten, wurde unsere alter Captcha gegen
eine neue Generator von dem externen Anbieter Cloudflare ausgetauscht.

Kleines Facelifting & neue Webseite ( 25.10.2024 )

img

Unsere Webseite hat ein kleines Überarbeitung erhalten,
bis diese bald durch eine Neue mit aktuellem Design ersetzt wird.

Anbei eine kleine Vorschau!

Änderungen:

  • Die Seite wurde an aktuelle Standard bezüglich Breite, Schriftgröße und Abstände angepasst
  • Wir haben das alte Orange durch unsere aktuellen Vereinsfarben ersetzt
  • Mitgliederlisten sind auf einem aktuellen Stand
  • Die Startseite wird jetzt mit einem schönen Teambild bereichert

Sanierungsarbeiten abgeschlossen ( 26.11.2017 )

img

Die Sanierungsarbeiten in unserer alten Halle sind abgeschlossen,
daher findet unser Training ab dem 29.11.2017 wieder in der
Sporthalle an der 86. Grundschule - Mannheimer Straße 128c statt.

Sport frei!

Sanierungsarbeiten Sporthalle ( 04.06.2017 )

img

Wegen Sanierungsarbeiten an unserer bisherigen Sporthallen,
findet unser Training jetzt aktuell in einer anderen Halle statt.

Zu findet sind wir jetzt in der Sporthalle,
Am Kirschberg 49 - 04209 Leipzig - Grünau.

Anfahrt per Google Maps

Am Trainingstag sowie Zeiten gab es keine Änderungen!
Die Arbeiten sollen bis ca. Oktober andauern. 

Wir suchen Verstärkung! ( 18.01.2015 )

img

Wir suchen aktuell für unseren Sportverein Verstärkung und Nachwuchs.

Kommst du aus aus dem Raum Leipzig und spielst gern in deiner Freizeit Volleyball,
dann komm einfach gern vorbei. 

Wann? Immer Mittwochs ab 20:00 Uhr!

Wo? Sporthalle der 86. Grundschule!

Weiter Information:
( Klicke hier um den Flyer herunterzuladen )

gez. FSV Grünau 04 e.V.

Turnierbilder aus Döbeln ( 09.06.2014 )

Am sonnigen Pfingsmontag reichen wir nach einjähriger Turnierpause,
neues Bildmaterial von Döbeln 2014 nach.

Vom nächsten Freiluftturnier werden noch weitere Bilder folgenden
und unser eigenes Turnier im schönen Liebertwolkwitz ist schon in Planung.

Wir wünschen euch noch ein paar sonnige Wochen. 

Neue Turniervideos 2011 / 2012 mit neuem Player online. ( 09.06.2014 )

img

Heute reichen wir Videomaterial von Turnieren aus den Jahren 2011 und 2012 nach.
Das ganze ist jetzt schön verpakt in einem eigenen Youtube Channel mit den neuem Player und Playlist.

Leider gab es 2013 aufgrund zu geringer Teilnahme im Verein kein eigenes Turnier,
aber dafür wird es im kommenden Jahr mit Sicherheit eines mit entsprechendem Video geben.

Aktuell arbeiten wir an einer neuen Version unserer Website,
diese soll im laufe des nächsten Jahres erscheinen.

Vor kurzem wurde auch die noch aktuelle Homepage etwas angepasst und erweitert,
so gab es Änderungen im Kontaktformular, bei der Mitgliederliste und im Bereich Suchmaschinenoptimierung. 

gez. FSV Grünau 04 e.V.

P.s. Wir wünschen allen Sportfreunden einen guten Rutsch in neue Jahr!

Neue Turnierbilder von Döbeln Mai.2012 ( 09.06.2014 )

img

Es tut sich wieder was auf unserer Webseite.

Heute reichen wir Turniermaterial vom Mai.2012 nach
und erweitern das Webangebot um einen Datenschutzbereich.

mfg, FSV Grünau

Turniermaterial - Liebertwolkwitz 2010 ( 09.06.2014 )

img

Es gibt wieder mal was zu sehen.

Aktuell gibt es bei uns ein Video und Bilder vom FSV Turnier
in Liebertwolkwitz aus dem Jahre 2010.

Vielen Dank nochmal an den Kameramann und unser Vereinsmitglied Matthias Röhl
für das tolle Material.

Wir wünschen gute Unterhaltung.

FSV Herbst-Turnier 2011 ( 09.06.2014 )

img

Heute wird Turniermaterial nachgereicht.

Aktuell findet Ihr eine großzügige Galerie von unserem Herbst-Turnier
in Liebertwolkwitz 2011.


Viel Spaß beim Stöbern.

Neue Turnierbilder - April 2011 ( 09.06.2014 )

img

Es gibt wieder neues Turniermaterial.

Diesmal findet Ihr in unser Galerie aktuelle Bilder vom Turnier
in Leipzig/Waren und Hof bei Döbeln.

Viel Spaß beim Anschauen.