Новости | 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[]