38 1234
发新话题
打印

【7月20日更新】Rndarticle 随机乱弹 1.3

本主题由 月上之木 于 2008-7-14 23:02 加入精华

回复 36# 的帖子

其实我还是觉得不通过ID,用MOVE方法比较好,只要知道条数不用探测ID了。

TOP

下面是我的算法, 已做到类插件管理器的模块里了, 这是不是就是老江说的 Move? 呵呵.

算上调用类共读两次数据库, 而利用了缓存大部分时候只读一次, 还行吧?
复制内容到剪贴板
代码:
Dim strID,aryID,tmpID,tmpURL

'Application.Contents.RemoveAll    'Test Olny

Application.Lock
aryID=Application(ZC_BLOG_CLSID & "MYCUSTOMPAGES_ARYARTICLEID")
Application.UnLock

If (Not IsArray(aryID)) Then '如果服务器变量不是数组--那就是服务器变量不存在了, 重新取得吧.

        Dim objRS
        Set objRS=objConn.Execute("SELECT [log_ID] FROM [blog_Article] WHERE ([log_Level]>2) ")
        If (Not objRS.bof) And (Not objRS.eof) Then
                Do While Not objRS.eof
                        strID = strID &" "& objRS("log_ID")
                        objRS.MoveNext
                Loop
        End If
        objRS.close
        Set objRS=Nothing

        strID=Trim(strID)
        aryID=Split(strID," ")

        Application.Lock
        Application(ZC_BLOG_CLSID & "MYCUSTOMPAGES_ARYARTICLEID")=aryID
        Application.UnLock

End If

Dim i,n

For i=0 To 2 '删除文章到索引重建的时间差内, 或停用插件后却保留本页的情况下可能会弹空, 所以才有重试机制, 但只试三次.

        Randomize
        n=Int((UBound(aryID,1)+1) * Rnd)
        tmpID=aryID(n)

        Dim objArticle
        Set objArticle = New TArticle

                If objArticle.LoadInfoByID(tmpID) Then
                        If objArticle.Level>2 Then
                                tmpURL = objArticle.Url
                                Set objArticle=Nothing
                                Exit For
                        End If
                End If

                Application.Lock
                Application(ZC_BLOG_CLSID & "MYCUSTOMPAGES_ARYARTICLEID")=Empty '弹空一次则清空这个已经过时的服务器变量, 消除潜在错误.
                Application.UnLock

        Set objArticle=Nothing

Next

If (Not InStr(tmpURL,ZC_BLOG_HOST)>0) Then '重试找不到结果...点儿很背, 不得不报错了.
        Call ShowError(2)
End If

tmpURL=Replace(tmpURL,ZC_BLOG_HOST,"") : tmpURL="../"& tmpURL '得到相对路径
tmpURL = Replace(tmpURL,"//","/") '防 ServerTransfer 出路径错误.


Server.Transfer tmpURL

TOP

 38 1234
发新话题