Comment utiliser les balises PHP avec SQL dans Dede

墨辰丷
Libérer: 2023-03-25 20:40:02
original
1576 Les gens l'ont consulté

Cet article présente principalement comment utiliser les balises php avec sql dans dede. Les amis intéressés peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

  {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 &#39;<a href="&#39;.$link.&#39;.html" class="&#39;.$class.&#39;">&#39;;  
    echo $row[&#39;title&#39;];  
    echo &#39;</a> &#39;;  
}  
{/dede:php}
Copier après la connexion


{dede:sql} utilisation de la balise

la balise sql peut être appelée C'est une balise universelle. Interrogez la base de données et affichez-la. Voici quelques utilisations de cette balise :

1. Elle est utilisée pour afficher du contenu statistique. Par exemple, comptons le nombre total de publications. Combien d'articles y a-t-il ? L'idée est d'afficher le nombre total de contenus de table supplémentaires de l'article dede_addonarticle.

{dede:sql sql="SELECT COUNT(*) AS nums FROM dede_addonarticle"}  
  
[field:name = "nums"/]  
  
{/dede:sql}
Copier après la connexion

2. Utilisez ~field~ pour effectuer des requêtes spéciales. Par exemple, de nombreux membres du forum devaient auparavant afficher le contenu pertinent des membres qui publient actuellement des articles. Cela n'était pas possible avec SQL ou Arclist. balises avant. , parce que le contenu de chaque article est différent, nous utiliserons ici l'instruction SQL 5.5 comme démonstration.

Nous ajoutons d'abord la balise suivante à la position correspondante dans le modèle d'article

 {dede:sql sql="SELECT * FROM dede_archives WHERE writer=~writer~"}  
  [field:id/], DEDE模板   
  {/dede:sql}
Copier après la connexion

Mettez-la sur la page article_article.htm, qui récupérera les articles pertinents publiés par le membre actuel, ici ~writer~ remplacera les variables d'environnement en fonction du contenu actuel avant d'exécuter la requête.

Le ~writer~ qui apparaît dans la requête conditionnelle de l'instruction SQL, c'est-à-dire le contenu pertinent dans $refObj->Fields[$value]

Utiliser PHP dans le modèle

Beaucoup de gens espèrent que les balises de modèle de Dreamweaver pourront être plus flexibles et ajouter la fonction d'exécution de PHP. Ici, DedeCMS V5.5 a ajouté une balise spéciale {dede:php}{/dede:php} qui peut exécuter PHP. . Cette balise peut exécuter des instructions PHP.

Voici quelques exemples couramment utilisés :

1. Le contenu de sortie le plus simple :

  {dede:php}  
  $numA = 1;  
  $numB = 2;  
  echo $numA + $numB;  
   
  {/dede:php}
Copier après la connexion

Si vous souhaitez afficher des informations dans {dede:php}, vous peut directement utiliser print, echo et autres pour imprimer la valeur attribuée à @me n'est pas valide

Le contenu de cette sortie est le résultat du calcul :

  3
Copier après la connexion

2. Combiné avec la sortie d'une requête SQL Un seul élément de contenu

 {dede:php}  
  $row = $dsql->GetOne(&#39;select id,typename from dede_arctype where id=2&#39;);  
  print_r($row);  
  {/dede:php}
Copier après la connexion

Le contenu de sortie est

  Array  
  (  
  [id] => 2  
  [typename] => 问答  
  )
Copier après la connexion

3. Obtenez les variables de la page actuelle

Pour exemple, on rentre ici le [template]-[ du background système Global tag test], on remplit le contenu suivant dans le code :

 {dede:php}  
  print_r($refObj->Fields);  
   
  {/dede:php}
Copier après la connexion


Si vous souhaitez obtenir une certaine valeur de champ en PHP, vous pouvez utiliser l'objet $refObj-> ;Fields pour être inclus pour obtenir title => $refObj->Fields['title']

Si la variable d'environnement reste la valeur par défaut, c'est-à-dire "ne pas utiliser l'ID d'environnement", nous verrons les résultats suivants :

 Array  
  (  
  [typeid] => 0  
  [phpurl] => /plus  
  [indexurl] => /  
  [templeturl] => /templets  
  [memberurl] => /member  
  [specurl] => /special  
  [indexname] => 主页  
  [templetdef] => /templets/default  
  )
Copier après la connexion

Modifions ensuite la variable d'environnement à tester Ici. J'utilise ma colonne locale comme test :

 Array  
  (  
  [id] => 3  
  [reid] => 0  
  [topid] => 0  
  [sortrank] => 1  
  [typename] => 产品  
  [typedir] => {cmspath}/product  
  … …  
  [indexname] => 主页  
  [templetdef] => /templets/default  
  [position] => 主页 > 产品 >  
  [title] => 产品  
  )
Copier après la connexion

De cette façon, les variables locales de la page actuelle sont récupérées. Ensuite, nous pouvons combiner les instructions SQL précédentes pour en appeler différentes. contenu des colonnes en fonction de différents ID d’environnement.

Par exemple :

 {dede:php}  
  $thisid = $refObj->Fields[&#39;id&#39;];  
  $row = $dsql->GetOne(&#39;select id,typename from dede_arctype where id=&#39;.$thisid);  
  print_r($row);  
  {/dede:php}
Copier après la connexion

Il s'agit d'appeler le titre de la colonne actuelle. Cette fonction de balise est similaire à {dede:field.typename/}

Suivant. nous exécutons la requête traite SQL et les variables de sortie :

$dsql->Execute(&#39;me&#39;,$sql);  
while($rs = $dsql->GetArray(&#39;me&#39;))  
{  
//根据属性处理查询变量  
$rs[&#39;title&#39;] = cn_substr($rs[&#39;title&#39;], $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();  
}
Copier après la connexion

De cette façon, nous remplaçons les résultats de la requête par les variables pertinentes qui apparaissent dans le modèle sous-jacent, puis générons la chaîne de sortie et stockons toutes les informations de chaîne en $ réévaluer.

Enfin, retournez cette valeur return $revalue;

Le contenu de l'ensemble du fichier est le suivant :

if(!defined(&#39;DEDEINC&#39;))  
{  
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 = &#39;&#39;;  
$innertext = $ctag->GetInnerText();  
$ctp = new DedeTagParse();  
$ctp->SetNameSpace(&#39;field&#39;, &#39;[&#39;, &#39;]&#39;);  
$sql = "SELECT * FROM dede_archives WHERE writer=&#39;{$refObj->Fields[&#39;writer&#39;]}&#39; limit 0, $row";  
$dsql->Execute(&#39;me&#39;,$sql);  
while($rs = $dsql->GetArray(&#39;me&#39;))  
{  
//根据属性处理查询变量  
$rs[&#39;title&#39;] = cn_substr($rs[&#39;title&#39;], $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;  
}  
?>
Copier après la connexion

Ensuite, nous allons tester notre balise, nous modifions l'article_article Modèle .htm, ajoutez le code de balise suivant à l'intérieur :

{dede:writerarc row=&#39;10&#39; titlelen=&#39;6&#39;}  
[field:title/]   
{/dede:writerarc}
Copier après la connexion

Recommandations associées :

dedecms5.7 La dernière vulnérabilité d'injection SQL exploit guestbook.php

l'écrasement de la variable dedecms SESSION conduit à une solution d'injection SQL common.inc.php

Injection de commande PHP dedecms écriture à distance exemple de lien de fichier partage


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!