Die folgende Tutorial-Kolumne von thinkphp wird Ihnen die Verwendung des Parsens von benutzerdefinierten ThinkPHP5.1-Tags vorstellen. Ich hoffe, dass es für Freunde in Not hilfreich sein wird!
In letzter Zeit gibt es Projekte, die benutzerdefinierte Tags verwenden müssen. TP verwendet 5.1. Bitte beachten Sie, dass 5.1 im Vergleich zu 5.0 wesentliche Änderungen in der Verzeichnisstruktur und den Verfahren aufweist. Achten Sie auf Ihre Version. Kommen wir zum Punkt.
1. Erstellen Sie die Tag-Funktionsdatei
Erstellen Sie das Verzeichnis tabLib im Modellverzeichnis und erstellen Sie eine Cms.php im Verzeichnis
namespace app\cms\tagLib; use think\Db; use think\template\TagLib; class Cms extends TagLib{ protected $tags = [ //标签定义: attr 属性列表,close 是否闭合(0或1,默认1),alias标签别名 level嵌套层次 'lists' => ['attr' => 'num,order,sort'], ]; // 当不使用content的时候,闭合标签没有效果 // 修改过此文件后,需要改动下模板的内容,否则模板有缓存不会执行新的内容。 public function tagLists($tag,$content){ $cateID = $tag['cate_id']; //栏目ID $num = $tag['num']; //数量 $order = input($tag['order']); //排序方式 $type = $cateID; $name = $tag['name']; $tableName = 'table_name'; $parse = '<?php $map=[];'; $parse .= '$__LIST__ = Db::name('.$tableName.')->where(["cate_id"=>'. $cateID .']) ->limit('.$num.') ->select(); ?>'; $parse .= '{volist name="__LIST__" id="'. $name .'"}'; $parse .= $content; $parse .= "{/volist}"; return $parse; }
Bei der Entwicklung sind Zweifel aufgetreten:
1. Die obige tagLists-Funktion entspricht dem geschützten $ Tags Achten Sie beim Definieren von Labels auf die Groß-/Kleinschreibung, sonst wird die Funktion nicht gefunden.
2. Alle Zeichen in $parse sind zusammengesetzte Zeichenfolgen, die vom Vorlagen-Tag von TP erneut analysiert werden, sodass Sie die Original-Tags von TP oder native PHP-Anweisungen darin verwenden können. Sie können jedoch kein externes Array oder Objekt als Parameter an $param übergeben. Sie müssen wissen, dass es sich nur um eine Zeichenfolge handelt, die für die Assemblierung verwendet wird. Bitte beachten Sie die Verwendung der Variable $__LIST__. Wenn Sie Daten aus der Datenbank lesen möchten, müssen Sie einen vollständigen PHP-Code schreiben. Sie können die Abfrage nicht außerhalb ausführen und dann die abgefragte Liste als Variable übergeben.
2. Laden Sie diese Tag-Funktion in die Vorlagenkonfigurationsinformationen
Fügen Sie einen Satz im Modul cms/config/template.php hinzu: 'taglib_pre_load' => 'appcmstagLibCms',
Wenn Sie diese Datei nicht haben, Sie können im Konfigurationsverzeichnis im Stammverzeichnis eine Vorlage kopieren und im Verzeichnis cms/config ablegen.
3. Verwenden Sie Tags in Vorlagen.
{cms:lists name="row" num="10" cate_id="5" order="1"} <li>{$row.title}</li> {/cms:lists}
name, num, cate_id und andere Attribute werden als erster Parameter $tags von tagLists übergeben. Der Inhalt zwischen {cms:lists} und {$/cms:lists} wird als vollständiger String $content an den zweiten Parameter von tagLists übergeben.
Hinweis: Es gibt hier geschlossene und nicht geschlossene Tags. Wenn es sich um ein geschlossenes Tag handelt, müssen Sie den Inhalt in (1) verwenden. Wenn Sie die Inhaltsvariable nicht verwenden, wird das geschlossene Tag {/cms:lists} unverändert ausgegeben und nicht geparst.
Im Moment herrscht große Verwirrung, und das Thema der paginierten Listen wird noch untersucht. Ich werde es nach Abschluss der Studie hinzufügen.
Ergänzung: Führen Sie keine Datentypkonvertierung für die im $tag[]-Array in tagList erhaltenen Daten durch, da diese Variable bei der Übergabe einer Variablen nicht wirksam wird! ! Daher ist es falsch, hier intval($tag[num]) zu verwenden.
Das obige ist der detaillierte Inhalt vonAnalyse der Verwendung von benutzerdefinierten ThinkPHP5.1-Tags. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!