We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 29487
    • 385 Posts
    Этот плагин в принципе не работал с кэшем, как и его прототип. Поэтому я немного переписал его для события OnWebPagePrerender. Теперь страница кэшируется целиком, как обычно, а разбиение на страницы происходит непосредственно перед выводом на экран.
    В шаблоне область контента должна быть выделена типа:
    <!-- content -->
    [*content*]
    <!-- content -->
    

    Ещё исправил подсчет параграфов.

    //<?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="[+link+]">Next page</a>';
    $tplLinkPrev = '<a href="[+link+]">Prev page</a>';
    $tplLinkNav = '
    	<div style="margin-top:1.2em;font-size:.9em; text-align:center">
    	[+linkprev+]
    	 Page [+current+] of [+total+] 
    	[+linknext+]
    	</div>';
    */
    /* sample 2 */
    $tplLinkNext = '<a href="[+link+]">Next</a>';
    $tplLinkPrev = '<a href="[+link+]">Prev</a>';
    $tplLinkNav = '
    	<div style="margin-top:1.2em;font-size:.9em; text-align:center">
    	Pages:  
    	[+linkprev+]
    	 [+pages+] 
    	[+linknext+]
    	</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("[+link+]",$url.$prevpage,$tplLinkPrev) : '';
    		$linknext = ($nextpage>$pip_pagecount) ? '' : str_replace("[+link+]",$url.$nextpage,$tplLinkNext);
    
    		$pip_template = str_replace("[+linkprev+]",$linkprev,$tplLinkNav);
    		$pip_template = str_replace("[+linknext+]",$linknext,$pip_template);
    		$pip_template = str_replace("[+total+]",$pip_pagecount,$pip_template);
    		$pip_template = str_replace("[+current+]",$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+]",$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;
    }
    


    UPD: вывод номеров страниц
    UPD2: исправил дублирование текста до первого абзаца [ed. note: Temus last edited this post 12 years, 2 months ago.]
      • 22181
      • 26 Posts
      А может кто-нибудь доделает этот плугин чтобы он выводил все страницы этого большого документа.
      Т.Е. Не только вперед назад линки, а Вперед - Назад + 1 2 3 4 5 6 7 8 9 10 стр и тд.

      С меня пиво wink
        • 29487
        • 385 Posts
        Пожалуйста smiley
          • 22181
          • 26 Posts
          Чето у меня ни в какую не работает, код с первого поста работает, а последний нет.
          Кошелек то дайте )
            • 29487
            • 385 Posts
            Проверь, стоит ли галочка на OnWebPagePrerender и стоят ли в шаблоне разделители
            <!-- content -->
            [*content*]
            <!-- content -->
              • 32163
              • 33 Posts
              А если, например, я захочу чтобы текст документа разбивался не автоматически , а редактор сайта мог разбивать страницу вставляя разделитель <!--pagebreak--> в редакторе после нужных абзацев? Честно говоря, пробовал переделать Ваш вариант, но он так и не завелся. Подобные решения на форуме есть, но у всех одна проблема - они не работают, если документ является кэшированным.
                • 18783
                • 9 Posts
                Всем привет!
                Если ли какие-либо продвижения в этом направлении ?
                Нужно решение, которое могло бы разбивать контент. Причём разбивать его в тех местах,
                где стоит специальная метка, указанная в одном из параметров. ну и чтобы всё работало,
                особенно с кэшируемыми документами. grin
                  • 29487
                  • 385 Posts
                  Чтобы разбивать вручную этим плагином, нужно прописать
                  $delimiter= ’<!-- break -->’;
                  $count_delimiter_per_page=1;
                  и в начале текста поставить один разделитель
                    • 274
                    • 108 Posts
                    Всем привет, в modX я еще чайник), и поповуду плагина AutoSplitBigArticle у меня возник вопросы, я создан плагин, поставил галочки
                    OnLoadWebDocument и OnWebPagePrerender. Дальше не могу понять где именно написать
                    <!-- content -->
                    [*content*]
                    <!-- content -->
                    ТО есть в самом шаблоне тоесть в коде или где редактор ввода у страницы?
                    и хочется уточнить
                    может ли плагин такое сделать Есть документ содержит большое количество информации, как вывести его на несколко страниц, то есть место вывода в шаблоне ограничено размером 500 на 700, то есть как сделать несколько страниц типа " 1 2 3 4 5 далее "????
                      • 29487
                      • 385 Posts
                      В шаблоне станицы.
                      Плагин именно это и делает - разбивает большой текст на страницы.