Server IP : 80.87.202.40 / Your IP : 216.73.216.169 Web Server : Apache System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64 User : bitrix ( 600) PHP Version : 8.2.27 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/burlakastudio.realcommenter/lib/ |
Upload File : |
<?php /** * ����� "��������� ����������� 2.0" ��� ������� * �������� ���� �����: www.realcommenter.com * �������� ���� �����������: burlaka.studio * ����� � ����������: ������� ������� (AlexeyGfi) -> alexeygfi@gmail.com */ namespace Burlakastudio\Realcommenter; use Bitrix\Main\Context; class PAGINATION { /** * @param array $result * @param array $arParams * @param int $ipage * * @return array|bool */ public static function calculate_values(&$result = [], &$arParams = [], $ipage = 1) { if (empty($result) || empty($arParams)) { return false; } /** * ��������� ����������: * LIMIT_START - ���� ���������� ����� �� � ��������� ������ * USE_PAGE_NAV � �������� �� �� ���������� ���������� * LIMIT_EVERY_NEXT � ������ ������ ������������ ����� ��� ������ ������� �� ����� ������� ����������� ���������� * ...�� ����� ����� ���������� (��� ������� ����� LIMIT_START), ���� ���� ��� ������� ��� ����� * � ����� ������� �� LIMIT_START ("����������" � class.php) */ $total_pages = 1; $total_records = count($result); // $pagenav_values= [ // 'ipage' => $ipage, // ����� ������� // 'total_pages' => 1, // ������ ����� ������ // 'total_records' => count( $result ), // ������ ����� ������� ������� ����� // ]; if ($arParams['USE_PAGE_NAV']) { $total_pages = (int)ceil($total_records / $arParams['LIMIT_EVERY_NEXT']); } else if ( $arParams['LIMIT_EVERY_NEXT'] && $total_records > $arParams['LIMIT_EVERY_NEXT'] ) { $total_pages += (int)ceil(($total_records - $arParams['LIMIT_START']) / $arParams['LIMIT_EVERY_NEXT']); } if ($ipage > $total_pages) { /** * ���� ��� ��������� ����� ��� -- ���� ������ ������ �������. * ���� �� ��� ���� ��� - ��������� �� �������� */ $request = Context::getCurrent()->getRequest(); if ($request->isAjaxRequest() || $request->isPost()) { $ipage = $total_pages; } else { throw new \RuntimeException('PAGES_OVERFLOW'); } } return [ 'ipage' => $ipage, // ����� ������� 'total_pages' => $total_pages, // ������ ����� ������ 'total_records' => $total_records, // ������ ����� ������� ������� ����� ]; } public static function generateNavChain(&$arParams = []) { $navTpl = ''; /** * ���� ��� ��������� ������� �� ���� - ����� ��� ������ */ if ($arParams['NAV_ACTION'] === '*') { return $navTpl; } $nav = $arParams['NAV']; if ($arParams['USE_PAGE_NAV']) { $navTpl = HTML_TEMPLATER::get('pagenav_classic'); $navNode = HTML_TEMPLATER::get('pagenav_classic_node'); $pageNums = []; for ($p = 1; $p <= $nav['total_pages']; $p++) { // $pageNums[]= sprintf( // '<ins%s>%d</ins>', // ( $p == $nav[ 'ipage' ] ? ' class="_active"' : ' data-ipage="'. $p .'"' ), // $p // ); if ($p == $nav['ipage']) { $pageNums[] = str_replace( [ '#TAG#', '#HREF#', '#CLASSNAME#', '#DATA#', '#NUM#', ], [ 'ins', '', 'class="_active"', '', $p, ], $navNode ); } else { $pageNums[] = str_replace( [ '#TAG#', '#HREF#', '#CLASSNAME#', '#DATA#', '#NUM#', ], [ 'a', 'href="?ipage=#NUM#"', '', 'data-ipage="#NUM#"', $p, ], $navNode ); } } $navTpl = str_replace('#PAGE_NUMS#', implode('', $pageNums), $navTpl); } else if ($arParams['LIMIT_EVERY_NEXT']) { /** * ������ "������� ��" � ���� ������� ������� ���� ��� ������ ����� */ $awaitNextPortion = 0; $awaitInMoreLink = $nav['total_records'] - $arParams['LIMIT_START'] - ($nav['ipage'] - 1) * $arParams['LIMIT_EVERY_NEXT']; /** * ���� ���� ��� ������� */ if ($awaitInMoreLink <= 0) { return ''; } $nextIpage = 0; if ($awaitInMoreLink) { // ����� ����� ������ ����� �������? $nextIpage = ($arParams['IPAGE'] ? $arParams['IPAGE'] + 1 : $nav['ipage'] + 1); if ($awaitInMoreLink > $arParams['LIMIT_EVERY_NEXT']) { // ����� ����� �� ��������� ����� $awaitNextPortion = $arParams['LIMIT_EVERY_NEXT']; } } $localTinyParams = [ 'NEXT_PORTION' => $awaitNextPortion ]; $navTpl = HTML_TEMPLATER::get('pagenav_portion', $localTinyParams); $navTpl = str_replace( [ '#NAV_NEXT_PORTION#', '#NAV_REST_CNT#', '#PAGE_NUM#' ], [ $awaitNextPortion, $awaitInMoreLink, $nextIpage ], $navTpl ); } return $navTpl; } }