Главная » Шпаргалка » PHP MYSQL javascript » Разбивка контента постранично в MODX

Plugin AutoSplitBigArticle

статья взята из http://modxcms.com/forums/index.php/topic,14760.0

Для решения проблемы с разбивкой был переделан Pagination Plugin, который разбивал страницы по вставленному в текст разделителю.
В отличии от него AutoSplitBigArticle работает автоматически, сам разбивая текст на страницы.
Разбивка происходит от количества абзацев на страницу, задается параметром $count_delimiter_per_page, поставьте меньше-больше, в зависимости от среднего размера абзацев у вас и размера страницы.

Инсталяция проста

1. создаем новый плагин с именем AutoSplitBigArticle
2. Если нужно разбивать не после 20 абзацов, а после меньшего количества, меняем значение переменной $count_delimiter_per_page. Можно поставить 1 - будет разбивать после каждого абзаца. Все настройки в секции CUSTOMIZE.
3. Выделяем контент в шаблоне страницы:

<!­­--content-->

\[\*content\*\]

<!­­--content-->
(только уберите \ поставил так как этот параметр используется в модексе для вывода контента и этот сайт на этом движке и я не разобрался как его показать в статье чтоб он не дублировал статью)
Всё теперь на странице остаётся столько абзацев, сколько задано, а внизу появляется Pages:  1 | 2  Next
Работает на всех версиях Evo.

//<?php
/*
 * Name AutoSplitBigArticle (Plugin)
 * Version: 1.3
 * Modified: Temus
 * Author: Yuri Shkatula "Terjer" ([email protected])
 * Based on Pip (Pagination Plugin)
 * Author: Armand "bS" Pondman ([email protected])
 *
 * Description:
 * will paginate a document when count delimiter per page is found in the content.
 *
 * Configuration:
 * check the OnWebPagePrerender event
 *
 * optional:
 * Edit the values under the CUSTOMIZE Header
 *
 */

## CUSTOMIZE ##
$separator '<!-- content -->';
$delimiter '<p';
$count_delimiter_per_page=20;
/* sample 1 */
/*
$tplLinkNext = '<a href="">Next page</a>';
$tplLinkPrev = '<a href="">Prev page</a>';
$tplLinkNav = '
<div style="margin-top:1.2em;font-size:.9em; text-align:center">

&nbsp;Page  of &nbsp;

</div>';
*/
/* sample 2 */
$tplLinkNext '<a href="">Next</a>';
$tplLinkPrev '<a href="">Prev</a>';
$tplLinkNav '
<div style="margin-top:1.2em;font-size:.9em; text-align:center">
Pages:&nbsp; 

&nbsp;&nbsp;

</div>'
;

## DO NOT EDIT BELOW THIS LINE ##
$e = &$modx->Event;

switch(
$e->name) {
case 'OnWebPagePrerender':
$all_content explode($separator,$modx->documentOutput);
if (count($all_content) > 2) {$pip_content $all_content[1];}
else {return;}
$pip_content_p explode($delimiter,$pip_content);
$pip_content_first array_shift($pip_content_p);
$pip_pagecount=ceil(count($pip_content_p)/$count_delimiter_per_page);

if ($pip_pagecount 1)
{
$pip_currentpage = isset($_GET["page"]) ? intval($_GET["page"]): 1;
if ($pip_currentpage $pip_pagecount || $pip_currentpage 1) { $pip_currentpage 1; }

$char = ($modx->config['friendly_urls'] == 0) ? "&amp;" "?";
$url $modx->makeurl($modx->documentObject["id"],'',$char.'page=');

$prevpage $pip_currentpage-1;
$nextpage $pip_currentpage+1;
$linkprev = ($prevpage>0) ? str_replace("",$url.$prevpage,$tplLinkPrev) : '';
$linknext = ($nextpage>$pip_pagecount) ? '' str_replace("",$url.$nextpage,$tplLinkNext);

$pip_template str_replace("",$linkprev,$tplLinkNav);
$pip_template str_replace("",$linknext,$pip_template);
$pip_template str_replace("",$pip_pagecount,$pip_template);
$pip_template str_replace("",$pip_currentpage,$pip_template);

$pages='';
for ($i=1;$i<=$pip_pagecount;$i++){
$pages .= ($i==$pip_currentpage) ? $i '<a href="'.$url.$i.'">'.$i.'</a>';
$pages .= ($i==$pip_pagecount) ? '' ' | ';
}
$pip_template=str_replace("",$pages,$pip_template);

$pip_content_p=array_slice($pip_content_p,$count_delimiter_per_page*$pip_currentpage-$count_delimiter_per_page,$count_delimiter_per_page);
$all_content[1]= (($pip_currentpage==1)?$pip_content_first:'').$delimiter.implode($delimiter,$pip_content_p).$pip_template;
$modx->documentOutput=implode('',$all_content);
}

break;
default:
return;
break;
}