このテンプレート エンジンは HTML と組み合わせるとさらに便利です。コピー コードは次のとおりです。
クラステンプレート
プライベート c_Char、c_Path、c_FileName、c_Content、c_PageUrl、c_CurrentPage、c_PageStr、ReplacePageStr
プライベートタグ名
**************************************
'エンコーディングを設定する
**************************************
Public プロパティ Let Char(ByVal Str)
c_Char = Str
終了プロパティ
Public プロパティ Get Char
Char = c_Char
終了プロパティ
**************************************
'テンプレートフォルダーのパスを設定します
**************************************
Public プロパティ Let Path(ByVal Str)
c_Path = Str
終了プロパティ
パブリックプロパティのパスの取得
パス = c_Path
終了プロパティ
**************************************
'テンプレートファイル名を設定
**************************************
Public プロパティ Let FileName(ByVal Str)
c_ファイル名 = 文字列
終了プロパティ
Public プロパティ Get FileName
ファイル名 = c_ファイル名
終了プロパティ
**************************************
' テンプレートファイルの特定のパスを取得します
**************************************
Public プロパティ Get FilePath
Len(Path) > 0 の場合、Path = Replace(Path, /, /)
If Right(Path, 1) <> / then Path = Path & /
ファイルパス = パス & ファイル名
終了プロパティ
**************************************
'ページングURLを設定
**************************************
Public プロパティ Let PageUrl(ByVal Str)
c_PageUrl = Str
終了プロパティ
Public プロパティ Get PageUrl
PageUrl = c_PageUrl
終了プロパティ
**************************************
'現在のページのページングを設定します
**************************************
Public プロパティ Let CurrentPage(ByVal Str)
c_CurrentPage = Str
終了プロパティ
Public プロパティ Get CurrentPage
現在のページ = c_CurrentPage
終了プロパティ
**************************************
'出力内容
**************************************
パブリック プロパティのフラッシュを取得
応答.書き込み(c_Content)
終了プロパティ
**************************************
'クラスの初期化
**************************************
プライベートサブクラス_初期化
タグ名 = pjblog
c_Char = UTF-8
ReplacePageStr = Array(, )
エンドサブ
**************************************
' 競合する文字をフィルタリングします
**************************************
プライベート関数 doQuote(ByVal Str)
doQuote = Replace(Str, Chr(34), )
終了機能
**************************************
' クラス終了
**************************************
プライベートサブクラス_Terminate
エンドサブ
**************************************
'ファイルのロードメソッド
**************************************
プライベート関数 LoadFromFile(ByVal cPath)
薄暗いオブジェクト
obj = Server.CreateObject(ADODB.Stream) を設定します。
オブジェクト付き
.Type = 2
.モード = 3
。開ける
.Charset = 文字
.位置 = .サイズ
.LoadFromFile Server.MapPath(cPath)
LoadFromFile = .ReadText
。近い
で終わる
obj = 何も設定しない
終了機能
「**********************************************
' 正規に一致するオブジェクトを取得します
「**********************************************
パブリック関数 GetMatch(ByVal Str, ByVal Rex)
ディム・レグ、マグ
Reg = 新しい RegExp を設定します
登録あり
.IgnoreCase = True
.Global=True
.パターン = レックス
Mag = .Execute(Str) を設定します。
Mag.Count > 0 の場合
GetMatch = Mag を設定します
それ以外
GetMatch = Server.CreateObject(Scripting.Dictionary) を設定します。
終了の場合
で終わる
Reg = 何も設定しない
終了機能
**************************************
'ドキュメントを開く
**************************************
パブリックサブオープン
c_Content = LoadFromFile(ファイルパス)
エンドサブ
**************************************
'バッファリングされた実行
**************************************
パブリックサブバッファ
c_Content = GridView(c_Content)
ExecuteFunction の呼び出し
エンドサブ
**************************************
'グリッドビュー
**************************************
プライベート関数 GridView(ByVal o_Content)
ディムマッチ、サブマッチ、サブテキスト
Dim 属性、コンテンツ
一致の設定 = GetMatch(o_Content, /< & TagName & /:(/d+?)(.+?)/>([/s/S]+?)<// & TagName & /:/1/>)
Matches.Count > 0 の場合
マッチ内のサブマッチごとに
属性 = SubMatches.SubMatches(1) ' kocms
コンテンツ = SubMatches.SubMatches(2) ' <列>...</列>
SubText = Process(Attribute, Content) 'すべてのプロセスの実行結果を返します
o_Content = Replace(o_Content, SubMatches.value, < & SubText(2) & SubText(0) & > & SubText(1) & </ & SubText(2) & >, 1, -1, 1) ' ラベル変数を置換します
次
終了の場合
一致を設定 = なし
If Len(ReplacePageStr(0)) > 0 then ' ラベル変数に値があるかどうかを判断し、値がある場合はそれを置き換えます。
o_Content = Replace(o_Content, ReplacePageStr(0), ReplacePageStr(1), 1, -1, 1)
ReplacePageStr = Array(, ) '置換後の配列変数をクリアします
終了の場合
GridView = o_Content
終了機能
**************************************
' 属性を決定する
**************************************
プライベート関数処理(ByVal属性、ByVal内容)
ディムマッチ、サブマッチ、テキスト
ディム MatchTag、MatchContent
Dim データソース、名前、要素、ページ、ID
データソース = : 名前 = : 要素 = : ページ = 0 : ID =
一致の設定 = GetMatch(Attribute, /s(.+?)/=/(.+?)/)
Matches.Count > 0 の場合
マッチ内のサブマッチごとに
MatchTag = SubMatches.SubMatches(0) ' 属性名を取得します
MatchContent = SubMatches.SubMatches(1) ' 属性値を取得
If Lcase(MatchTag) = name then Name = MatchContent ' name 属性値を取得します
If Lcase(MatchTag) = datasource then datasource = MatchContent' データソース属性値を取得します
If Lcase(MatchTag) = element then Element = MatchContent ' 要素の属性値を取得
If Lcase(MatchTag) = page then page = MatchContent ' ページ属性値を取得します
If Lcase(MatchTag) = id then id = MatchContent ' id 属性値を取得します
次
Len(名前) > 0 かつ Len(MatchContent) > 0 の場合
Text = Analysis(datasource, Name, Content, page, id) 'プロパティの解析を実行します
Len(datasource) > 0 の場合、Attribute = Replace(Attribute, datasource= & datasource & , )
ページ > 0 の場合、属性 = Replace(Attribute, page= & page &, )
属性 = 置換(属性, 名前= & 名前 & , , 1, -1, 1)
属性 = 置換(属性, 要素= & 要素 & , , 1, -1, 1)
プロセス = 配列(属性、テキスト、要素)
それ以外
プロセス = 配列(属性, , div)
終了の場合
それ以外
プロセス = 配列(属性, , div)
終了の場合
一致を設定 = なし
終了機能
**************************************
' 解析する
**************************************
プライベート関数分析(ByVal id、ByVal Name、ByVal Content、ByVal page、ByVal PageID)
ディムデータ
Select Case Lcase(Name) 'データソースの選択
Case ループ Data = DataBind(id, Content, page, PageID)
データの場合 = DataFor(id, Content, page, PageID)
エンドセレクト
分析=データ
終了機能
**************************************
'データソースをバインドする
**************************************
プライベート関数 DataBind(ByVal id、ByVal コンテンツ、ByVal ページ、ByVal PageID)
ディムテキスト、一致、サブマッチ、サブテキスト
Execute Text = & id & (1) 'データソースをロード
一致の設定 = GetMatch(Content, /<Columns/>([/s/S]+)/<//Columns/>)
Matches.Count > 0 の場合
マッチ内のサブマッチごとに
SubText = ItemTemplate(SubMatches.SubMatches(0), Text, page, PageID)' モジュールの置換を実行します
Content = Replace(Content, SubMatches.value, SubText, 1, -1, 1)
次
データバインド = コンテンツ
それ以外
データバインド=
終了の場合
一致を設定 = なし
終了機能
**************************************
' テンプレートインスタンスに一致
**************************************
プライベート関数ItemTemplate(ByVal TextTag、ByVal Text、ByVal ページ、ByVal PageID)
ディムマッチ、サブマッチ、サブマッチテキスト
ディム SecMatch、SecSubMatch
Dim i、TempText
薄暗い TextLen、TextLeft、TextRight
一致を設定 = GetMatch(TextTag, /<ItemTemplate/>([/s/S]+)/<//ItemTemplate/>)
Matches.Count > 0 の場合
マッチ内のサブマッチごとに
SubMatchText = SubMatches.SubMatches(0)
-----------------------------------------------
' ループのネストを開始します
-----------------------------------------------
SubMatchText = GridView(SubMatchText)
-----------------------------------------------
' ループのネストの終了
-----------------------------------------------
UBound(Text, 1) = 0 の場合
TempText=
それ以外
TempText=
'------------------------------------------------
' ページングの開始
'-------------------------------------------------
Len(ページ) > 0かつページ > 0の場合
Len(CurrentPage) = 0 または CurrentPage = 0 の場合、CurrentPage = 1
TextLen = UBound(テキスト, 2)
TextLeft = (CurrentPage - 1) * ページ
TextRight = CurrentPage * ページ - 1
TextLeft < 0 の場合、TextLeft = 0
TextRight > TextLen の場合、TextRight = TextLen
c_PageStr = MultiPage(TextLen + 1, ページ, CurrentPage, PageUrl, float:right, , False)
Int(Len(c_PageStr)) > 0 の場合
ReplacePageStr = Array(<page: & Trim(PageID) & />, c_PageStr)
それ以外
ReplacePageStr = Array(<page: & Trim(PageID) & />, )
終了の場合
それ以外
テキスト左 = 0
TextRight = UBound(テキスト, 2)
終了の場合
For i = TextLeft から TextRight
TempText = TempText & ItemReSec(i, SubMatchText, Text) 'テンプレートのコンテンツを読み込みます
次
終了の場合
次
ItemTemplate = TempText
それ以外
アイテムテンプレート =
終了の場合
一致を設定 = なし
終了機能
**************************************
'テンプレート文字列を置き換えます
**************************************
プライベート関数ItemReSec(ByVal i、ByVal Text、ByVal Arrays)
ディムマッチ、サブマッチ
一致を設定 = GetMatch(Text, /$(/d+?))
Matches.Count > 0 の場合
マッチ内のサブマッチごとに
Text = Replace(Text, SubMatches.value, doQuote(Arrays(SubMatches.SubMatches(0), i)), 1, -1, 1) '置換を実行します
次
ItemReSec = テキスト
それ以外
項目ReSec=
終了の場合
一致を設定 = なし
終了機能
**************************************
'グローバル変数関数
**************************************
プライベートサブ実行関数
ディムマッチ、サブマッチ、テキスト、ExeText
一致の設定 = GetMatch(c_Content, /<function/:([0-9a-zA-Z_/.]*?)/((.*?)/(.+?)/(.*?)/)// />)
Matches.Count > 0 の場合
マッチ内のサブマッチごとに
テキスト = SubMatches.SubMatches(0) & ( & SubMatches.SubMatches(1) & & SubMatches.SubMatches(2) & & SubMatches.SubMatches(3) & )
ExeText=&Textを実行
c_Content = Replace(c_Content, SubMatches.value, ExeText, 1, -1, 1)
次
終了の場合
一致を設定 = なし
エンドサブ
**************************************
' グローバルラベルの通常の置換
**************************************
Public プロパティ Let Sets(ByVal t, ByVal s)
ディム SetMatch、Bstr、SetSubMatch
Set SetMatch = GetMatch(c_Content, (/<Set/:([0-9a-zA-Z_/.]*?)/(((.*?) & t & (.*?))?/)// />))
SetMatch.Count > 0 の場合
SetMatch 内の SetSubMatch ごとに
Bstr = & SetSubMatch.SubMatches(1) & ( & SetSubMatch.SubMatches(3) & & s & & SetSubMatch.SubMatches(4) & ) を実行します。
c_Content = Replace(c_Content, SetSubMatch.Value, Bstr, 1, -1, 1)
次
終了の場合
SetMatch = なしを設定します
Set SetMatch = GetMatch(c_Content, (/<Set/: & t & ///>))
SetMatch.Count > 0 の場合
SetMatch 内の SetSubMatch ごとに
c_Content = Replace(c_Content, SetSubMatch.Value, s, 1, -1, 1)
次
終了の場合
SetMatch = なしを設定します
終了プロパティ
終了クラス