Regulärer Ausdruck: wiederholender Quellcode erkennen

DiDiJo

Erfahrenes Mitglied
Hi Leute,

ich bin gerade dabei ein kleines Baukasten-System für Repsonsive-Webseiten vorzubereiten.

Ich habe mir dafür verschiedene Ordner mit Dateien erstellt indem ich je Ordner nur Quellcode einer "Modul-Zeile" hinzufüge.

Beispielsweise habe ich ein Carousel-Frame wie folgt vorbereitet:
PHP:
<div class="outerFrameset slider_001">
	<div class="innerFrameset">    	
        <div class="contentWidth">
        	<div class="bxSlider" id="<?=$pluginID?>">
            	<!--[REPEAT_START:5]-->
                <div class="bxSliderElement responsiveElement">
                	<div class="bxSliderImage">
                    	<div class="moduleBoxHolder">
							<?= $PRODUKT->loadModuleFileAndOutput($image) ?>
                        </div>
                    </div>
                </div>
               <!--[REPEAT_ENDE]-->
            </div>
        </div>
    </div>    
</div>

Diesen Code lade ich und ersetzte automatisiert vorhandene Platzhalter wie [HEADLINE] [IMAGE] etc. (nicht in dem Beispiel zu sehen). Was man aber erkennt ist der "Text-Token" bei dem ein sich wiederholender Abschnitt beginnt, endet und vor allem, wie viele Daten reingeladen werden sollen.

Wie würdet Ihr ohne viel Aufwand den wiederholenden Content rausholen bzw. wie würdet Ihr den Quellcode wiederholen und die HTML Kommentare entfernen. Ich brech mir gerade einen ab, indem ich manuell erstmal nach "<!--[REPEAT_START:" suche, dann nach der Zahl, danach dann nach dem schließenden Kommenatr und und und ... und ich denke , dass müsste einfacher gehen.

Bitte bedenkt bei eurer Lösung / Hilfestellung, dass möglicherweise Mehrere "Repeat-Blöcke" in einem Modul stehen könnten


Mit freundlichen Grüßen

Daniel
 
Ich würde die Schleife für den Platzhalter im PHP durchgehen und den Platzhalter im HTML zum Schluss mit dem gesamten Inhalt füllen (So habe ich es vor ca. 1 Jahr gemacht).

Dazu habe ich nur eine Simple HTML-Seite gebaut, "Anker" eingefügt und fülle diese übers PHP mit Inhalt (Zb. 5 Webseiten-Menüs in 1 Platzhalter, oder die kompletten News im Platzhalter {CONTENT} (Dieser Platzhalter kann auch durch Inhalt der anderen Webseiten, zb. Login-Formular usw. ersetzt werden).
 
Smarty läuft zwar schnell, aber auf Kosten der Variablen-Deklaration,- schaltest du Error-Reporting ein, wirft es mehr Notice-Meldungen als Webseite aus ;)
 
das ich das ganze per PHP mache war mir eigentlich klar ... die frage ist nur wie. Wie gesagt mein Ansatz ist aktuell nach dem Anfang des Tokens zu suchen, dann nach der Zahl, dann nach dem Ende und und und ... und ich denke das müsste doch einfacher gehen.

Ein Skript was mir aus dem oben generierten Skript folgende macht:

PHP:
<div class="outerFrameset slider_001">
    <div class="innerFrameset">        
        <div class="contentWidth">
            <div class="bxSlider" id="<?=$pluginID?>">

                <div class="bxSliderElement responsiveElement">
                    <div class="bxSliderImage">
                        <div class="moduleBoxHolder">
                            [... some code here]
                        </div>
                    </div>
                </div>

                <div class="bxSliderElement responsiveElement">
                    <div class="bxSliderImage">
                        <div class="moduleBoxHolder">
                            [... some code here]
                        </div>
                    </div>
                </div>

                <div class="bxSliderElement responsiveElement">
                    <div class="bxSliderImage">
                        <div class="moduleBoxHolder">
                            [... some code here]
                        </div>
                    </div>
                </div>

                <div class="bxSliderElement responsiveElement">
                    <div class="bxSliderImage">
                        <div class="moduleBoxHolder">
                            [... some code here]
                        </div>
                    </div>
                </div>

                <div class="bxSliderElement responsiveElement">
                    <div class="bxSliderImage">
                        <div class="moduleBoxHolder">
                            [... some code here]
                        </div>
                    </div>
                </div>

            </div>
        </div>
    </div>    
</div>
 
Was wir dir sagen wollten, Daniel, war, dass du eine relativ komplexe Sache umsetzen willst. Du würdest dich leichter damit tun, wenn du dir keinen eigenen Template-Code ausdenkst, sondern einfach PHP verwenden würdest und damit dein Template befüllst. In diesem Fall kannst du ganz einfach mit Schleifen arbeiten und brauchst nur ein Array zu übergeben. Du musst dir auch keine komplexen Regexe ausdenken, sondern einfach mit <?php echo $x ?> deine Variablen einsetzen.

Oben wurden Template-Engines wie Smarty angesprochen. Von mir läuft noch ein 10 Jahre altes Projekt mit Smarty. Ich war damals sehr happy damit. Inzwischen frage ich mich allerdings, ob ich damit nicht sehr viel unnötigen Code laden muss. Ich bin inzwischen ein Fan davon, einfach PHP in meinen Templates zu verwenden und würde nicht mehr zu Smarty raten. Allerdings kann das Geschmacksache sein. Smarty wurde für mich auch immer dann unhandlich, wenn ich Javascript verwenden musste oder wollte: {ldelim}{rdelim}. Smarty hat also auch nicht nur Vorteile.
 
Ach so, noch ein Tipp: Ich habe mir irgendwann die alternative Schreibweise für Schleifen oder IF-Abfragen angewöhnt. Die machen die Verwendung von PHP als Template deutlich einfacher (finde ich):

PHP:
if ():
 // do something
endif:


foreach ():
 // do something
endforeach;
 
Du hast eine (1) HTML-Seite, da ist ein Menü drin (welches wohl auf jeder Webseite bei dir sichtbar sein sollte). Da, wo das Menü zum Schluss auftauchen soll, machst du ein Anker, zb. {WEBSITE_MENUE}

Du liest im Core diese HTML-Seite ein und ersetzt diesen Anker durch deine Webseiten-Menüs, das ganze geht auch mit dem Content (News oder so),- sogar eine Banner-Rotation kannst du so in die fertige Webseite bringen,- ohne großartige verschachtelte Anweisungen nach irgendwelchen Token zu durchsuchen (Das wäre meine Vorgehensweise ;) )
 

Neue Beiträge

Zurück