109.include.cache.php 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. <?php
  2. /**
  3. * @package getpage
  4. */
  5. $output = '';
  6. $properties =& $scriptProperties;
  7. $properties['page'] = (isset($_GET[$properties['pageVarKey']]) && ($page = intval($_GET[$properties['pageVarKey']]))) ? $page : null;
  8. if ($properties['page'] === null) {
  9. $properties['page'] = (isset($_REQUEST[$properties['pageVarKey']]) && ($page = intval($_REQUEST[$properties['pageVarKey']]))) ? $page : 1;
  10. }
  11. $properties['limit'] = (isset($_GET['limit'])) ? intval($_GET['limit']) : null;
  12. if ($properties['limit'] === null) {
  13. $properties['limit'] = (isset($_REQUEST['limit'])) ? intval($_REQUEST['limit']) : intval($limit);
  14. }
  15. $properties['offset'] = (!empty($properties['limit']) && !empty($properties['page'])) ? ($properties['limit'] * ($properties['page'] - 1)) : 0;
  16. $properties['totalVar'] = empty($totalVar) ? "total" : $totalVar;
  17. $properties[$properties['totalVar']] = !empty($properties[$properties['totalVar']]) && $total = intval($properties[$properties['totalVar']]) ? $total : 0;
  18. $properties['pageOneLimit'] = (!empty($pageOneLimit) && $pageOneLimit = intval($pageOneLimit)) ? $pageOneLimit : $properties['limit'];
  19. $properties['actualLimit'] = $properties['limit'];
  20. $properties['pageLimit'] = isset($pageLimit) && is_numeric($pageLimit) ? intval($pageLimit) : 5;
  21. $properties['element'] = empty($element) ? '' : $element;
  22. $properties['elementClass'] = empty($elementClass) ? 'modChunk' : $elementClass;
  23. $properties['pageNavVar'] = empty($pageNavVar) ? 'page.nav' : $pageNavVar;
  24. $properties['pageNavTpl'] = !isset($pageNavTpl) ? "<li[[+classes]]><a[[+classes]][[+title]] href=\"[[+href]]\">[[+pageNo]]</a></li>" : $pageNavTpl;
  25. $properties['pageNavOuterTpl'] = !isset($pageNavOuterTpl) ? "[[+first]][[+prev]][[+pages]][[+next]][[+last]]" : $pageNavOuterTpl;
  26. $properties['pageActiveTpl'] = !isset($pageActiveTpl) ? "<li[[+activeClasses:default=` class=\"active\"`]]><a[[+activeClasses:default=` class=\"active\"`]][[+title]] href=\"[[+href]]\">[[+pageNo]]</a></li>" : $pageActiveTpl;
  27. $properties['pageFirstTpl'] = !isset($pageFirstTpl) ? "<li class=\"control\"><a[[+title]] href=\"[[+href]]\">First</a></li>" : $pageFirstTpl;
  28. $properties['pageLastTpl'] = !isset($pageLastTpl) ? "<li class=\"control\"><a[[+title]] href=\"[[+href]]\">Last</a></li>" : $pageLastTpl;
  29. $properties['pagePrevTpl'] = !isset($pagePrevTpl) ? "<li class=\"control\"><a[[+title]] href=\"[[+href]]\">&lt;&lt;</a></li>" : $pagePrevTpl;
  30. $properties['pageNextTpl'] = !isset($pageNextTpl) ? "<li class=\"control\"><a[[+title]] href=\"[[+href]]\">&gt;&gt;</a></li>" : $pageNextTpl;
  31. $properties['toPlaceholder'] = !empty($toPlaceholder) ? $toPlaceholder : '';
  32. $properties['cache'] = isset($cache) ? (boolean) $cache : (boolean) $modx->getOption('cache_resource', null, false);
  33. if (empty($cache_key)) $properties[xPDO::OPT_CACHE_KEY] = $modx->getOption('cache_resource_key', null, 'resource');
  34. if (empty($cache_handler)) $properties[xPDO::OPT_CACHE_HANDLER] = $modx->getOption('cache_resource_handler', null, 'xPDOFileCache');
  35. if (empty($cache_expires)) $properties[xPDO::OPT_CACHE_EXPIRES] = (integer) $modx->getOption('cache_resource_expires', null, 0);
  36. if ($properties['page'] == 1 && $properties['pageOneLimit'] !== $properties['actualLimit']) {
  37. $properties['limit'] = $properties['pageOneLimit'];
  38. }
  39. if ($properties['cache']) {
  40. $properties['cachePageKey'] = $modx->resource->getCacheKey() . '/' . $properties['page'] . '/' . md5(http_build_query($modx->request->getParameters()) . http_build_query($scriptProperties));
  41. $properties['cacheOptions'] = array(
  42. xPDO::OPT_CACHE_KEY => $properties[xPDO::OPT_CACHE_KEY],
  43. xPDO::OPT_CACHE_HANDLER => $properties[xPDO::OPT_CACHE_HANDLER],
  44. xPDO::OPT_CACHE_EXPIRES => $properties[xPDO::OPT_CACHE_EXPIRES],
  45. );
  46. }
  47. $cached = false;
  48. if ($properties['cache']) {
  49. if ($modx->getCacheManager()) {
  50. $cached = $modx->cacheManager->get($properties['cachePageKey'], $properties['cacheOptions']);
  51. }
  52. }
  53. if (empty($cached) || !isset($cached['properties']) || !isset($cached['output'])) {
  54. $elementObj = $modx->getObject($properties['elementClass'], array('name' => $properties['element']));
  55. if ($elementObj) {
  56. $elementObj->setCacheable(false);
  57. if (!empty($properties['toPlaceholder'])) {
  58. $elementObj->process($properties);
  59. $output = $modx->getPlaceholder($properties['toPlaceholder']);
  60. } else {
  61. $output = $elementObj->process($properties);
  62. }
  63. }
  64. include_once $modx->getOption('getpage.core_path',$properties,$modx->getOption('core_path', $properties, MODX_CORE_PATH) . 'components/getpage/').'include.getpage.php';
  65. $qs = $modx->request->getParameters();
  66. $properties['qs'] =& $qs;
  67. $totalSet = $modx->getPlaceholder($properties['totalVar']);
  68. $properties[$properties['totalVar']] = (($totalSet = intval($totalSet)) ? $totalSet : $properties[$properties['totalVar']]);
  69. if (!empty($properties[$properties['totalVar']]) && !empty($properties['actualLimit'])) {
  70. if ($properties['pageOneLimit'] !== $properties['actualLimit']) {
  71. $adjustedTotal = $properties[$properties['totalVar']] - $properties['pageOneLimit'];
  72. $properties['pageCount'] = $adjustedTotal > 0 ? ceil($adjustedTotal / $properties['actualLimit']) + 1 : 1;
  73. } else {
  74. $properties['pageCount'] = ceil($properties[$properties['totalVar']] / $properties['actualLimit']);
  75. }
  76. } else {
  77. $properties['pageCount'] = 1;
  78. }
  79. if (empty($properties[$properties['totalVar']]) || empty($properties['actualLimit']) || $properties[$properties['totalVar']] <= $properties['actualLimit'] || ($properties['page'] == 1 && $properties[$properties['totalVar']] <= $properties['pageOneLimit'])) {
  80. $properties['page'] = 1;
  81. } else {
  82. $pageNav = getpage_buildControls($modx, $properties);
  83. $properties[$properties['pageNavVar']] = $modx->newObject('modChunk')->process(array_merge($properties, $pageNav), $properties['pageNavOuterTpl']);
  84. if ($properties['page'] > 1) {
  85. $qs[$properties['pageVarKey']] = $properties['page'];
  86. }
  87. }
  88. $properties['firstItem'] = $properties['offset'] + 1;
  89. $properties['lastItem'] = ($properties['offset'] + $properties['limit']) < $totalSet ? ($properties['offset'] + $properties['limit']) : $totalSet;
  90. $properties['pageUrl'] = $modx->makeUrl($modx->resource->get('id'), '', $qs);
  91. if ($properties['cache'] && $modx->getCacheManager()) {
  92. $cached = array('properties' => $properties, 'output' => $output);
  93. $modx->cacheManager->set($properties['cachePageKey'], $cached, $properties[xPDO::OPT_CACHE_EXPIRES], $properties['cacheOptions']);
  94. }
  95. } else {
  96. $properties = $cached['properties'];
  97. $output = $cached['output'];
  98. }
  99. $modx->setPlaceholders($properties, $properties['namespace']);
  100. if (!empty($properties['toPlaceholder'])) {
  101. $modx->setPlaceholder($properties['toPlaceholder'], $output);
  102. $output = '';
  103. }
  104. return $output;
  105. return;