initial
This commit is contained in:
@@ -0,0 +1,80 @@
|
||||
<cfparam name="nStart" type="integer" default="1"/>
|
||||
|
||||
<cfparam name="ATTRIBUTES.recordCount" type="integer"/>
|
||||
<cfparam name="ATTRIBUTES.recordsPerPage" type="integer"/>
|
||||
<cfparam name="ATTRIBUTES.thisPage" type="string" default=""/>
|
||||
<cfparam name="ATTRIBUTES.addtionalUrlParams" type="string" default=""/>
|
||||
<cfparam name="ATTRIBUTES.self" type="string" default=""/>
|
||||
<!---<cfparam name="ATTRIBUTES.fwx" type="string" default=""/>--->
|
||||
<cfparam name="ATTRIBUTES.output" type="string" default="paginator"/>
|
||||
|
||||
<!--- Исключение: рассчитанный индекс страницы превышает количество существующих страниц - надо возвращаться на первую --->
|
||||
|
||||
<cfset nPages = Int((ATTRIBUTES.recordCount-1)/ATTRIBUTES.recordsPerPage)+1/>
|
||||
<cfset nCurrentPage = Int((nStart-1)/ATTRIBUTES.recordsPerPage)+1/>
|
||||
<cfif nStart GT ATTRIBUTES.recordCount>
|
||||
<cfset nStart=1/>
|
||||
</cfif>
|
||||
|
||||
<cfset UrlSuffix=""/>
|
||||
<cfif len(ATTRIBUTES.addtionalUrlParams) GT 0>
|
||||
<cfset UrlSuffix="&#ATTRIBUTES.addtionalUrlParams#"/>
|
||||
</cfif>
|
||||
<cfif len(ATTRIBUTES.self) GT 0>
|
||||
<cfset UrlSuffix="&track=#ATTRIBUTES.self#"/>
|
||||
</cfif>
|
||||
|
||||
<cfset somePages=3/>
|
||||
|
||||
<cfsavecontent variable="pages">
|
||||
<cfif ATTRIBUTES.recordCount GT ATTRIBUTES.recordsPerPage>
|
||||
<cfset doMerge = false/>
|
||||
<cfloop index="i" from="1" to="#nPages#">
|
||||
<cfset nPageStartRecordNum=(i-1)*ATTRIBUTES.recordsPerPage+1>
|
||||
<!---
|
||||
схема, которая обеспечивает дихотомический поиск
|
||||
первые несколько страниц (не менее 2)
|
||||
если есть разрыв - многоточие
|
||||
посередине
|
||||
если есть разрыв - многоточие
|
||||
несколько страниц до текушей
|
||||
текущую без ссылки
|
||||
несколько страниц после текущей
|
||||
если есть разрыв - многоточие
|
||||
посередине
|
||||
если есть разрыв - многоточие
|
||||
последние несколько страниц
|
||||
--->
|
||||
<!---Можно сделать на многоточии ссылку на середину интервала!--->
|
||||
<!---Хочется добиться, чтобы при хождении вперед-назад значения повторялись--->
|
||||
<!---забавный эффект, когда остается разрыв в 1 страницу, а там все равно многоточие--->
|
||||
<cfoutput>
|
||||
<cfif i NEQ nCurrentPage>
|
||||
<cfif i GT somePages AND (nCurrentPage-i) GT somePages>
|
||||
<cfif NOT doMerge><!---*** неуклюже--->
|
||||
<cfset nMidPage = ceiling(nCurrentPage/2)/>
|
||||
<cfset nMidStartRecord = (nMidPage-1)*ATTRIBUTES.recordsPerPage+1/>
|
||||
<a href="#ATTRIBUTES.thisPage#?nStart=#nMidStartRecord##UrlSuffix#" title="#nMidPage#">...</a> <cfset doMerge=true/>
|
||||
</cfif>
|
||||
<cfelseif (i-nCurrentPage) GT somePages AND (nPages-i) GT somePages>
|
||||
<cfif NOT doMerge>
|
||||
<cfset nMidPage = ceiling((nCurrentPage+nPages)/2)/>
|
||||
<cfset nMidStartRecord = (nMidPage-1)*ATTRIBUTES.recordsPerPage+1/>
|
||||
<a href="#ATTRIBUTES.thisPage#?nStart=#nMidStartRecord##UrlSuffix#" title="#nMidPage#">...</a> <cfset doMerge=true/>
|
||||
</cfif>
|
||||
<cfelse>
|
||||
<a href="#ATTRIBUTES.thisPage#?nStart=#nPageStartRecordNum##UrlSuffix#">#i#</a>
|
||||
<cfset doMerge=false/>
|
||||
</cfif>
|
||||
<cfelse>
|
||||
<b>#i#</b>
|
||||
</cfif>
|
||||
</cfoutput>
|
||||
</cfloop>
|
||||
</cfif>
|
||||
</cfsavecontent>
|
||||
|
||||
<cfset "CALLER.#ATTRIBUTES.output#.links"=#pages#/>
|
||||
<cfset "CALLER.#ATTRIBUTES.output#.recordsPerPage"=#ATTRIBUTES.recordsPerPage#/>
|
||||
|
||||
<cfexit method="exittag"/>
|
||||
Reference in New Issue
Block a user