Наверх

Реализуем пагинацию без GET-параметров в URL

Иногда требуется, чтобы ссылки постраничной навигации выглядели как-то так:
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 '';


0 комментариев

    Авторизация

    через сервис Loginza:

    Подписка или RSS

    Буду присылать новые статьи — никакого спама



    Шаблоны MODX

    1 2 Дальше »

    Объектная
    модель
    MODX