{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} 태그 사용
sql 태그는 데이터베이스를 쿼리하여 출력합니다.
1입니다. 예를 들어, 게시된 총 기사 수를 계산해 보겠습니다. 아이디어는 dede_addonarticle 기사의 추가 테이블 내용의 총 수를 출력하는 것입니다.
{dede:sql sql="SELECT COUNT(*) AS nums FROM dede_addonarticle"} [field:name = "nums"/] {/dede:sql}
2. ~field~를 사용하여 특별한 쿼리를 수행합니다. 예를 들어 이전에는 포럼의 많은 회원이 현재 기사를 게시하고 있는 회원의 관련 콘텐츠를 출력해야 했습니다. 이전에는 각 기사 때문에 sql 또는 arclist 태그를 사용하는 것이 불가능했습니다. 내용이 다릅니다. 여기서는 5.5 SQL 문을 데모로 사용합니다.
먼저 기사 템플릿의 해당 위치에 다음 태그를 추가합니다.
{dede:sql sql="SELECT * FROM dede_archives WHERE writer=~writer~"} [field:id/], DEDE模板 {/dede:sql}
이것을 article_article.htm 페이지에 넣으면 현재 회원이 게시한 관련 기사가 검색됩니다. 여기 ~작가~는 환경을 기반으로 합니다. 현재 콘텐츠의 변수 쿼리를 실행하기 전에 대체를 수행합니다.
SQL 문에서 조건부 쿼리에 나타나는 ~writer~는 다음과 같습니다. 즉, $refObj->Fields[$value]의 해당 내용입니다.
템플릿에 PHP를 사용합니다.
많은 사람들이 DreamWeaver의 템플릿 태그는 PHP 실행 기능을 추가하여 더욱 유연해졌습니다. 여기 DedeCMS V5.5에는 PHP를 실행할 수 있는 특수 태그인 {dede:php}{/dede:php}가 추가되어 있습니다.
다음은 몇 가지 일반적인 예입니다.
1. 가장 간단한 출력 내용:
{dede:php} $numA = 1; $numB = 2; echo $numA + $numB; {/dede:php}
{dede:php}에서 정보를 출력하려면 print, echo 등을 직접 사용하여 인쇄하고 할당하면 됩니다. @me에 대한 값이 유효하지 않음
이 출력의 내용은 계산 결과입니다:
3
2. SQL 쿼리와 결합하여 단일 내용을 출력합니다.
{dede:php} $row = $dsql->GetOne('select id,typename from dede_arctype where id=2'); print_r($row); {/dede:php}
이 출력의 내용은
Array ( [id] => 2 [typename] => 问答 )
3입니다. . 현재 페이지의 변수 가져오기
예를 들어 여기서는 시스템 배경 [Template]-[Global Mark Test]를 입력하고 코드에 다음 내용을 입력합니다.
{dede:php} print_r($refObj->Fields); {/dede:php}
가져오려면 PHP에서 특정 필드 값을 지정하려면 $refObj->Fields 개체를 사용하여 열을 가져올 수 있습니다. 제목 가져오기 => 환경 변수 test를 살펴보겠습니다. 여기서는 로컬 열을 테스트로 사용합니다.
Array ( [typeid] => 0 [phpurl] => /plus [indexurl] => / [templeturl] => /templets [memberurl] => /member [specurl] => /special [indexname] => 主页 [templetdef] => /templets/default )
이러한 방식으로 현재 페이지의 로컬 변수를 검색합니다. 다음으로 이전 SQL 문을 결합하여 다양한 환경 ID를 구현할 수 있습니다.
예:
Array ( [id] => 3 [reid] => 0 [topid] => 0 [sortrank] => 1 [typename] => 产品 [typedir] => {cmspath}/product … … [indexname] => 主页 [templetdef] => /templets/default [position] => 主页 > 产品 > [title] => 产品 )
이는 현재 열의 제목을 호출하는 것입니다. 이 레이블 함수는 {dede:field.typename/}과 유사합니다.
다음으로 쿼리를 실행하여 sql 및 출력 변수를 처리합니다.
{dede:php} $thisid = $refObj->Fields['id']; $row = $dsql->GetOne('select id,typename from dede_arctype where id='.$thisid); print_r($row); {/dede:php}
이런 방식으로 쿼리 결과가 기본 템플릿에 나타나는 관련 변수로 대체된 다음 출력 문자열이 생성되고 모든 문자열 정보가 $revalue에 저장됩니다.
마지막으로 이 값을 반환합니다. return $revalue;
전체 파일의 내용은 다음과 같습니다.
$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(); }
다음으로 태그를 테스트해 보겠습니다. article_article.htm 템플릿을 수정하고 여기에 다음 태그 코드를 추가합니다.
관련 권장 사항 :dedecms5.7 최신 sql 익스플로잇 guestbook.php 주입 취약점
dedecms SESSION 변수 덮어쓰기로 인해 SQL 주입 common.inc.php 솔루션
PHP 명령어 주입 dedecs 원격 쓰기 파일 링크 예시 공유
위 내용은 Dede에서 SQL과 함께 PHP 태그를 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!