dedecms 特別テンプレートの使用方法?
BBS には DeDeCms のトピックに関する情報が比較的少ないです。以前に多くの情報を参照しましたが、解決策が見つかりませんでした。
推奨研究: 織夢 cms
Wunai は十分な食料と衣類を作るために自分の努力に頼るしかありません;公式バージョンには次のような一節があります:
1.リストは ID1、ID2、ID3 の形式で区切られます。システムは異なるノードから同一の記事を自動的に除外します;
2. 単一レコード テンプレートでの [field:fieldname /] タグの使用については、システム ヘルプの arclist タグの説明を参照してください;
3. ノード ID はノードの一意の識別子です。これを表すために {dede:specnote id='identity'/} を使用できます。トピック テンプレート内の単一ノード。
4. 通常、各ノードでは「ノード記事一覧」に文書が表示されますが、「自動取得モード」を指定した場合はキーワードとカラムIDの指定が必要です。
ただし、{dede:specnote id='note'/} をテストしても効率は向上しませんでした。そこで、元のより厳密な {dede:field name='note' を置き換えるためにこの問題の解決を開始しました。 /} タグ;
例:
ノードの異なる記事を2列に分けて表示したいのですが、現状noteでは実現できません。同じノードなので、必然的に少しぎこちなく見え、十分な柔軟性がありません。
以下に学生の参考のために私の解決策を書きます。まず最初に、これは機能を実現することしかできませんが、アルゴリズムが必ずしも最良であるとは限らないことを明確にしなければなりません。 DEDECMS コードに精通している人もいない人も、注意深く勉強したので、皆さんが理解できることを願っています。
ステップ 1:
ファイルの場所: {include/inc_archives_view.php}
コードは次のとおりです:
//广告标记 //----------------------- else if($ctag->GetName()=="myad"){ $this->dtp->Assign($tagid,$this->PartView->GetMyAd($typeid,$ctag->GetAtt("name"))); } // 专题标识 // by phpfans else if($ctag->GetName()=="specnote"){ $this->dtp->Assign($tagid,$this->ChannelUnit->GetSpecList('',$this->ChannelUnit->specrule,$ctag->GetAtt("id"))); }
はじめに:{トピックの追加特別記事リスト ページで specnote タグを認識できるように、広告タグ Mark} の下に追加します。
ステップ 2:
ファイルの場所: {include/inc_channel_unit.php}
var $specrule; //------------- //php5构造函数 //-------------
はじめに: $pecrule 変数の定義を追加しました。
ステップ 3:
ファイルの場所:{include/inc_channel_unit.php}
コードは次のとおりです:
else if($ftype=="specialtopic"){ $this->specrule = $fvalue; $fvalue = $this->GetSpecList($fname,$fvalue); }
はじめに: ここに追加 addonspec テーブルのメモ フィールド データを取得するために $this->specrule = $fvalue; という文を追加します;
ステップ 4:
ファイルの場所: {include/inc_channel_unit.php}
コードは次のとおりです:
//获得专题文章的列表 //-------------------------------- function GetSpecList($fname,$noteinfo,$noteid="") { if(!isset($GLOBALS['__SpGetArcList'])) require_once(dirname(__FILE__)."/inc/inc_fun_SpGetArcList.php"); if($noteinfo=="") return ""; $rvalue = ""; $tempStr = GetSysTemplets("channel/channel_spec_note.htm"); $dtp = new DedeTagParse(); </p> <p></p> <p>$dtp->LoadSource($noteinfo); if(is_array($dtp->CTags)) { foreach($dtp->CTags as $k=>$ctag){ $notename = $ctag->GetAtt("name"); if($noteid!="" && $ctag->GetAtt("noteid")!=$noteid){ continue; } //指定名称的专题节点 if($noteid!="" && $ctag->GetAtt("noteid")===$noteid) { $isauto = $ctag->GetAtt("isauto"); $idlist = trim($ctag->GetAtt("idlist")); $rownum = trim($ctag->GetAtt("rownum")); if(empty($rownum)) $rownum = 40; $keywords = ""; $stypeid = 0;</p> <p>if($isauto==1){ $idlist = ""; $keywords = trim($ctag->GetAtt("keywords")); $stypeid = $ctag->GetAtt("typeid"); }</p> <p>if(trim($ctag->GetInnerText())!="") $listTemplet = $ctag->GetInnerText(); else $listTemplet = GetSysTemplets("spec_arclist.htm"); $idvalue = SpGetArcList($this->dsql, $stypeid,$rownum,$ctag->GetAtt("col"), $ctag->GetAtt("titlelen"),$ctag->GetAtt("infolen"), $ctag->GetAtt("imgwidth"),$ctag->GetAtt("imgheight"), "all","default",$keywords,$listTemplet,100,0,$idlist);</p> <p>$notestr = str_replace("~notename~",$notename,$tempStr); $notestr = str_replace("~spec_arclist~",$idvalue,$notestr); $rvalue .= $notestr; if($noteid!="" && $ctag->GetAtt("noteid")==$noteid){ break; } } } } $dtp->Clear(); return $rvalue; }
はじめに: 小さな変更がいくつかあります。自分で比較するとよくわかるので、震えることはありませんもう
ステップ5:
手順: 元の{dede:field name='note'/}タグは無効です。使用したい場合は、4番目の部分を自分で修正してください。 。
非常に簡単;
完了!
以上がdedecms専用テンプレートの使い方の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。