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">
Page of
</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:
</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) ? "&" : "?";
$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;
}