Heim  >  Artikel  >  Web-Frontend  >  Lösung für das Problem, dass die Thinkphp-Vorlage aufgrund ihrer Javascript-Kenntnisse nicht direkt analysiert und ausgegeben werden kann

Lösung für das Problem, dass die Thinkphp-Vorlage aufgrund ihrer Javascript-Kenntnisse nicht direkt analysiert und ausgegeben werden kann

WBOY
WBOYOriginal
2016-05-16 16:32:323406Durchsuche

Das Beispiel in diesem Artikel beschreibt die Lösung des Problems, dass die Thinkphp-Vorlage nicht geparst wird und direkt so ausgegeben wird, wie sie ist. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:

1. Frage:

Ich habe kürzlich Thinkphp-Vorlagen kennengelernt, aber nach einigem Suchen habe ich endlich die Lösung gefunden.

2. Lösung:

Viele Leute sind auf das gleiche Problem gestoßen. Die in der der Variablen zugewiesenen Zeichenfolge enthaltenen Werte __ROOT__, __PUBLIC__ und __APP__ werden bei der Anzeige in der Vorlage durch echte Pfade ersetzt. Ich habe dieses Problem beim Schreiben des Timi-Dateiverwaltungssystems entdeckt.

Nachdem ich den Quellcode aus der Datei gelesen und auf der Seite ausgegeben hatte, stellte ich fest, dass, solange es sich um ein TP-Pfadzeichen handelt, es durch einen echten Pfad ersetzt wurde.
Zum Beispiel:

Code kopieren Der Code lautet wie folgt:
$this->assign('fileContent',$ fileContent); //$fileContent enthält __PUBLIC__ „Pfadkonstante“-Zeichen.


Nachdem die Seite ausgegeben wurde, wird sie als echter Pfad /public/ angezeigt.
Während dieser Zeit habe ich viele Versuche unternommen, z. B. die Base64-Verschlüsselung beim Zuweisen und die Dekodierung bei der Ausgabe der Vorlage, und festgestellt, dass es nicht funktioniert hat. Schließlich konnte ich nicht anders, als mir den Quellcode von Tp anzusehen und stellte fest, dass im letzten Schritt der Anzeigemethode die „Tp-Pfadkonstante“ durch Aufrufen der Tag-Methode durch den tatsächlichen Pfad ersetzt wurde. Vor der Render-Methode ist alles normal.

Ursprünglich hatte ich geplant, den Quellcode zu ändern, um die folgende Lösung für Kinderschuhe zu implementieren:
Boss, ist das eine vorübergehende Lösung oder eine endgültige Lösung?
Aber ich denke, es ist nicht schlecht, der Methode „assign()“ ein Urteil hinzuzufügen,
Wenn es $this->assign('','',false) ist, wird der Inhalt nicht ersetzt und unverändert ausgegeben.

Nachdem ich diesen Quellcode gelesen hatte, wurde mir klar, dass es nicht so einfach war und die Änderungen zu groß waren.

Die letzte Antwort eines anderen Kindes zeigte die endgültige Lösung auf:

"Sie können hier auf den Inhalt verweisen: http://www.jb51.net/article/54217.htm(Vorlagenersatz)

Mit den Vorlagenersetzungsregeln werden alle __PUBLIC__-Strings auf der Seite ersetzt. Wenn wir den __PUBLIC__-String wirklich in der Vorlage ausgeben müssen, können wir Ersetzungsregeln hinzufügen, zum Beispiel:

Code kopieren Der Code lautet wie folgt:
'TMPL_PARSE_STRING' =>array(
'--PUBLIC--' => '__PUBLIC__', // Neue Regeln zur Ausgabe von /Public string verwenden
)

Nachdem wir die Ersetzungsregel auf diese Weise hinzugefügt haben, müssen wir, wenn wir die Zeichenfolge __PUBLIC__ ausgeben möchten, nur --PUBLIC-- in der Vorlage hinzufügen. Die Ausgabemethode anderer Ersetzungszeichenfolgen ist ähnlich.

Wenn wir nach dem Hinzufügen der Ersetzungsregeln auf diese Weise die Zeichenfolge __PUBLIC__ ausgeben möchten, müssen wir nur --PUBLIC-- in der Vorlage hinzufügen. Die Ausgabemethode anderer Ersetzungszeichenfolgen ist ähnlich.

Also wurde der Plan veröffentlicht:

Konfigurieren Sie in der Tp-Konfigurationsdatei config.php

Code kopieren Der Code lautet wie folgt:
'TMPL_PARSE_STRING' => Array (//Pfadkonfiguration
                           
//Timi-Dateipfadwiederherstellung
'--PUBLIC--' => '__PUBLIC__',
'--APP--' => '__APP__',
'--URL--' => '__URL__',
'--ACTION--' => '__ACTION__',
'--SELF--' => '__SELF__',
'--INFO--' => '__INFO__',
'--EXT--' => '__EXT__'
),

Ersetzen Sie beim Lesen des Quellcodes das „Pfadkonstantenzeichen“ __ROOT__ durch --ROOT--:

Code kopieren Der Code lautet wie folgt:
$fileContent=file_get_contents($filePath);
$fileContent=htmlspecialchars(preg_replace('/__(.*?)__/is','--$1--',$fileContent));

Dann wird die Konfiguration von TMPL_PARSE_STRING einfach ersetzt, wenn die Vorlage analysiert wird, wie in der Abbildung unten gezeigt:

Seitdem ist dieses Problem „vorübergehend“ und „perfekt“ gelöst.

Ich hoffe, dass dieser Artikel für alle bei der Programmierung des ThinkPHP-Frameworks hilfreich sein wird.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn