<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Блог Арт-директора &#187; jquery</title>
	<atom:link href="http://x3.ekwo.dp.ua/tag/jquery/feed/" rel="self" type="application/rss+xml" />
	<link>http://x3.ekwo.dp.ua</link>
	<description>Just another WordPress site</description>
	<lastBuildDate>Tue, 27 Sep 2011 04:58:41 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Постраничный вывод текста на JQuery и PHP</title>
		<link>http://x3.ekwo.dp.ua/2009/07/18/postranichnyj-vyvod-teksta-na-jquery-i-php/</link>
		<comments>http://x3.ekwo.dp.ua/2009/07/18/postranichnyj-vyvod-teksta-na-jquery-i-php/#comments</comments>
		<pubDate>Sat, 18 Jul 2009 18:44:56 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[разработка]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://x3.ekwo.dp.ua/?p=259</guid>
		<description><![CDATA[Итак&#8230; Задача таже, что и в прошлой статье, но теперь подключим возможности PHP. Мы все так же не можем переключать страницы при помощи PHP, и нам нужно как-то обрабатывать их на сервере. Реализация снова очень проста. Определяем сколько символов нам нужно выводить на странице, и разбиваем весь текст на подблоки при помощи PHP-функции «умной» разбивки [...]]]></description>
			<content:encoded><![CDATA[<p>Итак&#8230; Задача таже, что и в <a href="http://x3.ekwo.dp.ua/2009/07/16/postranichnyj-vyvod-teksta-na-jquery/" target="_blank">прошлой статье</a>, но теперь подключим возможности PHP.</p>
<p>Мы все так же не можем переключать страницы при помощи PHP, и нам нужно как-то обрабатывать их на сервере.</p>
<p>Реализация снова очень проста. Определяем сколько символов нам нужно выводить на странице, и разбиваем весь текст на подблоки при помощи PHP-функции «умной» разбивки <a href="http://us2.php.net/manual/en/function.wordwrap.php" target="_blank">wordwrap</a> (умной, потому, что она может разбивать не посреди слова, а после конца слова).<br />
<span id="more-259"></span>[ad#Google Adsense]<br />
Итак:</p>
<p>[sourcecode language="php"]</p>
<p><?php</p>
<p>//$text - здесь лежит весь текст</p>
<p>if(strlen($text)>2000) //проверяем, нужно ли разбивать</p>
<p>{</p>
<p>//нужно</p>
<p>$text2=&#8217;
<ul id="pages2">
<li class="chili">&#8216;;</p>
<p>$text2.=wordwrap($text, 2000, &#8216;</li>
<li class="split">&#8216;,false);
<p>$text2.=&#8221;</ul>
<p>&#8220;;</p>
<p>$text=$text2;</p>
<p>}<br />
echo $text;</p>
<p>?></p>
<p>[/sourcecode]</p>
<p>Поясню. Если текст нужно разбивать (в нем больше, чем определенное количество символов), то обрамляем текст тэгами &lt;ul&gt; и разбиваем текст на элементы списка.</p>
<p>Теперь, все еще проще на JS. Мы просто расположим все элементы списка в горизонтальный ряд и будем их прокручивать (такие-себе странички).</p>
<p>[sourcecode language="javascript"]</p>
<p>$(document).ready(function(){</p>
<p>$(&#8216;#pageWrap&#8217;).css(&#8216;overflow&#8217;,'hidden&#8217;).css(&#8216;position&#8217;,'relative&#8217;);</p>
<p>$(&#8216;#pages2&#8242;).css(&#8216;width&#8217;,$(&#8216;#pages2&#8242;).children().size()*700).css(&#8216;position&#8217;,'absolute&#8217;);</p>
<p>$(&#8216;#pages2 li.chili&#8217;).css(&#8216;float&#8217;,'left&#8217;).css(&#8216;width&#8217;,&#8217;700px&#8217;).css(&#8216;list-style&#8217;,'none&#8217;).css(&#8216;margin&#8217;,&#8217;0px&#8217;);</p>
<p>var pagecount=$(&#8216;#pages2&#8242;).children().size();</p>
<p>var text=&#8221;;</p>
<p>for (i=0;i
<pagecount;i++)</p>
<p>{</p>
<p>if(i==0)cp='curPage';else cp='';</p>
<p>var a="<a class='pagination "+cp+"' id='"+i+"_page' href='javascript: void(0)' onclick='showPage("+i+");'>&#8220;+(i+1)+&#8221;</a>&#8220;;</p>
<p>text+=a;</p>
<p>}</p>
<p>if(pagecount<2)$('#pages').css('display','none');</p>
<p>$('#pages').append(text);</p>
<p>});</p>
<p>[/sourcecode]</p>
<p>Не забудем про функцию «перелистывания страниц»:</p>
<p>[sourcecode language="javascript"]</p>
<p>function showPage(i)</p>
<p>{</p>
<p>$('#pages2').css('left',-i*700);</p>
<p>$('.pagination').removeClass('curPage');</p>
<p>$('#'+i+'_page').addClass('curPage');</p>
<p>}</p>
<p>[/sourcecode]</p>
<p>Верстка в этом варианте такая:</p>
<p>[sourcecode language="html"]</p>
<div id='pageWrap'>
<ul id='pages2'>
<p><!--Генерируется на PHP--></p>
</ul>
</div>
<div id='pages'></div>
<p>[/sourcecode]</p>
<p>Все работает. Для работы нужен JQuery.</p>
<p>Торговые <a href="http://www.fxequity.ru/" target="_blank">стратегии форекс</a> на основе индикатора опционных уровней</p>
<p>&nbsp;<br />
<a href="http://amurs.com.ua/strap-ons/" target="_blank">мужской страпон</a></p>
]]></content:encoded>
			<wfw:commentRss>http://x3.ekwo.dp.ua/2009/07/18/postranichnyj-vyvod-teksta-na-jquery-i-php/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Постраничный вывод текста на JQuery</title>
		<link>http://x3.ekwo.dp.ua/2009/07/16/postranichnyj-vyvod-teksta-na-jquery/</link>
		<comments>http://x3.ekwo.dp.ua/2009/07/16/postranichnyj-vyvod-teksta-na-jquery/#comments</comments>
		<pubDate>Thu, 16 Jul 2009 11:08:57 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[разработка]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://x3.ekwo.dp.ua/?p=237</guid>
		<description><![CDATA[Столкнулись с такой задачей: дизайн сайта ограничивает количество текста в высоту (на сайте текст выводится на листики А4, которые по задумке должны иметь настоящие пропорции, так что «растягивать» их в высоту нельзя. Делать постраничный вывод текст на PHP — накладно из-за и без того сложной структуры URL. Решили делать на Javascript. Идея: Определить максимально допустимую [...]]]></description>
			<content:encoded><![CDATA[<p>Столкнулись с такой задачей: дизайн сайта ограничивает количество текста в высоту (на сайте текст выводится на листики А4, которые по задумке должны иметь настоящие пропорции, так что «растягивать» их в высоту нельзя.</p>
<p>Делать постраничный вывод текст на PHP — накладно из-за и без того сложной структуры URL. Решили делать на Javascript.</p>
<h2>Идея:</h2>
<ul>
<li>Определить максимально допустимую высоту блока (без растяжения по высоте)</li>
<li>Разбить высоту блока с текстом на подблоки допустимой высоты</li>
<li>Показывать необходимый подблок, остальные скрывать</li>
</ul>
<p>Все просто. И занимает не так уж много времени в реализации.</p>
<h2>Реализация:</h2>
<p>Есть 2 пути реализации:</p>
<ol>
<li>Действительно скрывать не нужные блоки через значение display</li>
<li>Сделать что-то вроде видоискателя проектора, и проходящего мимо него пленки, когда у нас есть<img class="size-full wp-image-238 alignright" title="Постраничный вывод на JQuery" src="http://x3.ekwo.dp.ua/wp-content/uploads/2009/07/jqp1.jpg" alt="2-й вариант отображения блока" width="200" height="100" /> 2 блока: контайнер текста и контейнер контейнера. Мы просто сдвигаем контейнер текста внутри контейнера контейнера, тем самым обнажая нужную часть блока.</li>
</ol>
<p>Мы выбрали второй способ (он быстрее выполняется на клиенте, а значит больше нам подходит).</p>
<p><span id="more-237"></span></p>
<p>Итак, у нас должен быть такой html:</p>
<p>[sourcecode language="html"]</p>
<div id=pagewrap><!--Контейнер контейнера (объектив)--></p>
<div id=page> <!--Здесь полный текст, который нужно вывести постранично --> </div>
</div>
<div id=pages><!--Блок, в который мы добавим ссылки-переключатели страниц--></div>
<p>[/sourcecode]</p>
<p>Теперь Javascript:</p>
<p>[sourcecode language="javascript"]</p>
<p>$(document).ready(function(){</p>
<p>[/sourcecode]</p>
<p>&#8230;говорим, чтоб выполнилось сразу после полной загрузки страницы&#8230;</p>
<p>[sourcecode language="javascript"]</p>
<p>$(&#8216;#pageWrap&#8217;).css(&#8216;overflow&#8217;,'hidden&#8217;).css(&#8216;position&#8217;,'relative&#8217;);</p>
<p>$(&#8216;#pager&#8217;).css(&#8216;position&#8217;,'absolute&#8217;).css(&#8216;left&#8217;,&#8217;0px&#8217;).css(&#8216;top&#8217;,&#8217;0px&#8217;);</p>
<p>[/soursecode]</p>
<p>&#8230;устанавливаем css для контейнера с текстом и объектива&#8230;</p>
<p>Объектив должен скрывать все, что вылазит за края (overflow: hidden), а контейнер текста должаен быть абсолютно позиционирован, чтобы «ползать» по всему объективу.</p>
<p>[sourcecode language="javascript"]</p>
<p>var pages=$(&#8216;#pager&#8217;).height()/pageHeight;</p>
<p>totalPages=pages;</p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 876px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">[/soursecode]</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 876px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">[sourcecode language="javascript"]</div>
<p>[/soursecode]</p>
<p>&#8230;считаем количество страниц&#8230;</p>
<p>[sourcecode language="javascript"]</p>
<p>for(i=0;i<=pages;i++)</p>
<p>{</p>
<p>var a=document.createElement('a');</p>
<p>a.href='#';</p>
<p>if(i==0) a.className='curPage ';</p>
<p>a.onclick=function()</p>
<p>{</p>
<p>showPage(this.id.replace('_page',''));</p>
<p>}</p>
<p>a.id=i+'_page';</p>
<p>a.innerHTML=i+1;</p>
<p>a.className+=' pagination';</p>
<p>$('#pages').append(a);</p>
<p>}</p>
<p>[/soursecode]</p>
<p>...создаем ссылки на страницы...</p>
<p>[sourcecode language="javascript"]</p>
<p>});</p>
<p>[/sourcecode]</p>
<p>Так. Осталась только функция showPage(i), которая смещает контейнер текста относительно объектива.</p>
<p>[sourcecode language="javascript"]</p>
<p>function showPage(i)</p>
<p>{</p>
<p>$('#pager').css('top',-i*pageHeight);</p>
<p>$('.pagination').removeClass('curPage');</p>
<p>$('#'+i+'_page').addClass('curPage');</p>
<p>curPage=i;</p>
<p>}</p>
<p>[/sourcecode]</p>
<p>Здесь мы просто умножаем максимально допустимую высоту контейнера текста на номер страницы i и смещаем контейнер текста вверх на получившееся количество пикселов.</p>
<p>Да. чтоб все работало мы еще использовали вот эти глобальные переменные:</p>
<p>[sourcecode language="javascript"]</p>
<p>var pageHeight=200;</p>
<p>var totalPages=0;</p>
<p>var curPage=0;</p>
<p>[/sourcecode]</p>
<p>В конце поста можно скачать полный пример.</p>
<p>Решение, конечно, не доработанное, так-как некоторые строчки выводятся половинками (половина на 1-й страница, половина — на 2-й), но это можно решить внедрив систему подсчета высоты контейнера и переноса строки на следующую страницу.</p>
<p>Подсчет высоты котейнера, например:</p>
<p>[sourcecode language="javascript"]</p>
<p>$('#pager').children().each(function(i){</p>
<p>var pageHeight=0;</p>
<p>var z=0;</p>
<p>//Считаем высоту контейнеров</p>
<p>if(i>lastElem &amp;amp;amp;amp;amp;amp;amp;amp;&amp;amp;amp;amp;amp;amp;amp;amp; i<elemCount)</p>
<p>{</p>
<p>while(pageHeight<200)</p>
<p>{</p>
<p>pageHeight+=$(this).height();</p>
<p>z++;</p>
<p>}</p>
<p>alert(pageHeight+' '+z);</p>
<p>curCount=z;</p>
<p>lastElem+=curCount;</p>
<p>return false;</p>
<p>}</p>
<p>[/sourcecode]</p>
<p>И вот пример: <a href="http://x3.ekwo.dp.ua/url.php?u=http://files.getdropbox.com/u/103435/jquery.pagination.test.html" target="_blank">Скачать</a><br />
<br />
Для справки: <a href="http://rce.su/winhex/" target="_blank">WinHex</a> &#8211; hex editor, а если по-русски, шестнадцатиричный редактор<br />
<a href="http://www.irpu.ru" target="_blank">онлайн игры бесплатно</a><br /></p>
]]></content:encoded>
			<wfw:commentRss>http://x3.ekwo.dp.ua/2009/07/16/postranichnyj-vyvod-teksta-na-jquery/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

