| Новости | FAQ | Авторы | Документация | В действии | Библиотека |
| Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
Никита Козин 11.03.2007 17:29 / 11.03.2007 17:30
В соответствии с приведенным и используемым в том числе и мной описанием обновил класс Scroller. Изменений в логике нет, пока что в коде используются русские слова («страницы», «дальше» и «назад»), не знаю, надо ли делать эти строки обязательными при инициализации.@CLASS
Scroller
# $oScroller[^Scroller::create[
# $.iItemsCount()
# $.iItemsPerPage()
# $.sFormName[page]
# $.iDirection(-1/0)
# $.iPage($form:page)
# ]]
# $oScroller.iItemsCount
# $oScroller.iLimit
# $oScroller.iOffset
# $oScroller.iPageCount
# $oScroller.iCurrentPage
# $oScroller.iCurrentPageNumber
# $oScroller.iCurrentPageName
# $oScroller.iDirection
# $oScroller.iFirstPage
# $oScroller.iLastPage
# $oScroller.sFormName
@create[hParams][iIsFullPage]
$hParams[^hash::create[$hParams]]
^if(!def $hParams.iItemsCount){
^throw[Scroller;Items count must be defined.]
}
^if(!^hParams.iItemsPerPage.int(0)){
^throw[Scroller;Items per page must be defined and not equal 0.]
}
$self.sMode[xml]
$self.sFormName[^if(def $hParams.sFormName){$hParams.sFormName}{page}]
^if(!def $hParams.iPage){
$hParams.iPage[$form:[$self.sFormName]]
}
$self.iItemsCount(^hParams.iItemsCount.int(0))
$iLimit(^hParams.iItemsPerPage.int(0))
$iPageCount(^math:ceiling($self.iItemsCount / $iLimit))
^if(^hParams.iDirection.int(0) < 0){
$iCurrentPage(^hParams.iPage.int($iPageCount))
^if($iCurrentPage > $iPageCount){
$iCurrentPage($iPageCount)
}{
^if($iCurrentPage < 1){$iCurrentPage(1)}
}
$iCurrentPageNumber($iPageCount - $iCurrentPage + 1)
$iCurrentPageName($iCurrentPageNumber)
^if($iPageCount && $iCurrentPage < $iPageCount){
$iIsFullPage(^if($self.iItemsCount % $iLimit){1}{0})
$iOffset($self.iItemsCount % $iLimit + ($iPageCount - $iCurrentPage - $iIsFullPage) * $iLimit)
}{
$iOffset(0)
}
$self.iDirection(-1)
$iFirstPage($iPageCount)
$iLastPage(1)
}{
$iCurrentPage(^hParams.iPage.int(1))
^if($iCurrentPage > $iPageCount){
$iCurrentPage($iPageCount)
}{
^if($iCurrentPage < 1){$iCurrentPage(1)}
}
$iCurrentPageNumber($iCurrentPage)
$iCurrentPageName($iCurrentPage)
$self.iDirection(+1)
$iFirstPage(1)
$iLastPage($iPageCount)
^if($iPageCount){
$iOffset(($iCurrentPage - 1) * $iLimit)
}{
$iOffset(0)
}
}
# end @create[]
# ^oScroller.print[
# $.sMode[html|xml]
# $.iItemsCount(5)
# $.sSeparator[:]
# $.sCanvasTagName[]
# $.sCanvasTagAttributes[]
# $.sTitle[Страницы: ]
# $.sLeftDivider[]
# $.sRightDivider[|]
# $.sBackTitle[&larr^; Назад]
# $.sForwardTitle[Дальше &rarr^;]
# $.sTargetURL[./]
# ]
@print[hParams][iPageNumber;iItemsCount;iFirstItem;iLastItem;sSeparator;sURLSeparator;sTitle;iCounter;iPage]
^if($iPageCount > 1){
$hParams[^hash::create[$hParams]]
^if(!def $hParams.sTargetURL){
$hParams.sTargetURL[./]
}
^if(def $hParams.sMode){
$sMode[$hParams.sMode]
}
$iItemsCount(^hParams.iItemsCount.int(5))
$iFirstItem($iCurrentPageNumber - $iItemsCount \ 2)
^if($iFirstItem < 1){
$iFirstItem(1)
}
$iLastItem($iFirstItem + $iItemsCount - 1)
^if($iLastItem > $iPageCount){
$iLastItem($iPageCount)
$iFirstItem($iLastItem - $iItemsCount)
^if($iFirstItem < 1){$iFirstItem(1)}
}
$sSeparator[^if(def $hParams.sSeparator){$hParams.sSeparator}{...}]
$sURLSeparator[^if(^hParams.sTargetURL.pos[?]>=0){^taint[&]}{?}]
^if(def $hParams.sCanvasTagName){
<$hParams.sCanvasTagName $hParams.sCanvasTagAttributes>
}
$sTitle[^if(def $hParams.sTitle){$hParams.sTitle}{Страницы: }]
^if($sMode eq "html"){
$sTitle
}{
<title>$sTitle</title>
^if(def $hParams.sLeftDivider){<left-divider>$hParams.sLeftDivider</left-divider>}
^if(def $hParams.sRightDivider){<right-divider>$hParams.sRightDivider</right-divider>}
}
^if($iCurrentPage != $iFirstPage){
^_printItem[
$.sType[back]
$.sTitle[^if(def $hParams.sBackTitle){$hParams.sBackTitle}{&larr^; Назад}]
$.sURL[$hParams.sTargetURL]
$.sURLSeparator[$sURLSeparator]
$.iPage(^eval($iCurrentPage - $iDirection))
]
^if($sMode eq "html" && def $hParams.sLeftDivider){$hParams.sLeftDivider}
}
^if($iFirstItem > 1){
^_printItem[
$.sType[first]
$.sTitle[1]
$.sURL[$hParams.sTargetURL]
$.sURLSeparator[$sURLSeparator]
$.iPage($iFirstPage)
]
^if($iFirstItem > 2){
^_printItem[
$.sType[separator]
$.sTitle[$sSeparator]
]
}
}
^for[iCounter]($iFirstItem;$iLastItem){
^if($iDirection < 0){
$iPage($iPageCount - $iCounter + 1)
}{
$iPage($iCounter)
}
^_printItem[
^if($iPage == $iCurrentPage){
$.sType[current]
}
$.sTitle[$iCounter]
$.sURL[$hParams.sTargetURL]
$.sURLSeparator[$sURLSeparator]
$.iPage($iPage)
]
}
^if($iLastItem < $iPageCount){
^if($iLastItem < $iPageCount - 1){
^_printItem[
$.sType[separator]
$.sTitle[$sSeparator]
]
}
^_printItem[
$.sType[last]
$.sTitle[$iPageCount]
$.sURL[$hParams.sTargetURL]
$.sURLSeparator[$sURLSeparator]
$.iPage($iLastPage)
]
}
^if($iCurrentPage != $iLastPage){
^if($sMode eq "html"){
^if(def $hParams.sRightDivider){$hParams.sRightDivider}{|}
}
^_printItem[
$.sType[forward]
$.sTitle[^if(def $hParams.sForwardTitle){$hParams.sForwardTitle}{Вперед &rarr^;}]
$.sURL[$hParams.sTargetURL]
$.sURLSeparator[$sURLSeparator]
$.iPage(^eval($iCurrentPage + $iDirection))
]
}
^if(def $hParams.sCanvasTagName){</$hParams.sCanvasTagName>}
}
# end @print[]
@_printItem[hParams]
$hParams[^hash::create[$hParams]]
^if($sMode eq "html"){
^if($hParams.sType eq "separator"){
$result[$hParams.sTitle]
}{
^if($hParams.sType ne "current" && def $hParams.iPage){
$result[<a href="^untaint[html]{$hParams.sURL^if($hParams.iPage != $iFirstPage){${hParams.sURLSeparator}$sFormName=$hParams.iPage}}">$hParams.sTitle</a>]
}{
$result[$hParams.sTitle]
}
}
}{
$result[<page
^if(def $hParams.sType){ type="$hParams.sType"}
^if($hParams.sType ne "current" && def $hParams.iPage){
href="^untaint[xml]{^if(def $hParams.sURL){$hParams.sURL}{./}^if($hParams.iPage != $iFirstPage){${hParams.sURLSeparator}$sFormName=$hParams.iPage}}"
}
num="$hParams.sTitle"
/>]
}
# end @_printItem[]