http://site.ru/articles/2.html http://site.ru/articles/3.html http://site.ru/articles/4.html
MODX с такой задачей справляется довольно легко.
Необходимо только поправить ссылки в сниппете, например, pdoPage:
&tplPage=`@INLINE <li><a href="[[~[[*id]]]][[+pageNo]].html">[[+pageNo]]</a></li>` &tplPageActive=`@INLINE <li class="active"><a href="[[~[[*id]]]][[+pageNo]].html">[[+pageNo]]</a></li>` &tplPageFirst=`@INLINE <li class="control"><a href="[[~[[*id]]]][[+pageNo]].html">Первая</a></li>` &tplPageLast=`@INLINE <li class="control"><a href="[[~[[*id]]]][[+pageNo]].html">Последняя</a></li>` &tplPagePrev=`@INLINE <li class="control"><a href="[[~[[*id]]]][[+pageNo]].html">«</a></li>` &tplPageNext=`@INLINE <li class="control"><a href="[[~[[*id]]]][[+pageNo]].html">»</a></li>`
И создать плагин, указав события OnPageNotFound и OnHandleRequest:
<?php if ($modx->context->key == 'mgr') return ''; switch($modx->event->name) { case 'OnHandleRequest': if (strpos($_SERVER['REQUEST_URI'], '?page=')) { $uri = str_replace('?page=', '', $_SERVER['REQUEST_URI']); $modx->sendRedirect($uri, array('responseCode' => 'HTTP/1.1 301 Moved Permanently')); } break; case 'OnPageNotFound': $alias = $modx->context->getOption('request_param_alias', 'q'); if (!isset($_REQUEST[$alias])) {return false;} $request = $_REQUEST[$alias]; $tmp = explode('/', $request); $p = array_pop($tmp); $pageNo = str_replace('.html', '', $p); if (is_numeric($pageNo)) { if ($pageNo == $p) { $modx->sendRedirect(implode('/', $tmp) . '/' . $pageNo . '.html', array('responseCode' => 'HTTP/1.1 301 Moved Permanently')); } if (!$section = $modx->findResource(implode('/', $tmp) . '/')) { if (empty($tmp)) { $section = $modx->getOption('site_start'); } else { return false; } } $_GET['page'] = $_REQUEST['page'] = $pageNo; $modx->sendForward($section); } default: break; } return '';
4 комментария