Heim > Artikel > Backend-Entwicklung > So verwenden Sie PHP-Tags mit SQL in Dede
{dede:php} //echo 'vvvv'; {/dede:php} {dede:php} //print_r($refObj->Fields); $sql = "select ars.*, art.typedir from dede_archives AS ars LEFT JOIN dede_arctype AS art ON ars.typeid=art.id where typeid=2 ORDER BY weight ASC "; $dsql->SetQuery($sql);//将SQL查询语句格式化 $dsql->Execute();//执行SQL操作 //通过循环输出执行查询中的结果 while($row = $dsql->GetArray()){ $link = $refObj->Fields['indexurl'].'/'.$row['typedir'].'/'.$row['id']; $link = str_replace('{cmspath}', '', $link); $class = "ahy"; if($refObj->Fields['id'] == $row['id']) $class="ahytt"; echo '<a href="'.$link.'.html" class="'.$class.'">'; echo $row['title']; echo '</a> '; } {/dede:php}
{dede:sql}-Tag-Verwendung
SQL-Tag kann als universelles Tag bezeichnet werden , fragen Sie die Datenbank ab und geben Sie sie aus:
1. Es wird zum Beispiel verwendet, um zu zählen, wie viele Nachrichten insgesamt gesendet wurden. Artikel, die Idee besteht darin, die Gesamtzahl der zusätzlichen Tabelleninhalte des Artikels dede_addonarticle auszugeben.
{dede:sql sql="SELECT COUNT(*) AS nums FROM dede_addonarticle"} [field:name = "nums"/] {/dede:sql}
2. Verwenden Sie ~field~, um spezielle Abfragen durchzuführen. Bisher mussten viele Mitglieder im Forum relevante Inhalte von Mitgliedern ausgeben, die derzeit Artikel veröffentlichen. Dies war zuvor mit SQL- oder Arclist-Tags nicht möglich , weil Der Inhalt jedes Artikels ist unterschiedlich. Hier verwenden wir die 5.5-SQL-Anweisung als Demonstration.
Wir fügen zunächst den folgenden Tag an der entsprechenden Position in der Artikelvorlage hinzu:
{dede:sql sql="SELECT * FROM dede_archives WHERE writer=~writer~"} [field:id/], DEDE模板 {/dede:sql}
Fügen Sie dies auf der Seite „article_article.htm“ ein, wodurch relevante Artikel abgerufen werden, die vom aktuellen Mitglied, hier ~ Autor, veröffentlicht wurden ~ wird vor der Ausführung der Abfrage entsprechend den Umgebungsvariablen des aktuellen Inhalts ersetzt.
Der ~writer~, der in der bedingten Abfrage in der SQL-Anweisung erscheint, also der relevante Inhalt in $refObj->Fields[$value]
Verwenden Sie PHP in der Vorlage
Viele Leute hoffen, dass die Template-Tags von DreamWeaver flexibler sein und die Funktion zum Ausführen von PHP hinzufügen können. Hier hat DedeCMS V5.5 ein spezielles Tag {dede:php}{/dede:php} hinzugefügt, das PHP ausführen kann . Dieses Tag kann PHP-Anweisungen ausführen.
Hier sind ein paar häufig verwendete Beispiele:
1. Der einfachste Ausgabeinhalt:
{dede:php} $numA = 1; $numB = 2; echo $numA + $numB; {/dede:php}
Wenn Sie Informationen in {dede:php} ausgeben möchten, können Sie verwenden es direkt Drucken, Echo und dergleichen werden ausgedruckt und @me zugewiesen
Der Inhalt dieser Ausgabe ist das Berechnungsergebnis:
3
2. Kombiniert mit SQL-Abfrage zur Ausgabe eines einzelnen Inhalts
{dede:php} $row = $dsql->GetOne('select id,typename from dede_arctype where id=2'); print_r($row); {/dede:php}
Der Inhalt dieser Ausgabe ist
Array ( [id] => 2 [typename] => 问答 )
3. Holen Sie sich die Variablen der aktuellen Seite
Zum Beispiel, wenn wir Geben Sie die [Vorlage]-[Global Mark Test] ein. Im Hintergrund des Systems geben wir den Code ein. Füllen Sie den folgenden Inhalt aus:
{dede:php} print_r($refObj->Fields); {/dede:php}
In PHP, wenn Sie möchten Um einen bestimmten Feldwert zu erhalten, können Sie ihn mit dem Objekt $refObj->Fields abrufen und einschließen, um title = >Fields['title']
Wenn die Umgebungsvariable standardmäßig bleibt, also „keine Umgebungs-ID verwenden“, werden die folgenden Ergebnisse angezeigt:
Array ( [typeid] => 0 [phpurl] => /plus [indexurl] => / [templeturl] => /templets [memberurl] => /member [specurl] => /special [indexname] => 主页 [templetdef] => /templets/default )Dann ändern wir den Umgebungsvariablentest. Hier verwende ich meine lokale Spalte als Test:
Array ( [id] => 3 [reid] => 0 [topid] => 0 [sortrank] => 1 [typename] => 产品 [typedir] => {cmspath}/product … … [indexname] => 主页 [templetdef] => /templets/default [position] => 主页 > 产品 > [title] => 产品 )Auf diese Weise können die lokalen Variablen der aktuellen Seite abgerufen werden. Als nächstes können wir die vorherigen SQL-Anweisungen kombinieren, um unterschiedliche Spalteninhalte basierend auf unterschiedlichen Umgebungen aufzurufen Ausweise. Zum Beispiel:
{dede:php} $thisid = $refObj->Fields['id']; $row = $dsql->GetOne('select id,typename from dede_arctype where id='.$thisid); print_r($row); {/dede:php}Hiermit wird der Titel der aktuellen Spalte aufgerufen. Diese Tag-Funktion ähnelt {dede:field.typename/} Als nächstes führen wir aus Die SQL-Abfrage und die Ausgabevariablen werden verarbeitet:
$dsql->Execute('me',$sql); while($rs = $dsql->GetArray('me')) { //根据属性处理查询变量 $rs['title'] = cn_substr($rs['title'], $titlelen); //获取底层模板 $ctp->LoadSource($innertext); foreach($ctp->CTags as $tagid=>$ctag) { if(!empty($rs[strtolower($ctag->GetName())])) { $ctp->Assign($tagid,$rs[$ctag->GetName()]); DEDE模板 } } //根据底层模板及查询变量得到处理结果 $revalue .= $ctp->GetResult(); }Auf diese Weise ersetzen wir die Abfrageergebnisse durch die relevanten Variablen, die in der zugrunde liegenden Vorlage erscheinen, generieren dann die Ausgabezeichenfolge und speichern alle Zeichenfolgeninformationen in $ aufwerten. Schließlich diesen Wert zurückgeben return $revalue; Der Inhalt der gesamten Datei ist wie folgt:
if(!defined('DEDEINC')) { exit("Request Error!"); } function lib_writerarc(&$ctag,&$refObj) { global $dsql,$envs; //属性处理 $attlist="row|12,titlelen|24"; FillAttsDefault($ctag->CAttribute->Items,$attlist); extract($ctag->CAttribute->Items, EXTR_SKIP); $revalue = ''; $innertext = $ctag->GetInnerText(); $ctp = new DedeTagParse(); $ctp->SetNameSpace('field', '[', ']'); $sql = "SELECT * FROM dede_archives WHERE writer='{$refObj->Fields['writer']}' limit 0, $row"; $dsql->Execute('me',$sql); while($rs = $dsql->GetArray('me')) { //根据属性处理查询变量 $rs['title'] = cn_substr($rs['title'], $titlelen); //获取底层模板 $ctp->LoadSource($innertext); foreach($ctp->CTags as $tagid=>$ctag) { if(!empty($rs[strtolower($ctag->GetName())])) { $ctp->Assign($tagid,$rs[$ctag->GetName()]); } } //根 据底层模板及查询变量得到处理结果 $revalue .= $ctp->GetResult(); } return $revalue; } ?>Als nächstes testen wir unser Tag, wir ändern die Vorlage „article_article.htm“. , innen Fügen Sie den folgenden Tag-Code hinzu:
{dede:writerarc row='10' titlelen='6'} [field:title/] {/dede:writerarc}
Verwandte Empfehlungen:
dedecms5.7 neueste SQL Ausnutzen der Guestbook-.php-Injection-Schwachstelle
Das Überschreiben der Dedecms-SESSION-Variable führt zur SQL-Injection-Lösung common.inc.php
PHP-Befehlsinjektion dedecms Remote Writing File Link Beispielfreigabe
Das obige ist der detaillierte Inhalt vonSo verwenden Sie PHP-Tags mit SQL in Dede. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!