<?xml version="1.0" encoding="utf-8"?>

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
	<channel>
		<title>Форум программистов и сисадминов Киберфорум - Блоги - Блог форумчанина long399. Автор long399</title>
		<link>https://www.cyberforum.ru/blogs/419889/</link>
		<description>КиберФорум - форум программистов, системных администраторов, администраторов баз данных, компьютерный форум, форум по электронике и бытовой технике, обсуждение софта. Бесплатная помощь в решении задач по программированию и наукам, решение проблем с компьютером, операционными системам</description>
		<language>ru</language>
		<lastBuildDate>Sun, 06 Sep 2026 21:03:27 GMT</lastBuildDate>
		<generator>vBulletin</generator>
		<ttl>60</ttl>
		<image>
			<url>https://www.cyberforum.ru//cyberstatic.net/images/misc/rss.jpg</url>
			<title>Форум программистов и сисадминов Киберфорум - Блоги - Блог форумчанина long399. Автор long399</title>
			<link>https://www.cyberforum.ru/blogs/419889/</link>
		</image>
		<item>
			<title>Обложки альбомов rock/metal групп, как отдельный вид искусства (часть 3)</title>
			<link>https://www.cyberforum.ru/blogs/419889/8230.html</link>
			<pubDate>Wed, 03 Jul 2024 06:20:07 GMT</pubDate>
			<description>Новая порция оригинальных и красивых обложек альбомов. 
 
Предыдущие части: 
* часть 1...</description>
			<content:encoded><![CDATA[<div>Новая порция оригинальных и красивых обложек альбомов.<br />
<br />
Предыдущие части:<ul><li><a href="https://www.cyberforum.ru/blogs/419889/blog6471.html">часть 1</a>;</li>
<li><a href="https://www.cyberforum.ru/blogs/419889/blog7065.html">часть 2</a>.</li>
</ul><br />
<table cellspacing="1" cellpadding="5" class="stg_table tborder sortable" id="sorttable9219" style="width:100%; "><thead class="thead"><tr><th>#</th><th>Группа</th><th>Жанр</th><th>Страна</th><th>Альбом</th><th>Обложка</th></tr></thead><tbody><tr class="alt2"><td>1</td><td><div align="center"><b>Caliban</b></div></td><td><div align="center"><u>metalcore</u></div></td><td><div align="center">Германия</div></td><td><div align="center"><i>I Am Nemesis (2012)</i></div></td><td><a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=8814&amp;d=1719975916" rel="Lightbox" id="attachment8814" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=8814&amp;thumb=1&amp;d=1719975916" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: i am nemesis.jpg
Просмотров: 275
Размер:	271.9 Кб
ID:	8814" style="margin: 5px" /></a></td></tr><tr class="alt1"><td>2</td><td><div align="center"><b>Burzum</b></div></td><td><div align="center"><u>atmospheric black metal</u></div></td><td><div align="center">Норвегия</div></td><td><div align="center"><i>Filosofem (1996)</i></div></td><td><a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=8815&amp;d=1719975916" rel="Lightbox" id="attachment8815" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=8815&amp;thumb=1&amp;d=1719975916" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: filosofem.jpg
Просмотров: 284
Размер:	864.6 Кб
ID:	8815" style="margin: 5px" /></a></td></tr><tr class="alt2"><td>3</td><td><div align="center"><b>Septicflesh</b></div></td><td><div align="center"><u>symphonic death metal</u></div></td><td><div align="center">Греция</div></td><td><div align="center"><i>Sumerian Daemons (2003)</i></div></td><td><a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=8816&amp;d=1719976460" rel="Lightbox" id="attachment8816" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=8816&amp;thumb=1&amp;d=1719976460" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: sumerian_daemons.jpg
Просмотров: 392
Размер:	346.3 Кб
ID:	8816" style="margin: 5px" /></a></td></tr><tr class="alt1"><td>4</td><td><div align="center"><b>Starset</b></div></td><td><div align="center"><u>alternative</u></div></td><td><div align="center">США</div></td><td><div align="center"><i>Satellite (acoustic version) (2018)</i></div></td><td><a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=8817&amp;d=1719977064" rel="Lightbox" id="attachment8817" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=8817&amp;thumb=1&amp;d=1719977064" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: satellite.jpeg
Просмотров: 226
Размер:	188.4 Кб
ID:	8817" style="margin: 5px" /></a></td></tr><tr class="alt2"><td>5</td><td><div align="center"><b>Tokio Hotel</b></div></td><td><div align="center"><u>pop-rock</u></div></td><td><div align="center">Германия</div></td><td><div align="center"><i>Love Who Loves You Back (2014)</i></div></td><td><a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=8818&amp;d=1719977250" rel="Lightbox" id="attachment8818" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=8818&amp;thumb=1&amp;d=1719977250" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: love_who_loves_you_back.jpeg
Просмотров: 224
Размер:	172.7 Кб
ID:	8818" style="margin: 5px" /></a></td></tr><tr class="alt1"><td>6</td><td><div align="center"><b>Megaherz</b></div></td><td><div align="center"><u>industrial metal</u></div></td><td><div align="center">Германия</div></td><td><div align="center"><i>Gegen den Wind (2013)</i></div></td><td><a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=8819&amp;d=1719977666" rel="Lightbox" id="attachment8819" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=8819&amp;thumb=1&amp;d=1719977666" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: gegen_den_wind.jpg
Просмотров: 184
Размер:	188.5 Кб
ID:	8819" style="margin: 5px" /></a></td></tr><tr class="alt2"><td>7</td><td><div align="center"><b>Skillet</b></div></td><td><div align="center"><u>christian rock</u></div></td><td><div align="center">США</div></td><td><div align="center"><i>Rise (single) (2013)</i></div></td><td><a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=8820&amp;d=1719977919" rel="Lightbox" id="attachment8820" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=8820&amp;thumb=1&amp;d=1719977919" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: rise.jpg
Просмотров: 201
Размер:	307.3 Кб
ID:	8820" style="margin: 5px" /></a></td></tr><tr class="alt1"><td>8</td><td><div align="center"><b>No Second Chance</b></div></td><td><div align="center"><u>beatdown hardcore</u></div></td><td><div align="center">Великобритания</div></td><td><div align="center"><i>Cursed (2015)</i></div></td><td><a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=8821&amp;d=1719980404" rel="Lightbox" id="attachment8821" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=8821&amp;thumb=1&amp;d=1719980404" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: cursed.jpg
Просмотров: 237
Размер:	236.0 Кб
ID:	8821" style="margin: 5px" /></a></td></tr><tr class="alt2"><td>9</td><td><div align="center"><b>[AMATORY]</b></div></td><td><div align="center"><u>metalcore</u></div></td><td><div align="center">Россия</div></td><td><div align="center"><i>Неизбежность (2004)</i></div></td><td><a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=8822&amp;d=1719981384" rel="Lightbox" id="attachment8822" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=8822&amp;thumb=1&amp;d=1719981384" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: неизбежность.jpeg
Просмотров: 208
Размер:	272.7 Кб
ID:	8822" style="margin: 5px" /></a></td></tr><tr class="alt1"><td>10</td><td><div align="center"><b>Rammstein</b></div></td><td><div align="center"><u>industrial metal</u></div></td><td><div align="center">Германия</div></td><td><div align="center"><i>Keine Lust (2005)</i></div></td><td><a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=8823&amp;d=1719985712" rel="Lightbox" id="attachment8823" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=8823&amp;thumb=1&amp;d=1719985712" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: keine_lust.jpg
Просмотров: 200
Размер:	80.2 Кб
ID:	8823" style="margin: 5px" /></a></td></tr><tr class="alt2"><td>11</td><td><div align="center"><b>When Nothing Remains</b></div></td><td><div align="center"><u>melodic death metal/doom metal</u></div></td><td><div align="center">Швеция</div></td><td><div align="center"><i>In Memoriam (2016)</i></div></td><td><a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=8824&amp;d=1719985986" rel="Lightbox" id="attachment8824" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=8824&amp;thumb=1&amp;d=1719985986" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: in_memoriam.jpg
Просмотров: 216
Размер:	133.6 Кб
ID:	8824" style="margin: 5px" /></a></td></tr><tr class="alt1"><td>12</td><td><div align="center"><b>One Morning Left</b></div></td><td><div align="center"><u>post-hardcore</u></div></td><td><div align="center">Финляндия</div></td><td><div align="center"><i>The Bree-Teenz (2011)</i></div></td><td><a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=8825&amp;d=1719986175" rel="Lightbox" id="attachment8825" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=8825&amp;thumb=1&amp;d=1719986175" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: the_bree_teenz.jpeg
Просмотров: 211
Размер:	367.3 Кб
ID:	8825" style="margin: 5px" /></a></td></tr><tr class="alt2"><td>13</td><td><div align="center"><b>Three Days Grace</b></div></td><td><div align="center"><u>alternative</u></div></td><td><div align="center">Канада</div></td><td><div align="center"><i>Human Race (2015)</i></div></td><td><a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=8826&amp;d=1719986903" rel="Lightbox" id="attachment8826" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=8826&amp;thumb=1&amp;d=1719986903" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: human_race.jpeg
Просмотров: 215
Размер:	255.7 Кб
ID:	8826" style="margin: 5px" /></a></td></tr><tr class="alt1"><td>14</td><td><div align="center"><b>Low Roar</b></div></td><td><div align="center"><u>indie rock</u></div></td><td><div align="center">США</div></td><td><div align="center"><i>Low Roar (2011)</i></div></td><td><a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=8827&amp;d=1719987187" rel="Lightbox" id="attachment8827" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=8827&amp;thumb=1&amp;d=1719987187" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: low_roar.jpg
Просмотров: 201
Размер:	83.8 Кб
ID:	8827" style="margin: 5px" /></a></td></tr><tr class="alt2"><td>15</td><td><div align="center"><b>Catacombs</b></div></td><td><div align="center"><u>funeral doom metal</u></div></td><td><div align="center">США</div></td><td><div align="center"><i>In the Depths of R'lyeh (2006)</i></div></td><td><a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=8828&amp;d=1719987533" rel="Lightbox" id="attachment8828" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=8828&amp;thumb=1&amp;d=1719987533" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: rlyeh.jpg
Просмотров: 185
Размер:	187.4 Кб
ID:	8828" style="margin: 5px" /></a></td></tr></tbody></table></div>

]]></content:encoded>
			<dc:creator>long399</dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/419889/8230.html</guid>
		</item>
		<item>
			<title>Как жадная загрузка в Yii2 помогла мне оптимизировать рендер тяжелой страницы</title>
			<link>https://www.cyberforum.ru/blogs/419889/8282.html</link>
			<pubDate>Thu, 12 Oct 2023 07:00:12 GMT</pubDate>
			<description>Столкнулся на работе с одним разделом сайта, в котором выводится несколько огромнейших таблиц....</description>
			<content:encoded><![CDATA[<div>Столкнулся на работе с одним разделом сайта, в котором выводится несколько огромнейших таблиц. Использовать пагинацию там нельзя, так как данный раздел проверяется Рособрнадзором (выполняется автоматический мониторинг специальных тегов разметки), и все данные должны быть отображены на одной странице. Этих данных очень много, количество запросов к БД огромное. Имеется кеширование контента страницы, но несмотря на это, все равно очень неприятно ждать рендер страницы, когда время жизни прежнего кеша заканчивается.<br />
<br />
Приведу пример части данных, которые выводятся в этом злополучном разделе сайта. Речь пойдет об образовательных программах.<br />
<br />
Образовательные программы имеют связи с дисциплинами.<br />
<div class="codeblock"><table class="php"><thead><tr><td colspan="2" id="106101454"  class="head">PHP</td></tr></thead><tbody><tr class="li1"><td><div id="106101454" style="height: 222px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td class="de1"><pre class="de1"><span class="coMULTI">/* Program.php class */</span>
&nbsp;
<span class="co4">/**</span>
<span class="co4">&nbsp;* Gets query for [[Discipline]].</span>
<span class="co4">&nbsp;*</span>
<span class="co4">&nbsp;* @return \yii\db\ActiveQuery</span>
<span class="co4">&nbsp;*/</span>
<span class="kw2">public</span> <span class="kw2">function</span> getDisciplines<span class="br0">&#40;</span><span class="br0">&#41;</span>
<span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw1">return</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">hasMany</span><span class="br0">&#40;</span>Discipline<span class="sy0">::</span><span class="kw2">class</span><span class="sy0">,</span> <span class="br0">&#91;</span><span class="st_h">'id'</span> <span class="sy0">=&gt;</span> <span class="st_h">'id_disc'</span><span class="br0">&#93;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">-&gt;</span><span class="me1">viaTable</span><span class="br0">&#40;</span><span class="st_h">'program_disciplines'</span><span class="sy0">,</span> <span class="br0">&#91;</span><span class="st_h">'id_program'</span> <span class="sy0">=&gt;</span> <span class="st_h">'id'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="br0">&#125;</span></pre></td></tr></table></div></td></tr></tbody></table></div>Дисциплины имеют связи с файлами.<br />
<div class="codeblock"><table class="php"><thead><tr><td colspan="2" id="646830808"  class="head">PHP</td></tr></thead><tbody><tr class="li1"><td><div id="646830808" style="height: 222px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td class="de1"><pre class="de1"><span class="coMULTI">/* Discipline.php class */</span>
&nbsp;
<span class="co4">/**</span>
<span class="co4">&nbsp;* Gets query for [[File]].</span>
<span class="co4">&nbsp;*</span>
<span class="co4">&nbsp;* @return \yii\db\ActiveQuery</span>
<span class="co4">&nbsp;*/</span>
<span class="kw2">public</span> <span class="kw2">function</span> getFiles<span class="br0">&#40;</span><span class="br0">&#41;</span>
<span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw1">return</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">hasMany</span><span class="br0">&#40;</span><span class="kw3">File</span><span class="sy0">::</span><span class="kw2">class</span><span class="sy0">,</span> <span class="br0">&#91;</span><span class="st_h">'id'</span> <span class="sy0">=&gt;</span> <span class="st_h">'id_file'</span><span class="br0">&#93;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">-&gt;</span><span class="me1">viaTable</span><span class="br0">&#40;</span><span class="st_h">'discipline_files'</span><span class="sy0">,</span> <span class="br0">&#91;</span><span class="st_h">'id_disc'</span> <span class="sy0">=&gt;</span> <span class="st_h">'id'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="br0">&#125;</span></pre></td></tr></table></div></td></tr></tbody></table></div>Файлы имеют связи с информацией об электронной цифровой подписи (ЭЦП).<br />
<div class="codeblock"><table class="php"><thead><tr><td colspan="2" id="691425149"  class="head">PHP</td></tr></thead><tbody><tr class="li1"><td><div id="691425149" style="height: 206px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="de1"><pre class="de1"><span class="coMULTI">/* File.php class */</span>
&nbsp;
<span class="co4">/**</span>
<span class="co4">&nbsp;* Gets query for [[EdsInfo]].</span>
<span class="co4">&nbsp;*</span>
<span class="co4">&nbsp;* @return \yii\db\ActiveQuery</span>
<span class="co4">&nbsp;*/</span>
<span class="kw2">public</span> <span class="kw2">function</span> getEdsInfo<span class="br0">&#40;</span><span class="br0">&#41;</span>
<span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw1">return</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">hasOne</span><span class="br0">&#40;</span>EdsInfo<span class="sy0">::</span><span class="kw2">class</span><span class="sy0">,</span> <span class="br0">&#91;</span><span class="st_h">'id_file'</span> <span class="sy0">=&gt;</span> <span class="st_h">'id'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="br0">&#125;</span></pre></td></tr></table></div></td></tr></tbody></table></div>И наконец, информация об ЭЦП имеет связи с подписантами.<br />
<div class="codeblock"><table class="php"><thead><tr><td colspan="2" id="647431109"  class="head">PHP</td></tr></thead><tbody><tr class="li1"><td><div id="647431109" style="height: 206px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="de1"><pre class="de1"><span class="coMULTI">/* EdsInfo.php class */</span>
&nbsp;
<span class="co4">/**</span>
<span class="co4">&nbsp;* Gets query for [[Signatory]].</span>
<span class="co4">&nbsp;*</span>
<span class="co4">&nbsp;* @return \yii\db\ActiveQuery</span>
<span class="co4">&nbsp;*/</span>
<span class="kw2">public</span> <span class="kw2">function</span> getSignatory<span class="br0">&#40;</span><span class="br0">&#41;</span>
<span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw1">return</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">hasOne</span><span class="br0">&#40;</span>Signatory<span class="sy0">::</span><span class="kw2">class</span><span class="sy0">,</span> <span class="br0">&#91;</span><span class="st_h">'id'</span> <span class="sy0">=&gt;</span> <span class="st_h">'id_signatory'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="br0">&#125;</span></pre></td></tr></table></div></td></tr></tbody></table></div>А примерно так выглядел legacy-код по выводу информации об образовательных программах:<br />
<div class="codeblock"><table class="php"><thead><tr><td colspan="2" id="276195154"  class="head">PHP</td></tr></thead><tbody><tr class="li1"><td><div id="276195154" style="height: 254px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
</pre></td><td class="de1"><pre class="de1"><span class="coMULTI">/* controller code */</span>
<span class="re0">$programs</span> <span class="sy0">=</span> Program<span class="sy0">::</span><span class="me2">findAll</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
<span class="coMULTI">/* view code */</span>
<span class="kw1">foreach</span> <span class="br0">&#40;</span><span class="re0">$programs</span> <span class="kw1">as</span> <span class="re0">$program</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw1">foreach</span> <span class="br0">&#40;</span><span class="re0">$program</span><span class="sy0">-&gt;</span><span class="me1">disciplines</span> <span class="kw1">as</span> <span class="re0">$discipline</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">// дисциплины</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">foreach</span> <span class="br0">&#40;</span><span class="re0">$discipline</span><span class="sy0">-&gt;</span><span class="me1">files</span> <span class="kw1">as</span> <span class="re0">$file</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> &nbsp; &nbsp; &nbsp;<span class="co1">// файлы дисциплин</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$edsInfo</span> <span class="sy0">=</span> <span class="re0">$file</span><span class="sy0">-&gt;</span><span class="me1">edsInfo</span><span class="sy0">;</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// информация об ЭЦП</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$signatory</span> <span class="sy0">=</span> <span class="re0">$edsInfo</span><span class="sy0">-&gt;</span><span class="me1">signatory</span><span class="sy0">;</span> &nbsp; &nbsp; &nbsp; &nbsp;<span class="co1">// подписант</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// вывод информации о дисциплинах образовательной программы и информации об ЭЦП</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
<span class="br0">&#125;</span></pre></td></tr></table></div></td></tr></tbody></table></div>Количество образовательных программ достаточно большое, и вложенные циклы, в которых идет получение связанных данных отрабатывают долго.<br />
<br />
Помогла <a rel="nofollow noopener noreferrer" href="https://www.yiiframework.com/doc/guide/2.0/ru/db-active-record#lazy-eager-loading" target="_blank" title="https://www.yiiframework.com/doc/guide/2.0/ru/db-active-record#lazy-eager-loading">жадная загрузка</a>. Модели образовательных программ я начал получать из БД сразу с необходимыми связями (вложенными) и это значительно ускорило рендер информации в данном разделе.<br />
<div class="codeblock"><table class="php"><thead><tr><td colspan="2" id="392494674"  class="head">PHP</td></tr></thead><tbody><tr class="li1"><td><div id="392494674" style="height: 110px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
</pre></td><td class="de1"><pre class="de1"><span class="coMULTI">/* controller code */</span>
<span class="re0">$programs</span> <span class="sy0">=</span> Program<span class="sy0">::</span><span class="me2">find</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">with</span><span class="br0">&#40;</span><span class="st_h">'disciplines.files.edsInfo.signatory'</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">all</span><span class="br0">&#40;</span><span class="br0">&#41;</span>
&nbsp;
<span class="coMULTI">/* view code */</span>
<span class="co1">// цикл из примера выше остался без изменений</span></pre></td></tr></table></div></td></tr></tbody></table></div>При таком подходе связанные данные сразу выбираются из БД одним запросом <i>WHERE IN</i> и заносятся в модель, в специальное <a rel="nofollow noopener noreferrer" href="https://github.com/yiisoft/yii2/blob/master/framework/db/BaseActiveRecord.php#L97" target="_blank" title="https://github.com/yiisoft/yii2/blob/master/framework/db/BaseActiveRecord.php#L97">приватное свойство</a>. Поэтому не потребуется делать множество запросов на их получение в цикле.<br />
<br />
Т.е. мы получим из БД образовательные программы, для каждой из которых при этом будет получен список дисциплин. Для дисциплин, в свою очередь, будут получены файлы, для файлов - информация об ЭЦП, для информации об ЭЦП - подписант.<br />
<br />
Еще с помощью профилировщика я обнаружил в некоторых моделях неоптимальное использование отношений. Например:<br />
<div class="codeblock"><table class="php"><thead><tr><td colspan="2" id="134855919"  class="head">PHP</td></tr></thead><tbody><tr class="li1"><td><div id="134855919" style="height: 350px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
</pre></td><td class="de1"><pre class="de1"><span class="coMULTI">/* Program.php class */</span>
&nbsp;
<span class="co4">/**</span>
<span class="co4">&nbsp;* Gets query for [[Direction]].</span>
<span class="co4">&nbsp;*</span>
<span class="co4">&nbsp;* @return \yii\db\ActiveQuery</span>
<span class="co4">&nbsp;*/</span>
<span class="kw2">public</span> <span class="kw2">function</span> getDirection<span class="br0">&#40;</span><span class="br0">&#41;</span>
<span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw1">return</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">hasOne</span><span class="br0">&#40;</span>Direction<span class="sy0">::</span><span class="kw2">class</span><span class="sy0">,</span> <span class="br0">&#91;</span><span class="st_h">'id'</span> <span class="sy0">=&gt;</span> <span class="st_h">'id_direction'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="br0">&#125;</span>
&nbsp;
<span class="co4">/**</span>
<span class="co4">&nbsp;* Getter for Direction name.</span>
<span class="co4">&nbsp;*</span>
<span class="co4">&nbsp;* @return string</span>
<span class="co4">&nbsp;*/</span>
<span class="kw2">public</span> <span class="kw2">function</span> getDirectionName<span class="br0">&#40;</span><span class="br0">&#41;</span>
<span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">direction</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">direction</span><span class="sy0">-&gt;</span><span class="me1">code</span><span class="sy0">.</span><span class="st_h">' '</span><span class="sy0">.</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">direction</span><span class="sy0">-&gt;</span><span class="me1">name</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp;
&nbsp; &nbsp; <span class="kw1">return</span> <span class="st_h">''</span><span class="sy0">;</span>
<span class="br0">&#125;</span></pre></td></tr></table></div></td></tr></tbody></table></div>В методе <b>getDirectionName()</b> три раза выполняется получение модели <b>Direction</b>! А ведь её можно получить один раз и использовать как будет угодно.<br />
<div class="codeblock"><table class="php"><thead><tr><td colspan="2" id="74440952"  class="head">PHP</td></tr></thead><tbody><tr class="li1"><td><div id="74440952" style="height: 270px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
</pre></td><td class="de1"><pre class="de1"><span class="coMULTI">/* Program.php class */</span>
&nbsp;
<span class="co4">/**</span>
<span class="co4">&nbsp;* Getter for Direction name.</span>
<span class="co4">&nbsp;*</span>
<span class="co4">&nbsp;* @return string</span>
<span class="co4">&nbsp;*/</span>
<span class="kw2">public</span> <span class="kw2">function</span> getDirectionName<span class="br0">&#40;</span><span class="br0">&#41;</span>
<span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$direction</span> <span class="sy0">=</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">direction</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="re0">$direction</span><span class="sy0">-&gt;</span><span class="me1">code</span><span class="sy0">.</span><span class="st_h">' '</span><span class="sy0">.</span><span class="re0">$direction</span><span class="sy0">-&gt;</span><span class="me1">name</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp;
&nbsp; &nbsp; <span class="kw1">return</span> <span class="st_h">''</span><span class="sy0">;</span>
<span class="br0">&#125;</span></pre></td></tr></table></div></td></tr></tbody></table></div>В результате всех манипуляций по оптимизации, удалось ускорить рендер данного раздела примерно в 7-9 раз, чему я был приятно удивлен!<br />
<br />
При работе пользовался профилировщиком <a rel="nofollow noopener noreferrer" href="https://www.php.net/manual/ru/book.xhprof.php" target="_blank" title="https://www.php.net/manual/ru/book.xhprof.php">xhprof</a>, который мне здорово помог найти узкие места и стандартной <a rel="nofollow noopener noreferrer" href="https://github.com/yiisoft/yii2-debug" target="_blank" title="https://github.com/yiisoft/yii2-debug">debug-панелью</a> Yii2.</div>

]]></content:encoded>
			<dc:creator>long399</dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/419889/8282.html</guid>
		</item>
		<item>
			<title>Разработка API в Yii2. Проблемы с загрузкой файлов методом PUT</title>
			<link>https://www.cyberforum.ru/blogs/419889/8099.html</link>
			<pubDate>Mon, 15 May 2023 03:36:34 GMT</pubDate>
			<description>Недавно столкнулся с проблемой при разработке *API* в *Yii2*, которую удалось решить. Хотелось бы...</description>
			<content:encoded><![CDATA[<div>Недавно столкнулся с проблемой при разработке <b>API</b> в <b>Yii2</b>, которую удалось решить. Хотелось бы поделиться. Возможно, у кого-то возникнет аналогичная проблема и ему поможет это решение.<br />
<br />
В моем <b>API</b> происходит работа с файлами. Клиент отправляет запросы на создание, редактирование и удаление диссертаций. Помимо атрибутов диссертации, которые сохраняются в БД, в запросе еще может быть отправлен pdf-файл диссертации.<br />
<br />
При создании записи проблем не возникает. Этот запрос выполняется методом <b>POST</b>.<br />
<br />
<div class="codeblock"><table class="php"><thead><tr><td colspan="2" id="995311263"  class="head">PHP</td></tr></thead><tbody><tr class="li1"><td><div id="995311263" style="height: 350px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
</pre></td><td class="de1"><pre class="de1"><span class="co4">/**</span>
<span class="co4">&nbsp;* Создание модели.</span>
<span class="co4">&nbsp;* @return \app\models\dissers\DissertationFile</span>
<span class="co4">&nbsp;* @throws \yii\web\ServerErrorHttpException</span>
<span class="co4">&nbsp;* @see \yii\rest\CreateAction</span>
<span class="co4">&nbsp;*/</span>
<span class="kw2">public</span> <span class="kw2">function</span> actionCreate<span class="br0">&#40;</span><span class="br0">&#41;</span>
<span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">checkAccess</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">call_user_func</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">checkAccess</span><span class="sy0">,</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">id</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp;
&nbsp; &nbsp; <span class="coMULTI">/* @var $model \app\models\dissers\DissertationFile */</span>
&nbsp; &nbsp; <span class="re0">$model</span> <span class="sy0">=</span> <span class="kw2">new</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">modelClass</span><span class="br0">&#40;</span><span class="br0">&#91;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'scenario'</span> <span class="sy0">=&gt;</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">createScenario</span>
&nbsp; &nbsp; <span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; <span class="re0">$params</span> <span class="sy0">=</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">request</span><span class="sy0">-&gt;</span><span class="me1">getBodyParams</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="re0">$model</span><span class="sy0">-&gt;</span><span class="me1">load</span><span class="br0">&#40;</span><span class="re0">$params</span><span class="sy0">,</span> <span class="st_h">''</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$model</span><span class="sy0">-&gt;</span><span class="me1">save</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// сохранение файла на сервере (work)</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$model</span><span class="sy0">-&gt;</span><span class="me1">uploadFile</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$response</span> <span class="sy0">=</span> Yii<span class="sy0">::</span><span class="re0">$app</span><span class="sy0">-&gt;</span><span class="me1">getResponse</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$response</span><span class="sy0">-&gt;</span><span class="me1">setStatusCode</span><span class="br0">&#40;</span><span class="nu0">201</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$id</span> <span class="sy0">=</span> <span class="kw3">implode</span><span class="br0">&#40;</span><span class="st_h">','</span><span class="sy0">,</span> <span class="re0">$model</span><span class="sy0">-&gt;</span><span class="me1">getPrimaryKey</span><span class="br0">&#40;</span><span class="kw4">true</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$response</span><span class="sy0">-&gt;</span><span class="me1">getHeaders</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">set</span><span class="br0">&#40;</span><span class="st_h">'Location'</span><span class="sy0">,</span> Url<span class="sy0">::</span><span class="me2">toRoute</span><span class="br0">&#40;</span><span class="br0">&#91;</span><span class="st_h">'view'</span><span class="sy0">,</span> <span class="st_h">'id'</span> <span class="sy0">=&gt;</span> <span class="re0">$id</span><span class="br0">&#93;</span><span class="sy0">,</span> <span class="kw4">true</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">elseif</span> <span class="br0">&#40;</span><span class="sy0">!</span><span class="re0">$model</span><span class="sy0">-&gt;</span><span class="me1">hasErrors</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">throw</span> <span class="kw2">new</span> ServerErrorHttpException<span class="br0">&#40;</span><span class="st_h">'Failed to create the object for unknown reason.'</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp;
&nbsp; &nbsp; <span class="kw1">return</span> <span class="re0">$model</span><span class="sy0">;</span>
<span class="br0">&#125;</span></pre></td></tr></table></div></td></tr></tbody></table></div>Мы заносим в БД нужную информацию о диссертации и сохраняем файл на сервере.<br />
<br />
Проблема наблюдается при редактировании записи. Например, мы захотели прикрепить к имеющейся диссертации новый pdf-файл. Этот запрос выполняется методом <b>PUT</b>, как и рекомендовано в статьях и доках (вроде <a rel="nofollow noopener noreferrer" href="https://www.yiiframework.com/doc/guide/2.0/ru/rest-quick-start" target="_blank" title="https://www.yiiframework.com/doc/guide/2.0/ru/rest-quick-start">этой</a>) по <b>REST API</b> в <b>Yii2</b>. В массиве <code class="inlinecode">$_FILES</code> не наблюдается файла, который мы ожидали там увидеть.<br />
<br />
<div class="codeblock"><table class="php"><thead><tr><td colspan="2" id="354327122"  class="head">PHP</td></tr></thead><tbody><tr class="li1"><td><div id="354327122" style="height: 350px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
</pre></td><td class="de1"><pre class="de1"><span class="co4">/**</span>
<span class="co4">&nbsp;* Обновление модели.</span>
<span class="co4">&nbsp;* @param int $id</span>
<span class="co4">&nbsp;* @return \app\models\dissers\Dissertation</span>
<span class="co4">&nbsp;* @throws \yii\web\ServerErrorHttpException</span>
<span class="co4">&nbsp;* @see \yii\rest\UpdateAction</span>
<span class="co4">&nbsp;*/</span>
<span class="kw2">public</span> <span class="kw2">function</span> actionUpdate<span class="br0">&#40;</span><span class="re0">$id</span><span class="br0">&#41;</span>
<span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="coMULTI">/* @var $model \app\models\dissers\DissertationFile */</span>
&nbsp; &nbsp; <span class="re0">$model</span> <span class="sy0">=</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">findModel</span><span class="br0">&#40;</span><span class="re0">$id</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">checkAccess</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">call_user_func</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">checkAccess</span><span class="sy0">,</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">id</span><span class="sy0">,</span> <span class="re0">$model</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp;
&nbsp; &nbsp; <span class="re0">$model</span><span class="sy0">-&gt;</span><span class="me1">scenario</span> <span class="sy0">=</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">updateScenario</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; <span class="re0">$params</span> <span class="sy0">=</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">request</span><span class="sy0">-&gt;</span><span class="me1">getBodyParams</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="re0">$model</span><span class="sy0">-&gt;</span><span class="me1">load</span><span class="br0">&#40;</span><span class="re0">$params</span><span class="sy0">,</span> <span class="st_h">''</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$model</span><span class="sy0">-&gt;</span><span class="me1">save</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">===</span> <span class="kw4">false</span> <span class="sy0">&amp;&amp;</span> <span class="sy0">!</span><span class="re0">$model</span><span class="sy0">-&gt;</span><span class="me1">hasErrors</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">throw</span> <span class="kw2">new</span> ServerErrorHttpException<span class="br0">&#40;</span><span class="st_h">'Failed to update the object for unknown reason.'</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp;
&nbsp; &nbsp; <span class="co1">// сохранение файла на сервере (not work)</span>
&nbsp; &nbsp; <span class="re0">$model</span><span class="sy0">-&gt;</span><span class="me1">uploadFile</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; <span class="kw1">return</span> <span class="re0">$model</span><span class="sy0">;</span>
<span class="br0">&#125;</span></pre></td></tr></table></div></td></tr></tbody></table></div>В моем случае все разрешилось довольно просто, добавлением нескольких строчек в конфиг приложения:<br />
<br />
<div class="codeblock"><table class="php"><thead><tr><td colspan="2" id="842278942"  class="head">PHP</td></tr></thead><tbody><tr class="li1"><td><div id="842278942" style="height: 206px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="de1"><pre class="de1"><span class="kw1">return</span> <span class="br0">&#91;</span>
&nbsp; &nbsp; <span class="sy0">...</span>
&nbsp; &nbsp; <span class="st_h">'components'</span> <span class="sy0">=&gt;</span> <span class="br0">&#91;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'request'</span> <span class="sy0">=&gt;</span> <span class="br0">&#91;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'parsers'</span> <span class="sy0">=&gt;</span> <span class="br0">&#91;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'multipart/form-data'</span> <span class="sy0">=&gt;</span> <span class="st_h">'yii\web\MultipartFormDataParser'</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#93;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#93;</span>
&nbsp; &nbsp; <span class="br0">&#93;</span>
&nbsp; &nbsp; <span class="sy0">...</span>
<span class="br0">&#93;</span><span class="sy0">;</span></pre></td></tr></table></div></td></tr></tbody></table></div>При такой конфигурации, файл успешно попадает в суперглобальный массив <code class="inlinecode">$_FILES</code>. И мы уже можем делать с ним, что нам требуется. Например, через класс <code class="inlinecode">\yii\web\UploadedFile</code>, как у меня это сделано в методе <code class="inlinecode">uploadFile()</code> модели файла диссертации:<br />
<br />
<div class="codeblock"><table class="php"><thead><tr><td colspan="2" id="833991012"  class="head">PHP</td></tr></thead><tbody><tr class="li1"><td><div id="833991012" style="height: 206px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="de1"><pre class="de1"><span class="co4">/**</span>
<span class="co4">&nbsp;* Загрузка файла.</span>
<span class="co4">&nbsp;* @return bool</span>
<span class="co4">&nbsp;*/</span>
<span class="kw2">public</span> <span class="kw2">function</span> uploadFile<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">:</span> bool
<span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="br0">&#40;</span><span class="re0">$file</span> <span class="sy0">=</span> \yii\web\UploadedFile<span class="sy0">::</span><span class="me2">getInstanceByName</span><span class="br0">&#40;</span><span class="st_h">'file'</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="sy0">!==</span> <span class="kw4">null</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// сохранение файла</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="sy0">...</span>
<span class="br0">&#125;</span></pre></td></tr></table></div></td></tr></tbody></table></div></div>

]]></content:encoded>
			<dc:creator>long399</dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/419889/8099.html</guid>
		</item>
		<item>
			<title>Yii2 formatter для вывода числительных</title>
			<link>https://www.cyberforum.ru/blogs/419889/7572.html</link>
			<pubDate>Tue, 31 May 2022 08:26:01 GMT</pubDate>
			<description>Столкнулся недавно с необходимостью вывода чисел прописью. Да еще и род нужно было учитывать....</description>
			<content:encoded><![CDATA[<div>Столкнулся недавно с необходимостью вывода чисел прописью. Да еще и род нужно было учитывать. Удалось это реализовать следующим образом:<br />
<br />
<div class="codeblock"><table class="php"><thead><tr><td colspan="2" id="731023721"  class="head">PHP</td></tr></thead><tbody><tr class="li1"><td><div id="731023721" style="height: 350px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
</pre></td><td class="de1"><pre class="de1"><span class="co1">// форматтер для чисел прописью</span>
<span class="re0">$numberFormatter</span> <span class="sy0">=</span> <span class="kw2">new</span> \NumberFormatter<span class="br0">&#40;</span><span class="st_h">'ru'</span><span class="sy0">,</span> \NumberFormatter<span class="sy0">::</span><span class="me2">SPELLOUT</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
<span class="re0">$n</span> <span class="sy0">=</span> <span class="nu0">101</span><span class="sy0">;</span>
&nbsp;
<span class="co1">// числительное мужского рода</span>
<span class="re0">$numberFormatter</span><span class="sy0">-&gt;</span><span class="me1">setTextAttribute</span><span class="br0">&#40;</span>\NumberFormatter<span class="sy0">::</span><span class="me2">DEFAULT_RULESET</span><span class="sy0">,</span> <span class="st0">&quot;<span class="es6">%s</span>pellout-cardinal-masculine&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="kw1">echo</span> <span class="re0">$numberFormatter</span><span class="sy0">-&gt;</span><span class="me1">format</span><span class="br0">&#40;</span><span class="re0">$n</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// &quot;сто один&quot;</span>
&nbsp;
<span class="co1">// числительное женского рода</span>
<span class="re0">$numberFormatter</span><span class="sy0">-&gt;</span><span class="me1">setTextAttribute</span><span class="br0">&#40;</span>\NumberFormatter<span class="sy0">::</span><span class="me2">DEFAULT_RULESET</span><span class="sy0">,</span> <span class="st0">&quot;<span class="es6">%s</span>pellout-cardinal-feminine&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="kw1">echo</span> <span class="re0">$numberFormatter</span><span class="sy0">-&gt;</span><span class="me1">format</span><span class="br0">&#40;</span><span class="re0">$n</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// &quot;сто одна&quot;</span>
&nbsp;
<span class="co1">// числительное среднего рода</span>
<span class="re0">$numberFormatter</span><span class="sy0">-&gt;</span><span class="me1">setTextAttribute</span><span class="br0">&#40;</span>\NumberFormatter<span class="sy0">::</span><span class="me2">DEFAULT_RULESET</span><span class="sy0">,</span> <span class="st0">&quot;<span class="es6">%s</span>pellout-cardinal-neuter&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="kw1">echo</span> <span class="re0">$numberFormatter</span><span class="sy0">-&gt;</span><span class="me1">format</span><span class="br0">&#40;</span><span class="re0">$n</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// &quot;сто одно&quot;</span>
&nbsp;
<span class="co1">// порядковое числительное мужского рода</span>
<span class="re0">$numberFormatter</span><span class="sy0">-&gt;</span><span class="me1">setTextAttribute</span><span class="br0">&#40;</span>\NumberFormatter<span class="sy0">::</span><span class="me2">DEFAULT_RULESET</span><span class="sy0">,</span> <span class="st0">&quot;<span class="es6">%s</span>pellout-ordinal-masculine&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="kw1">echo</span> <span class="re0">$numberFormatter</span><span class="sy0">-&gt;</span><span class="me1">format</span><span class="br0">&#40;</span><span class="re0">$n</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// &quot;сто первый&quot;</span>
&nbsp;
<span class="co1">// порядковое числительное женского рода</span>
<span class="re0">$numberFormatter</span><span class="sy0">-&gt;</span><span class="me1">setTextAttribute</span><span class="br0">&#40;</span>\NumberFormatter<span class="sy0">::</span><span class="me2">DEFAULT_RULESET</span><span class="sy0">,</span> <span class="st0">&quot;<span class="es6">%s</span>pellout-ordinal-feminine&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="kw1">echo</span> <span class="re0">$numberFormatter</span><span class="sy0">-&gt;</span><span class="me1">format</span><span class="br0">&#40;</span><span class="re0">$n</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// &quot;сто первая&quot;</span>
&nbsp;
<span class="co1">// порядковое числительное среднего рода</span>
<span class="re0">$numberFormatter</span><span class="sy0">-&gt;</span><span class="me1">setTextAttribute</span><span class="br0">&#40;</span>\NumberFormatter<span class="sy0">::</span><span class="me2">DEFAULT_RULESET</span><span class="sy0">,</span> <span class="st0">&quot;<span class="es6">%s</span>pellout-ordinal-neuter&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="kw1">echo</span> <span class="re0">$numberFormatter</span><span class="sy0">-&gt;</span><span class="me1">format</span><span class="br0">&#40;</span><span class="re0">$n</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// &quot;сто первое&quot;</span></pre></td></tr></table></div></td></tr></tbody></table></div>Еще один вариант как это можно сделать, используя компонент <b>i18n</b> в Yii2:<br />
<div class="codeblock"><table class="php"><thead><tr><td colspan="2" id="769509275"  class="head">PHP</td></tr></thead><tbody><tr class="li1"><td><div id="769509275" style="height: 158px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
</pre></td><td class="de1"><pre class="de1"><span class="re0">$n</span> <span class="sy0">=</span> <span class="nu0">101</span><span class="sy0">;</span>
&nbsp;
<span class="co1">// &quot;сто одно&quot;</span>
<span class="kw1">echo</span> \Yii<span class="sy0">::</span><span class="re0">$app</span><span class="sy0">-&gt;</span><span class="me1">i18n</span><span class="sy0">-&gt;</span><span class="me1">format</span><span class="br0">&#40;</span><span class="st_h">'{n, spellout,%spellout-cardinal-neuter}'</span><span class="sy0">,</span> <span class="br0">&#91;</span><span class="st_h">'n'</span> <span class="sy0">=&gt;</span> <span class="re0">$n</span><span class="br0">&#93;</span><span class="sy0">,</span> <span class="st_h">'ru_RU'</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="co1">// &quot;сто одна&quot;</span>
<span class="kw1">echo</span> \Yii<span class="sy0">::</span><span class="re0">$app</span><span class="sy0">-&gt;</span><span class="me1">i18n</span><span class="sy0">-&gt;</span><span class="me1">format</span><span class="br0">&#40;</span><span class="st_h">'{n, spellout,%spellout-cardinal-feminine}'</span><span class="sy0">,</span> <span class="br0">&#91;</span><span class="st_h">'n'</span> <span class="sy0">=&gt;</span> <span class="re0">$n</span><span class="br0">&#93;</span><span class="sy0">,</span> <span class="st_h">'ru_RU'</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="co1">// &quot;сто первая&quot;</span>
<span class="kw1">echo</span> \Yii<span class="sy0">::</span><span class="re0">$app</span><span class="sy0">-&gt;</span><span class="me1">i18n</span><span class="sy0">-&gt;</span><span class="me1">format</span><span class="br0">&#40;</span><span class="st_h">'{n, spellout,%spellout-ordinal-feminine}'</span><span class="sy0">,</span> <span class="br0">&#91;</span><span class="st_h">'n'</span> <span class="sy0">=&gt;</span> <span class="re0">$n</span><span class="br0">&#93;</span><span class="sy0">,</span> <span class="st_h">'ru_RU'</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></td></tr></table></div></td></tr></tbody></table></div>Полный список правил можно посмотреть по <a rel="nofollow noopener noreferrer" href="https://intl.rmcreative.ru/tables?locale=ru_RU" target="_blank" title="https://intl.rmcreative.ru/tables?locale=ru_RU">ссылке</a>.</div>

]]></content:encoded>
			<dc:creator>long399</dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/419889/7572.html</guid>
		</item>
		<item>
			<title>Captcha с математическими выражениями</title>
			<link>https://www.cyberforum.ru/blogs/419889/7239.html</link>
			<pubDate>Mon, 16 Aug 2021 05:16:19 GMT</pubDate>
			<description>Написал небольшой класс для приложения на *Yii2*, который расширяет стандартный...</description>
			<content:encoded><![CDATA[<div>Написал небольшой класс для приложения на <b>Yii2</b>, который расширяет стандартный <b>yii\captcha\CaptchaAction</b>. С его помощью мы сможем использовать <b>captcha</b>, в сгенерированном тексте которой будет прописано математическое выражение, вместо обычного текста. Для успешной отправки формы требуется ввести ответ на математическое выражение.<br />
<br />
<a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=7084&amp;d=1629088989" rel="Lightbox" id="attachment7084" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=7084&amp;thumb=1&amp;d=1629088989" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: captcha.png
Просмотров: 1488
Размер:	4.9 Кб
ID:	7084" style="margin: 5px" /></a><br />
<br />
<b>Список доступных операций</b>:<br />
1) Вычитание.<br />
2) Сложение.<br />
3) Умножение.<br />
<br />
По умолчанию будут генерироваться изображения с операцией сложения или вычитания случайным образом.<br />
<br />
<b>Исходный код</b>:<br />
<div class="codeblock"><table class="php"><thead><tr><td colspan="2" id="503816197"  class="head">PHP</td></tr></thead><tbody><tr class="li1"><td><div id="503816197" style="height: 350px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
</pre></td><td class="de1"><pre class="de1"><span class="kw2">&lt;?php</span>
&nbsp;
<span class="kw2">namespace</span> app\components\actions<span class="sy0">;</span>
&nbsp;
<span class="kw2">use</span> yii\captcha\CaptchaAction<span class="sy0">;</span>
<span class="kw2">use</span> yii\base\InvalidConfigException<span class="sy0">;</span>
&nbsp;
<span class="co4">/**</span>
<span class="co4">&nbsp;* Class implements advanced captcha action with mathematical expressions. Based on [[yii\captcha\CaptchaAction]].</span>
<span class="co4">&nbsp;* @see yii\captcha\CaptchaAction</span>
<span class="co4">&nbsp;* @link https://github.com/samdark/yii2-cookbook/blob/master/book/forms-captcha.md</span>
<span class="co4">&nbsp;* @author long399 &lt;long399@mail.ru&gt;</span>
<span class="co4">&nbsp;*/</span>
<span class="kw2">class</span> MathCaptchaAction <span class="kw2">extends</span> CaptchaAction
<span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="co4">/** @var int minimal value for generating code */</span>
&nbsp; &nbsp; <span class="kw2">public</span> <span class="re0">$minLength</span> <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; <span class="co4">/** @var int maximal value for generating code */</span>
&nbsp; &nbsp; <span class="kw2">public</span> <span class="re0">$maxLength</span> <span class="sy0">=</span> <span class="nu0">100</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; <span class="co4">/** @var array operations list for captcha */</span>
&nbsp; &nbsp; <span class="kw2">public</span> <span class="re0">$operations</span> <span class="sy0">=</span> <span class="br0">&#91;</span><span class="st_h">'+'</span><span class="sy0">,</span> <span class="st_h">'-'</span><span class="br0">&#93;</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; <span class="co4">/** @var array available operarations list for captcha */</span>
&nbsp; &nbsp; <span class="kw2">const</span> AVAILABLE_OPERATIONS <span class="sy0">=</span> <span class="br0">&#91;</span><span class="st_h">'+'</span><span class="sy0">,</span> <span class="st_h">'-'</span><span class="sy0">,</span> <span class="st_h">'*'</span><span class="br0">&#93;</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; <span class="co4">/**</span>
<span class="co4">&nbsp; &nbsp; &nbsp;* {@inheritDoc}</span>
<span class="co4">&nbsp; &nbsp; &nbsp;* @see \yii\captcha\CaptchaAction::init()</span>
<span class="co4">&nbsp; &nbsp; &nbsp;*/</span>
&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> init<span class="br0">&#40;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; parent<span class="sy0">::</span><span class="me2">init</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="sy0">!</span><span class="kw3">is_array</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">operations</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">throw</span> <span class="kw2">new</span> InvalidConfigException<span class="br0">&#40;</span><span class="st_h">'The &quot;operations&quot; property must be an array.'</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">foreach</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">operations</span> <span class="kw1">as</span> <span class="re0">$operation</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="sy0">!</span><span class="kw3">in_array</span><span class="br0">&#40;</span><span class="re0">$operation</span><span class="sy0">,</span> <span class="kw2">self</span><span class="sy0">::</span><span class="me2">AVAILABLE_OPERATIONS</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">throw</span> <span class="kw2">new</span> InvalidConfigException<span class="br0">&#40;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'The &quot;operations&quot; property may contains only ['</span><span class="sy0">.</span><span class="kw3">implode</span><span class="br0">&#40;</span><span class="st_h">', '</span><span class="sy0">,</span> <span class="kw2">self</span><span class="sy0">::</span><span class="me2">AVAILABLE_OPERATIONS</span><span class="br0">&#41;</span><span class="sy0">.</span><span class="st_h">'] operations.'</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp;
&nbsp; &nbsp; <span class="co4">/**</span>
<span class="co4">&nbsp; &nbsp; &nbsp;* {@inheritdoc}</span>
<span class="co4">&nbsp; &nbsp; &nbsp;*/</span>
&nbsp; &nbsp; <span class="kw2">protected</span> <span class="kw2">function</span> generateVerifyCode<span class="br0">&#40;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw3">mt_rand</span><span class="br0">&#40;</span><span class="br0">&#40;</span>int<span class="br0">&#41;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">minLength</span><span class="sy0">,</span> <span class="br0">&#40;</span>int<span class="br0">&#41;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">maxLength</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp;
&nbsp; &nbsp; <span class="co4">/**</span>
<span class="co4">&nbsp; &nbsp; &nbsp;* {@inheritdoc}</span>
<span class="co4">&nbsp; &nbsp; &nbsp;*/</span>
&nbsp; &nbsp; <span class="kw2">protected</span> <span class="kw2">function</span> renderImage<span class="br0">&#40;</span><span class="re0">$code</span><span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> parent<span class="sy0">::</span><span class="me2">renderImage</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="kw3">getText</span><span class="br0">&#40;</span><span class="re0">$code</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp;
&nbsp; &nbsp; <span class="co4">/**</span>
<span class="co4">&nbsp; &nbsp; &nbsp;* Get mathematical expression for image rendering.</span>
<span class="co4">&nbsp; &nbsp; &nbsp;* @param string $code</span>
<span class="co4">&nbsp; &nbsp; &nbsp;* @return string</span>
<span class="co4">&nbsp; &nbsp; &nbsp;*/</span>
&nbsp; &nbsp; <span class="kw2">protected</span> <span class="kw2">function</span> <span class="kw3">getText</span><span class="br0">&#40;</span><span class="re0">$code</span><span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$code</span> <span class="sy0">=</span> <span class="br0">&#40;</span>int<span class="br0">&#41;</span><span class="re0">$code</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$rand</span> <span class="sy0">=</span> <span class="kw3">mt_rand</span><span class="br0">&#40;</span><span class="kw3">min</span><span class="br0">&#40;</span><span class="nu0">1</span><span class="sy0">,</span> <span class="re0">$code</span> <span class="sy0">-</span> <span class="nu0">1</span><span class="br0">&#41;</span><span class="sy0">,</span> <span class="kw3">max</span><span class="br0">&#40;</span><span class="nu0">1</span><span class="sy0">,</span> <span class="re0">$code</span> <span class="sy0">-</span> <span class="nu0">1</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$operation</span> <span class="sy0">=</span> <span class="kw3">mt_rand</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="sy0">,</span> <span class="kw3">count</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">operations</span><span class="br0">&#41;</span> <span class="sy0">-</span> <span class="nu0">1</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">switch</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">operations</span><span class="br0">&#91;</span><span class="re0">$operation</span><span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st_h">'+'</span><span class="sy0">:</span> <span class="kw1">return</span> <span class="br0">&#40;</span><span class="re0">$code</span> <span class="sy0">-</span> <span class="re0">$rand</span><span class="br0">&#41;</span><span class="sy0">.</span><span class="st_h">' + '</span><span class="sy0">.</span><span class="re0">$rand</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st_h">'-'</span><span class="sy0">:</span> <span class="kw1">return</span> <span class="br0">&#40;</span><span class="re0">$code</span> <span class="sy0">+</span> <span class="re0">$rand</span><span class="br0">&#41;</span><span class="sy0">.</span><span class="st_h">' - '</span><span class="sy0">.</span><span class="re0">$rand</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st_h">'*'</span><span class="sy0">:</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$sign</span> <span class="sy0">=</span> <span class="kw3">mt_rand</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="sy0">,</span> <span class="nu0">1</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// operation sign for subexpression</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$whole</span> <span class="sy0">=</span> <span class="br0">&#40;</span>int<span class="br0">&#41;</span><span class="br0">&#40;</span><span class="re0">$code</span> <span class="sy0">/</span> <span class="re0">$rand</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">switch</span> <span class="br0">&#40;</span><span class="re0">$sign</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="nu0">0</span><span class="sy0">:</span> <span class="co1">// plus</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$reminder</span> <span class="sy0">=</span> <span class="re0">$code</span> <span class="sy0">%</span> <span class="re0">$rand</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="nu0">1</span><span class="sy0">:</span> <span class="co1">// minus</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$whole</span><span class="sy0">++;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$reminder</span> <span class="sy0">=</span> <span class="re0">$whole</span> <span class="sy0">*</span> <span class="re0">$rand</span> <span class="sy0">-</span> <span class="re0">$code</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$str</span> <span class="sy0">=</span> <span class="re0">$whole</span><span class="sy0">.</span><span class="st_h">' * '</span><span class="sy0">.</span><span class="re0">$rand</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$reminder</span><span class="br0">&#41;</span> <span class="re0">$str</span> <span class="sy0">.=</span> <span class="br0">&#40;</span><span class="re0">$sign</span> <span class="sy0">==</span> <span class="nu0">1</span> ? <span class="st_h">' - '</span> <span class="sy0">:</span> <span class="st_h">' + '</span><span class="br0">&#41;</span><span class="sy0">.</span><span class="re0">$reminder</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="re0">$str</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
<span class="br0">&#125;</span></pre></td></tr></table></div></td></tr></tbody></table></div><b>Применение</b>:<br />
<i>controller</i>:<br />
<div class="codeblock"><table class="php"><thead><tr><td colspan="2" id="343251482"  class="head">PHP</td></tr></thead><tbody><tr class="li1"><td><div id="343251482" style="height: 238px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
</pre></td><td class="de1"><pre class="de1"><span class="kw2">public</span> <span class="kw2">function</span> actions<span class="br0">&#40;</span><span class="br0">&#41;</span>
<span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw1">return</span> <span class="br0">&#91;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">...</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'captcha'</span> <span class="sy0">=&gt;</span> <span class="br0">&#91;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'class'</span> <span class="sy0">=&gt;</span> \app\components\actions\MathCaptchaAction<span class="sy0">::</span><span class="kw2">class</span><span class="sy0">,</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'fixedVerifyCode'</span> <span class="sy0">=&gt;</span> YII_ENV_TEST ? <span class="st_h">'399'</span> <span class="sy0">:</span> <span class="kw4">null</span><span class="sy0">,</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'minLength'</span> <span class="sy0">=&gt;</span> <span class="nu0">0</span><span class="sy0">,</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'maxLength'</span> <span class="sy0">=&gt;</span> <span class="nu0">1000</span><span class="sy0">,</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#93;</span><span class="sy0">,</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">...</span>
&nbsp; &nbsp; <span class="br0">&#93;</span><span class="sy0">;</span>
<span class="br0">&#125;</span></pre></td></tr></table></div></td></tr></tbody></table></div><i>model</i>:<br />
<div class="codeblock"><table class="php"><thead><tr><td colspan="2" id="365845484"  class="head">PHP</td></tr></thead><tbody><tr class="li1"><td><div id="365845484" style="height: 254px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
</pre></td><td class="de1"><pre class="de1"><span class="kw2">class</span> MyModel <span class="kw2">extends</span> \yii\db\ActiveRecord
<span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw2">public</span> <span class="re0">$captcha</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="sy0">...</span>
&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> rules<span class="br0">&#40;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="br0">&#91;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">...</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span><span class="st_h">'captcha'</span><span class="sy0">,</span> <span class="st_h">'captcha'</span><span class="sy0">,</span> <span class="st_h">'captchaAction'</span> <span class="sy0">=&gt;</span> <span class="st_h">'/site/captcha'</span><span class="br0">&#93;</span><span class="sy0">,</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">...</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#93;</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="sy0">...</span>
<span class="br0">&#125;</span></pre></td></tr></table></div></td></tr></tbody></table></div><i>view</i>:<br />
<div class="codeblock"><table class="php"><thead><tr><td colspan="2" id="297925760"  class="head">PHP</td></tr></thead><tbody><tr class="li1"><td><div id="297925760" style="height: 126px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
</pre></td><td class="de1"><pre class="de1"><span class="sy0">...</span>
<span class="kw1">echo</span> <span class="re0">$form</span><span class="sy0">-&gt;</span><span class="me1">field</span><span class="br0">&#40;</span><span class="re0">$model</span><span class="sy0">,</span> <span class="st_h">'captcha'</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">widget</span><span class="br0">&#40;</span>\yii\captcha\Captcha<span class="sy0">::</span><span class="kw2">class</span><span class="sy0">,</span> <span class="br0">&#91;</span>
&nbsp; &nbsp; <span class="st_h">'captchaAction'</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;/site/captcha&quot;</span><span class="sy0">,</span>
&nbsp; &nbsp; <span class="st_h">'template'</span> <span class="sy0">=&gt;</span> <span class="st_h">'&lt;div class=&quot;row&quot;&gt;&lt;div class=&quot;col-lg-3&quot;&gt;{image}&lt;/div&gt;&lt;div class=&quot;col-lg-6&quot;&gt;{input}&lt;/div&gt;&lt;/div&gt;'</span><span class="sy0">,</span>
<span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="sy0">...</span></pre></td></tr></table></div></td></tr></tbody></table></div><br />
Если вы, например, захотите использовать только выражения с операцией вычитания, тогда вам нужно задать соответствующим образом свойство <b>operations</b> в описании действия в контроллере:<br />
<div class="codeblock"><table class="php"><thead><tr><td colspan="2" id="628947379"  class="head">PHP</td></tr></thead><tbody><tr class="li1"><td><div id="628947379" style="height: 254px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
</pre></td><td class="de1"><pre class="de1"><span class="kw2">public</span> <span class="kw2">function</span> actions<span class="br0">&#40;</span><span class="br0">&#41;</span>
<span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw1">return</span> <span class="br0">&#91;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">...</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'captcha'</span> <span class="sy0">=&gt;</span> <span class="br0">&#91;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'class'</span> <span class="sy0">=&gt;</span> \app\components\actions\MathCaptchaAction<span class="sy0">::</span><span class="kw2">class</span><span class="sy0">,</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'fixedVerifyCode'</span> <span class="sy0">=&gt;</span> YII_ENV_TEST ? <span class="st_h">'399'</span> <span class="sy0">:</span> <span class="kw4">null</span><span class="sy0">,</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'minLength'</span> <span class="sy0">=&gt;</span> <span class="nu0">0</span><span class="sy0">,</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'maxLength'</span> <span class="sy0">=&gt;</span> <span class="nu0">1000</span><span class="sy0">,</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'operations'</span> <span class="sy0">=&gt;</span> <span class="br0">&#91;</span><span class="st_h">'-'</span><span class="br0">&#93;</span><span class="sy0">,</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#93;</span><span class="sy0">,</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">...</span>
&nbsp; &nbsp; <span class="br0">&#93;</span><span class="sy0">;</span>
<span class="br0">&#125;</span></pre></td></tr></table></div></td></tr></tbody></table></div><b>Выражения с умножением</b>:<br />
Если вы, захотите использовать также выражения с операцией умножения, тогда вам нужно задать соответствующим образом свойство <b>operations</b> в описании действия в контроллере:<br />
<div class="codeblock"><table class="php"><thead><tr><td colspan="2" id="173143384"  class="head">PHP</td></tr></thead><tbody><tr class="li1"><td><div id="173143384" style="height: 254px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
</pre></td><td class="de1"><pre class="de1"><span class="kw2">public</span> <span class="kw2">function</span> actions<span class="br0">&#40;</span><span class="br0">&#41;</span>
<span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw1">return</span> <span class="br0">&#91;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">...</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'captcha'</span> <span class="sy0">=&gt;</span> <span class="br0">&#91;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'class'</span> <span class="sy0">=&gt;</span> \app\components\actions\MathCaptchaAction<span class="sy0">::</span><span class="kw2">class</span><span class="sy0">,</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'fixedVerifyCode'</span> <span class="sy0">=&gt;</span> YII_ENV_TEST ? <span class="st_h">'399'</span> <span class="sy0">:</span> <span class="kw4">null</span><span class="sy0">,</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'minLength'</span> <span class="sy0">=&gt;</span> <span class="nu0">0</span><span class="sy0">,</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'maxLength'</span> <span class="sy0">=&gt;</span> <span class="nu0">1000</span><span class="sy0">,</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'operations'</span> <span class="sy0">=&gt;</span> <span class="br0">&#91;</span><span class="st_h">'+'</span><span class="sy0">,</span> <span class="st_h">'-'</span><span class="sy0">,</span> <span class="st_h">'*'</span><span class="br0">&#93;</span><span class="sy0">,</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#93;</span><span class="sy0">,</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">...</span>
&nbsp; &nbsp; <span class="br0">&#93;</span><span class="sy0">;</span>
<span class="br0">&#125;</span></pre></td></tr></table></div></td></tr></tbody></table></div>Для операции умножения могут быть сгенерированы выражения трех видов:<br />
1) Выражение с умножением.<br />
<a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=7085&amp;d=1629172431" rel="Lightbox" id="attachment7085" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=7085&amp;thumb=1&amp;d=1629172431" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: m1.png
Просмотров: 1308
Размер:	2.9 Кб
ID:	7085" style="margin: 5px" /></a><br />
2) Выражение с умножением и сложением.<br />
<a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=7086&amp;d=1629172431" rel="Lightbox" id="attachment7086" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=7086&amp;thumb=1&amp;d=1629172431" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: m2.png
Просмотров: 1292
Размер:	2.8 Кб
ID:	7086" style="margin: 5px" /></a><br />
3) Выражение с умножением и вычитанием.<br />
<a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=7087&amp;d=1629172431" rel="Lightbox" id="attachment7087" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=7087&amp;thumb=1&amp;d=1629172431" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: m3.png
Просмотров: 1264
Размер:	2.7 Кб
ID:	7087" style="margin: 5px" /></a><br />
<br />
<a rel="nofollow noopener noreferrer" href="https://github.com/ProkopenkoRoman/yii2-math-captcha" target="_blank" title="https://github.com/ProkopenkoRoman/yii2-math-captcha">Ссылка на репозиторий</a>.</div>

]]></content:encoded>
			<dc:creator>long399</dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/419889/7239.html</guid>
		</item>
		<item>
			<title>Расширенный виджет LinkPager в Yii2</title>
			<link>https://www.cyberforum.ru/blogs/419889/7231.html</link>
			<pubDate>Mon, 09 Aug 2021 08:06:33 GMT</pubDate>
			<description>Возникла следующая проблема. Имеется один проект на *Yii2*, в котором на индексной странице...</description>
			<content:encoded><![CDATA[<div>Возникла следующая проблема. Имеется один проект на <b>Yii2</b>, в котором на индексной странице выводится очень много записей. Стандартный пейджер, в котором можно задать дополнительно ссылки на первую и последнюю страницы уже не спасает положение.<br />
<br />
Написал небольшой виджет, который расширяет стандартный <b>\yii\widgets\LinkPager</b> и предоставляет возможность добавить к пейджеру дополнительные блоки:<ul><li>dropdown list со списком всех возможных переходов;</li>
<li>dropdown list со списком количества записей на одной странице;</li>
<li>textinput поле для задания страницы, к которой нужно перейти.</li>
</ul><br />
<a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=7079&amp;d=1628496193" rel="Lightbox" id="attachment7079" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=7079&amp;thumb=1&amp;d=1628496193" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: widget.png
Просмотров: 1153
Размер:	20.4 Кб
ID:	7079" style="margin: 5px" /></a><br />
<br />
<b>Исходный код</b>:<br />
<div class="codeblock"><table class="php"><thead><tr><td colspan="2" id="641704970"  class="head">PHP</td></tr></thead><tbody><tr class="li1"><td><div id="641704970" style="height: 350px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
</pre></td><td class="de1"><pre class="de1"><span class="kw2">&lt;?php</span>
<span class="kw2">namespace</span> app\widgets<span class="sy0">;</span>
&nbsp;
<span class="kw2">use</span> yii\helpers\Html<span class="sy0">;</span>
<span class="kw2">use</span> yii\widgets\LinkPager<span class="sy0">;</span>
<span class="kw2">use</span> yii\bootstrap\Dropdown<span class="sy0">;</span>
&nbsp;
<span class="co4">/**</span>
<span class="co4">&nbsp;* Advanced LinkPager widget.</span>
<span class="co4">&nbsp;* Widget includes blocks: [pageButtons], [pageList], [pageSize], [pageJump].</span>
<span class="co4">&nbsp;* You can set the required blocks in [template] property.</span>
<span class="co4">&nbsp;* @author long399 &lt;long399@mail.ru&gt;</span>
<span class="co4">&nbsp;*/</span>
<span class="kw2">class</span> AdvancedLinkPager <span class="kw2">extends</span> LinkPager
<span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="co4">/**</span>
<span class="co4">&nbsp; &nbsp; &nbsp;* &nbsp;@var string template of widget. </span>
<span class="co4">&nbsp; &nbsp; &nbsp;* &nbsp;@example {pageButtons}{pageList}{pageSize}{pageJump}</span>
<span class="co4">&nbsp; &nbsp; &nbsp;*/</span>
&nbsp; &nbsp; <span class="kw2">public</span> <span class="re0">$template</span> <span class="sy0">=</span> <span class="st_h">'{pageButtons}{pageJump}'</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; <span class="co4">/** @var array pageSize items list. */</span>
&nbsp; &nbsp; <span class="kw2">public</span> <span class="re0">$pageSizeItems</span> <span class="sy0">=</span> <span class="br0">&#91;</span><span class="nu0">1</span><span class="sy0">,</span> <span class="nu0">10</span><span class="sy0">,</span> <span class="nu0">25</span><span class="br0">&#93;</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; <span class="co4">/** @var string pageSize label string. */</span>
&nbsp; &nbsp; <span class="kw2">public</span> <span class="re0">$pageSizeLabel</span> <span class="sy0">=</span> <span class="st_h">'Size'</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; <span class="co4">/** @var string pageList label string. */</span>
&nbsp; &nbsp; <span class="kw2">public</span> <span class="re0">$pageListLabel</span> <span class="sy0">=</span> <span class="st_h">'Page'</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; <span class="co4">/** @var string the CSS class for the pageList. */</span>
&nbsp; &nbsp; <span class="kw2">public</span> <span class="re0">$pageListCssClass</span> <span class="sy0">=</span> <span class="st_h">'form-control'</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; <span class="co4">/** @var string the CSS class for the pageSize. */</span>
&nbsp; &nbsp; <span class="kw2">public</span> <span class="re0">$pageSizeCssClass</span> <span class="sy0">=</span> <span class="st_h">'form-control'</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; <span class="co4">/**</span>
<span class="co4">&nbsp; &nbsp; &nbsp;* {@inheritDoc}</span>
<span class="co4">&nbsp; &nbsp; &nbsp;* @see \yii\widgets\LinkPager::run()</span>
<span class="co4">&nbsp; &nbsp; &nbsp;*/</span>
&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> run<span class="br0">&#40;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">registerLinkTags</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">registerLinkTags</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">echo</span> Html<span class="sy0">::</span><span class="me2">beginTag</span><span class="br0">&#40;</span><span class="st_h">'div'</span><span class="sy0">,</span> <span class="br0">&#91;</span><span class="st_h">'class'</span> <span class="sy0">=&gt;</span> <span class="st_h">'row'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">echo</span> Html<span class="sy0">::</span><span class="me2">beginTag</span><span class="br0">&#40;</span><span class="st_h">'div'</span><span class="sy0">,</span> <span class="br0">&#91;</span><span class="st_h">'class'</span> <span class="sy0">=&gt;</span> <span class="st_h">'col-sm-12'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">echo</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">renderPageContent</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">echo</span> Html<span class="sy0">::</span><span class="me2">endTag</span><span class="br0">&#40;</span><span class="st_h">'div'</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">echo</span> Html<span class="sy0">::</span><span class="me2">endTag</span><span class="br0">&#40;</span><span class="st_h">'div'</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp;
&nbsp; &nbsp; <span class="co4">/**</span>
<span class="co4">&nbsp; &nbsp; &nbsp;* Render content according to the template.</span>
<span class="co4">&nbsp; &nbsp; &nbsp;* @return mixed</span>
<span class="co4">&nbsp; &nbsp; &nbsp;*/</span>
&nbsp; &nbsp; <span class="kw2">protected</span> <span class="kw2">function</span> renderPageContent<span class="br0">&#40;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw3">preg_replace_callback</span><span class="br0">&#40;</span><span class="st_h">'/\\{([\w\-\/]+)\\}/'</span><span class="sy0">,</span> <span class="kw2">function</span> <span class="br0">&#40;</span><span class="re0">$matches</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$name</span> <span class="sy0">=</span> <span class="re0">$matches</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">switch</span> <span class="br0">&#40;</span><span class="re0">$name</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st_h">'pageJump'</span><span class="sy0">:</span> &nbsp; &nbsp;<span class="kw1">return</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">renderPageJump</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st_h">'pageButtons'</span><span class="sy0">:</span> <span class="kw1">return</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">renderPageButtons</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st_h">'pageSize'</span><span class="sy0">:</span> &nbsp; &nbsp;<span class="kw1">return</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">renderPageSize</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st_h">'pageList'</span><span class="sy0">:</span> &nbsp; &nbsp;<span class="kw1">return</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">renderPageList</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">default</span><span class="sy0">:</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">return</span> <span class="st_h">''</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="sy0">,</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">template</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp;
&nbsp; &nbsp; <span class="co4">/**</span>
<span class="co4">&nbsp; &nbsp; &nbsp;* Render pageList block.</span>
<span class="co4">&nbsp; &nbsp; &nbsp;* @return string</span>
<span class="co4">&nbsp; &nbsp; &nbsp;*/</span>
&nbsp; &nbsp; <span class="kw2">protected</span> <span class="kw2">function</span> renderPageList<span class="br0">&#40;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$pageCount</span> <span class="sy0">=</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">pagination</span><span class="sy0">-&gt;</span><span class="me1">getPageCount</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$pageCount</span> <span class="sy0">&lt;</span> <span class="nu0">2</span> <span class="sy0">&amp;&amp;</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">hideOnSinglePage</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="st_h">''</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$html</span> <span class="sy0">=</span> Html<span class="sy0">::</span><span class="me2">beginTag</span><span class="br0">&#40;</span><span class="st_h">'div'</span><span class="sy0">,</span> <span class="br0">&#91;</span><span class="st_h">'class'</span> <span class="sy0">=&gt;</span> <span class="st_h">'btn-group dropup'</span><span class="sy0">,</span> <span class="st_h">'style'</span> <span class="sy0">=&gt;</span> <span class="st_h">'margin-left: 20px; margin-top: -5px;'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$html</span> <span class="sy0">.=</span> Html<span class="sy0">::</span><span class="me2">button</span><span class="br0">&#40;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">pageListLabel</span><span class="sy0">.</span><span class="st_h">' '</span><span class="sy0">.</span>Html<span class="sy0">::</span><span class="me2">tag</span><span class="br0">&#40;</span><span class="st_h">'span'</span><span class="sy0">,</span> <span class="st_h">''</span><span class="sy0">,</span> <span class="br0">&#91;</span><span class="st_h">'class'</span> <span class="sy0">=&gt;</span> <span class="st_h">'fa fa-caret-down'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">,</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span><span class="st_h">'class'</span> <span class="sy0">=&gt;</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">pageListCssClass</span><span class="sy0">,</span> <span class="st_h">'data-toggle'</span> <span class="sy0">=&gt;</span> <span class="st_h">'dropdown'</span><span class="sy0">,</span> <span class="st_h">'aria-expanded'</span> <span class="sy0">=&gt;</span> <span class="kw4">false</span><span class="br0">&#93;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$html</span> <span class="sy0">.=</span> Dropdown<span class="sy0">::</span><span class="me2">widget</span><span class="br0">&#40;</span><span class="br0">&#91;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'items'</span> <span class="sy0">=&gt;</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">configurePageListItems</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">,</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'encodeLabels'</span> <span class="sy0">=&gt;</span> <span class="kw4">false</span><span class="sy0">,</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'options'</span> <span class="sy0">=&gt;</span> <span class="br0">&#91;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'style'</span> <span class="sy0">=&gt;</span> <span class="st_h">'height: auto; max-height: 200px; overflow-x: hidden;'</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#93;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$html</span> <span class="sy0">.=</span> Html<span class="sy0">::</span><span class="me2">endTag</span><span class="br0">&#40;</span><span class="st_h">'div'</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="re0">$html</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp;
&nbsp; &nbsp; <span class="co4">/**</span>
<span class="co4">&nbsp; &nbsp; &nbsp;* Render pageSize block.</span>
<span class="co4">&nbsp; &nbsp; &nbsp;* @return string</span>
<span class="co4">&nbsp; &nbsp; &nbsp;*/</span>
&nbsp; &nbsp; <span class="kw2">protected</span> <span class="kw2">function</span> renderPageSize<span class="br0">&#40;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$html</span> <span class="sy0">=</span> Html<span class="sy0">::</span><span class="me2">beginTag</span><span class="br0">&#40;</span><span class="st_h">'div'</span><span class="sy0">,</span> <span class="br0">&#91;</span><span class="st_h">'class'</span> <span class="sy0">=&gt;</span> <span class="st_h">'btn-group dropup'</span><span class="sy0">,</span> <span class="st_h">'style'</span> <span class="sy0">=&gt;</span> <span class="st_h">'margin-left: 20px; margin-top: -5px;'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$html</span> <span class="sy0">.=</span> Html<span class="sy0">::</span><span class="me2">button</span><span class="br0">&#40;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">pageSizeLabel</span><span class="sy0">.</span><span class="st_h">' '</span><span class="sy0">.</span>Html<span class="sy0">::</span><span class="me2">tag</span><span class="br0">&#40;</span><span class="st_h">'span'</span><span class="sy0">,</span> <span class="st_h">''</span><span class="sy0">,</span> <span class="br0">&#91;</span><span class="st_h">'class'</span> <span class="sy0">=&gt;</span> <span class="st_h">'fa fa-caret-down'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">,</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span><span class="st_h">'class'</span> <span class="sy0">=&gt;</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">pageSizeCssClass</span><span class="sy0">,</span> <span class="st_h">'data-toggle'</span> <span class="sy0">=&gt;</span> <span class="st_h">'dropdown'</span><span class="sy0">,</span> <span class="st_h">'aria-expanded'</span> <span class="sy0">=&gt;</span> <span class="kw4">false</span><span class="br0">&#93;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$html</span> <span class="sy0">.=</span> Dropdown<span class="sy0">::</span><span class="me2">widget</span><span class="br0">&#40;</span><span class="br0">&#91;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'items'</span> <span class="sy0">=&gt;</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">configurePageSizeItems</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">,</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'encodeLabels'</span> <span class="sy0">=&gt;</span> <span class="kw4">false</span><span class="sy0">,</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'options'</span> <span class="sy0">=&gt;</span> <span class="br0">&#91;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'style'</span> <span class="sy0">=&gt;</span> <span class="st_h">'height: auto; max-height: 200px; overflow-x: hidden;'</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#93;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$html</span> <span class="sy0">.=</span> Html<span class="sy0">::</span><span class="me2">endTag</span><span class="br0">&#40;</span><span class="st_h">'div'</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="re0">$html</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp;
&nbsp; &nbsp; <span class="co4">/**</span>
<span class="co4">&nbsp; &nbsp; &nbsp;* Render pageJump block.</span>
<span class="co4">&nbsp; &nbsp; &nbsp;* @return string</span>
<span class="co4">&nbsp; &nbsp; &nbsp;*/</span>
&nbsp; &nbsp; <span class="kw2">protected</span> <span class="kw2">function</span> renderPageJump<span class="br0">&#40;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$pageCount</span> <span class="sy0">=</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">pagination</span><span class="sy0">-&gt;</span><span class="me1">getPageCount</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$pageCount</span> <span class="sy0">&lt;</span> <span class="nu0">2</span> <span class="sy0">&amp;&amp;</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">hideOnSinglePage</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="st_h">''</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$html</span> <span class="sy0">=</span> Html<span class="sy0">::</span><span class="me2">beginTag</span><span class="br0">&#40;</span><span class="st_h">'div'</span><span class="sy0">,</span> <span class="br0">&#91;</span><span class="st_h">'class'</span> <span class="sy0">=&gt;</span> <span class="st_h">'btn-group'</span><span class="sy0">,</span> <span class="st_h">'style'</span> <span class="sy0">=&gt;</span> <span class="st_h">'margin-left: 20px; margin-top: -5px;'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$html</span> <span class="sy0">.=</span> Html<span class="sy0">::</span><span class="me2">textInput</span><span class="br0">&#40;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'page'</span><span class="sy0">,</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">''</span><span class="sy0">,</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'class'</span> <span class="sy0">=&gt;</span> <span class="st_h">'form-control'</span><span class="sy0">,</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'data-toggle'</span> <span class="sy0">=&gt;</span> <span class="st_h">'tooltip'</span><span class="sy0">,</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'title'</span> <span class="sy0">=&gt;</span> <span class="st_h">'Введите номер страницы и нажмите Enter'</span><span class="sy0">,</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'placeholder'</span> <span class="sy0">=&gt;</span> <span class="st_h">'Страница'</span><span class="sy0">,</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'style'</span> <span class="sy0">=&gt;</span> <span class="st_h">'height: 30px; width: 85px;'</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#93;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$html</span> <span class="sy0">.=</span> Html<span class="sy0">::</span><span class="me2">endTag</span><span class="br0">&#40;</span><span class="st_h">'div'</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">registerJs</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="re0">$html</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp;
&nbsp; &nbsp; <span class="co4">/**</span>
<span class="co4">&nbsp; &nbsp; &nbsp;* {@inheritDoc}</span>
<span class="co4">&nbsp; &nbsp; &nbsp;* @see \yii\widgets\LinkPager::renderPageButtons()</span>
<span class="co4">&nbsp; &nbsp; &nbsp;*/</span>
&nbsp; &nbsp; <span class="kw2">protected</span> <span class="kw2">function</span> renderPageButtons<span class="br0">&#40;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$html</span> <span class="sy0">=</span> Html<span class="sy0">::</span><span class="me2">beginTag</span><span class="br0">&#40;</span><span class="st_h">'div'</span><span class="sy0">,</span> <span class="br0">&#91;</span><span class="st_h">'class'</span> <span class="sy0">=&gt;</span> <span class="st_h">'btn-group'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$html</span> <span class="sy0">.=</span> parent<span class="sy0">::</span><span class="me2">renderPageButtons</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$html</span> <span class="sy0">.=</span> Html<span class="sy0">::</span><span class="me2">endTag</span><span class="br0">&#40;</span><span class="st_h">'div'</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="re0">$html</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp;
&nbsp; &nbsp; <span class="co4">/**</span>
<span class="co4">&nbsp; &nbsp; &nbsp;* Creates a configuration array for pageList Dropdown items.</span>
<span class="co4">&nbsp; &nbsp; &nbsp;* Refer to description for \yii\bootstrap\Dropdown::$items property.</span>
<span class="co4">&nbsp; &nbsp; &nbsp;* @return array</span>
<span class="co4">&nbsp; &nbsp; &nbsp;*/</span>
&nbsp; &nbsp; <span class="kw2">protected</span> <span class="kw2">function</span> configurePageListItems<span class="br0">&#40;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$items</span> <span class="sy0">=</span> <span class="br0">&#91;</span><span class="br0">&#93;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$pageCount</span> <span class="sy0">=</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">pagination</span><span class="sy0">-&gt;</span><span class="me1">getPageCount</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$pageCount</span> <span class="sy0">&lt;</span> <span class="nu0">2</span> <span class="sy0">&amp;&amp;</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">hideOnSinglePage</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="re0">$items</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$currentPage</span> <span class="sy0">=</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">pagination</span><span class="sy0">-&gt;</span><span class="me1">getPage</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// first page</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">firstPageLabel</span> <span class="sy0">!==</span> <span class="kw4">false</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$items</span><span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">createPageListItem</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">firstPageLabel</span><span class="sy0">,</span> <span class="nu0">0</span><span class="sy0">,</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">firstPageCssClass</span><span class="sy0">,</span> <span class="re0">$currentPage</span> <span class="sy0">&lt;=</span> <span class="nu0">0</span><span class="sy0">,</span> <span class="kw4">false</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// prev page</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">prevPageLabel</span> <span class="sy0">!==</span> <span class="kw4">false</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="br0">&#40;</span><span class="re0">$page</span> <span class="sy0">=</span> <span class="re0">$currentPage</span> <span class="sy0">-</span> <span class="nu0">1</span><span class="br0">&#41;</span> <span class="sy0">&lt;</span> <span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$page</span> <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$items</span><span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">createPageListItem</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">prevPageLabel</span><span class="sy0">,</span> <span class="re0">$page</span><span class="sy0">,</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">prevPageCssClass</span><span class="sy0">,</span> <span class="re0">$currentPage</span> <span class="sy0">&lt;=</span> <span class="nu0">0</span><span class="sy0">,</span> <span class="kw4">false</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// internal pages</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">list</span><span class="br0">&#40;</span><span class="re0">$beginPage</span><span class="sy0">,</span> <span class="re0">$endPage</span><span class="br0">&#41;</span> <span class="sy0">=</span> <span class="br0">&#91;</span><span class="nu0">0</span><span class="sy0">,</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">pagination</span><span class="sy0">-&gt;</span><span class="me1">getPageCount</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="re0">$i</span> <span class="sy0">=</span> <span class="re0">$beginPage</span><span class="sy0">;</span> <span class="re0">$i</span> <span class="sy0">&lt;=</span> <span class="re0">$endPage</span><span class="sy0">;</span> <span class="sy0">++</span><span class="re0">$i</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$items</span><span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">createPageListItem</span><span class="br0">&#40;</span><span class="re0">$i</span> <span class="sy0">+</span> <span class="nu0">1</span><span class="sy0">,</span> <span class="re0">$i</span><span class="sy0">,</span> <span class="kw4">null</span><span class="sy0">,</span> <span class="kw4">false</span><span class="sy0">,</span> <span class="re0">$i</span> <span class="sy0">==</span> <span class="re0">$currentPage</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// next page</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">nextPageLabel</span> <span class="sy0">!==</span> <span class="kw4">false</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="br0">&#40;</span><span class="re0">$page</span> <span class="sy0">=</span> <span class="re0">$currentPage</span> <span class="sy0">+</span> <span class="nu0">1</span><span class="br0">&#41;</span> <span class="sy0">&gt;=</span> <span class="re0">$pageCount</span> <span class="sy0">-</span> <span class="nu0">1</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$page</span> <span class="sy0">=</span> <span class="re0">$pageCount</span> <span class="sy0">-</span> <span class="nu0">1</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$items</span><span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">createPageListItem</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">nextPageLabel</span><span class="sy0">,</span> <span class="re0">$page</span><span class="sy0">,</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">nextPageCssClass</span><span class="sy0">,</span> <span class="re0">$currentPage</span> <span class="sy0">&gt;=</span> <span class="re0">$pageCount</span> <span class="sy0">-</span> <span class="nu0">1</span><span class="sy0">,</span> <span class="kw4">false</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// last page</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">lastPageLabel</span> <span class="sy0">!==</span> <span class="kw4">false</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$items</span><span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">createPageListItem</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">lastPageLabel</span><span class="sy0">,</span> <span class="re0">$pageCount</span> <span class="sy0">-</span> <span class="nu0">1</span><span class="sy0">,</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">lastPageCssClass</span><span class="sy0">,</span> <span class="re0">$currentPage</span> <span class="sy0">&gt;=</span> <span class="re0">$pageCount</span> <span class="sy0">-</span> <span class="nu0">1</span><span class="sy0">,</span> <span class="kw4">false</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="re0">$items</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp;
&nbsp; &nbsp; <span class="co4">/**</span>
<span class="co4">&nbsp; &nbsp; &nbsp;* Configure pageList item.</span>
<span class="co4">&nbsp; &nbsp; &nbsp;* @param string $label the text label for the button</span>
<span class="co4">&nbsp; &nbsp; &nbsp;* @param integer $page the page number</span>
<span class="co4">&nbsp; &nbsp; &nbsp;* @param string $class the CSS class for the page button.</span>
<span class="co4">&nbsp; &nbsp; &nbsp;* @param boolean $disabled whether this page button is disabled</span>
<span class="co4">&nbsp; &nbsp; &nbsp;* @param boolean $active whether this page button is active</span>
<span class="co4">&nbsp; &nbsp; &nbsp;* @return array</span>
<span class="co4">&nbsp; &nbsp; &nbsp;*/</span>
&nbsp; &nbsp; <span class="kw2">protected</span> <span class="kw2">function</span> createPageListItem<span class="br0">&#40;</span><span class="re0">$label</span><span class="sy0">,</span> <span class="re0">$page</span><span class="sy0">,</span> <span class="re0">$class</span><span class="sy0">,</span> <span class="re0">$disabled</span><span class="sy0">,</span> <span class="re0">$active</span><span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$item</span> <span class="sy0">=</span> <span class="br0">&#91;</span><span class="st_h">'label'</span> <span class="sy0">=&gt;</span> <span class="re0">$label</span><span class="br0">&#93;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$options</span> <span class="sy0">=</span> <span class="br0">&#91;</span><span class="st_h">'class'</span> <span class="sy0">=&gt;</span> <span class="re0">$class</span> <span class="sy0">===</span> <span class="st_h">''</span> ? <span class="kw4">null</span> <span class="sy0">:</span> <span class="re0">$class</span><span class="br0">&#93;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$active</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Html<span class="sy0">::</span><span class="me2">addCssClass</span><span class="br0">&#40;</span><span class="re0">$options</span><span class="sy0">,</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">activePageCssClass</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$disabled</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Html<span class="sy0">::</span><span class="me2">addCssClass</span><span class="br0">&#40;</span><span class="re0">$options</span><span class="sy0">,</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">disabledPageCssClass</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$item</span><span class="br0">&#91;</span><span class="st_h">'options'</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="re0">$options</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="re0">$item</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$linkOptions</span> <span class="sy0">=</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">linkOptions</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$linkOptions</span><span class="br0">&#91;</span><span class="st_h">'data-page'</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="re0">$page</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$item</span><span class="br0">&#91;</span><span class="st_h">'options'</span><span class="br0">&#93;</span> &nbsp; &nbsp; <span class="sy0">=</span> <span class="re0">$options</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$item</span><span class="br0">&#91;</span><span class="st_h">'linkOptions'</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="re0">$linkOptions</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$item</span><span class="br0">&#91;</span><span class="st_h">'url'</span><span class="br0">&#93;</span> &nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">=</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">pagination</span><span class="sy0">-&gt;</span><span class="me1">createUrl</span><span class="br0">&#40;</span><span class="re0">$page</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="re0">$item</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp;
&nbsp; &nbsp; <span class="co4">/**</span>
<span class="co4">&nbsp; &nbsp; &nbsp;* Creates a configuration array for pageSize Dropdown items.</span>
<span class="co4">&nbsp; &nbsp; &nbsp;* Refer to description for \yii\bootstrap\Dropdown::$items property.</span>
<span class="co4">&nbsp; &nbsp; &nbsp;* @return array</span>
<span class="co4">&nbsp; &nbsp; &nbsp;*/</span>
&nbsp; &nbsp; <span class="kw2">protected</span> <span class="kw2">function</span> configurePageSizeItems<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$items</span> <span class="sy0">=</span> <span class="br0">&#91;</span><span class="br0">&#93;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$currentPageSize</span> <span class="sy0">=</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">pagination</span><span class="sy0">-&gt;</span><span class="me1">getPageSize</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">foreach</span> <span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">pageSizeItems</span> <span class="kw1">as</span> <span class="re0">$item</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$items</span><span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">createPageSizeItem</span><span class="br0">&#40;</span><span class="re0">$item</span><span class="sy0">,</span> <span class="re0">$item</span><span class="sy0">,</span> <span class="kw4">null</span><span class="sy0">,</span> <span class="kw4">false</span><span class="sy0">,</span> <span class="re0">$currentPageSize</span> <span class="sy0">==</span> <span class="re0">$item</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="re0">$items</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp;
&nbsp; &nbsp; <span class="co4">/**</span>
<span class="co4">&nbsp; &nbsp; &nbsp;* Configure pageSize item.</span>
<span class="co4">&nbsp; &nbsp; &nbsp;* @param string $label the text label for the button</span>
<span class="co4">&nbsp; &nbsp; &nbsp;* @param integer $page the page number</span>
<span class="co4">&nbsp; &nbsp; &nbsp;* @param string $class the CSS class for the page button.</span>
<span class="co4">&nbsp; &nbsp; &nbsp;* @param boolean $disabled whether this page button is disabled</span>
<span class="co4">&nbsp; &nbsp; &nbsp;* @param boolean $active whether this page button is active</span>
<span class="co4">&nbsp; &nbsp; &nbsp;* @return array</span>
<span class="co4">&nbsp; &nbsp; &nbsp;*/</span>
&nbsp; &nbsp; <span class="kw2">protected</span> <span class="kw2">function</span> createPageSizeItem<span class="br0">&#40;</span><span class="re0">$label</span><span class="sy0">,</span> <span class="re0">$pageSize</span><span class="sy0">,</span> <span class="re0">$class</span><span class="sy0">,</span> <span class="re0">$disabled</span><span class="sy0">,</span> <span class="re0">$active</span><span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$item</span> <span class="sy0">=</span> <span class="br0">&#91;</span><span class="st_h">'label'</span> <span class="sy0">=&gt;</span> <span class="re0">$label</span><span class="br0">&#93;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$options</span> <span class="sy0">=</span> <span class="br0">&#91;</span><span class="st_h">'class'</span> <span class="sy0">=&gt;</span> <span class="re0">$class</span> <span class="sy0">===</span> <span class="st_h">''</span> ? <span class="kw4">null</span> <span class="sy0">:</span> <span class="re0">$class</span><span class="br0">&#93;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$active</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Html<span class="sy0">::</span><span class="me2">addCssClass</span><span class="br0">&#40;</span><span class="re0">$options</span><span class="sy0">,</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">activePageCssClass</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$disabled</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Html<span class="sy0">::</span><span class="me2">addCssClass</span><span class="br0">&#40;</span><span class="re0">$options</span><span class="sy0">,</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">disabledPageCssClass</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$item</span><span class="br0">&#91;</span><span class="st_h">'options'</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="re0">$options</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="re0">$item</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$linkOptions</span> <span class="sy0">=</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">linkOptions</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$item</span><span class="br0">&#91;</span><span class="st_h">'options'</span><span class="br0">&#93;</span> &nbsp; &nbsp; <span class="sy0">=</span> <span class="re0">$options</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$item</span><span class="br0">&#91;</span><span class="st_h">'linkOptions'</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="re0">$linkOptions</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$item</span><span class="br0">&#91;</span><span class="st_h">'url'</span><span class="br0">&#93;</span> &nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">=</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">pagination</span><span class="sy0">-&gt;</span><span class="me1">createUrl</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">pagination</span><span class="sy0">-&gt;</span><span class="me1">getPage</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">,</span><span class="re0">$pageSize</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="re0">$item</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp;
&nbsp; &nbsp; <span class="co4">/**</span>
<span class="co4">&nbsp; &nbsp; &nbsp;* Register JS-code for pageJump block.</span>
<span class="co4">&nbsp; &nbsp; &nbsp;*/</span>
&nbsp; &nbsp; <span class="kw2">private</span> <span class="kw2">function</span> registerJs<span class="br0">&#40;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$url</span> <span class="sy0">=</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">pagination</span><span class="sy0">-&gt;</span><span class="me1">createUrl</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">pagination</span><span class="sy0">-&gt;</span><span class="me1">getPage</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$jumpToJs</span> <span class="sy0">=</span> <span class="co3">&lt;&lt;&lt;JS</span>
<span class="co3">&nbsp; &nbsp; &nbsp; &nbsp; $('input[name=&quot;page&quot;]').on('keydown', function (evt) {</span>
<span class="co3">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (evt.which == 13) {</span>
<span class="co3">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var url = &quot;$url&quot;;</span>
<span class="co3">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var targetPage = &nbsp;$(this).val();</span>
<span class="co3">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var newUrl = url.replace(/([?&amp;]page=)\d{1,}/, &quot;$1&quot;+targetPage);</span>
<span class="co3">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; window.location.href = newUrl;</span>
<span class="co3">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</span>
<span class="co3">&nbsp; &nbsp; &nbsp; &nbsp; });</span>
<span class="co3">JS</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">getView</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">registerJs</span><span class="br0">&#40;</span><span class="re0">$jumpToJs</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
<span class="br0">&#125;</span></pre></td></tr></table></div></td></tr></tbody></table></div><b>Применение</b>:<br />
<i>view</i>:<br />
<div class="codeblock"><table class="php"><thead><tr><td colspan="2" id="816939345"  class="head">PHP</td></tr></thead><tbody><tr class="li1"><td><div id="816939345" style="height: 302px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
</pre></td><td class="de1"><pre class="de1"><span class="kw1">echo</span> GridView<span class="sy0">::</span><span class="me2">widget</span><span class="br0">&#40;</span><span class="br0">&#91;</span>
&nbsp; &nbsp; <span class="st_h">'pager'</span> <span class="sy0">=&gt;</span> <span class="br0">&#91;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'class'</span> <span class="sy0">=&gt;</span> \app\widgets\AdvancedLinkPager<span class="sy0">::</span><span class="kw2">class</span><span class="sy0">,</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'options'</span> <span class="sy0">=&gt;</span> <span class="br0">&#91;</span><span class="st_h">'class'</span> <span class="sy0">=&gt;</span> <span class="st_h">'pagination'</span><span class="br0">&#93;</span><span class="sy0">,</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'firstPageLabel'</span> <span class="sy0">=&gt;</span> <span class="st_h">'начало'</span><span class="sy0">,</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'lastPageLabel'</span> <span class="sy0">=&gt;</span> <span class="st_h">'конец'</span><span class="sy0">,</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'hideOnSinglePage'</span> <span class="sy0">=&gt;</span> <span class="kw4">false</span><span class="sy0">,</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'template'</span> <span class="sy0">=&gt;</span> <span class="st_h">'{pageButtons}{pageList}{pageSize}{pageJump}'</span><span class="sy0">,</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'pageListLabel'</span> <span class="sy0">=&gt;</span> <span class="st_h">'Страница'</span><span class="sy0">,</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'pageListCssClass'</span> <span class="sy0">=&gt;</span> <span class="st_h">'btn btn-warning dropdown-toggle'</span><span class="sy0">,</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'pageSizeLabel'</span> <span class="sy0">=&gt;</span> <span class="st_h">'Размер'</span><span class="sy0">,</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'pageSizeCssClass'</span> <span class="sy0">=&gt;</span> <span class="st_h">'btn btn-primary dropdown-toggle'</span><span class="sy0">,</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'pageSizeItems'</span> <span class="sy0">=&gt;</span> <span class="br0">&#91;</span><span class="nu0">1</span><span class="sy0">,</span> <span class="nu0">10</span><span class="sy0">,</span> <span class="nu0">25</span><span class="sy0">,</span> <span class="nu0">50</span><span class="sy0">,</span> <span class="nu0">100</span><span class="br0">&#93;</span><span class="sy0">,</span>
&nbsp; &nbsp; <span class="br0">&#93;</span><span class="sy0">,</span>
&nbsp; &nbsp; <span class="sy0">...</span>
<span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></td></tr></table></div></td></tr></tbody></table></div><i>searchModel</i>:<br />
<div class="codeblock"><table class="php"><thead><tr><td colspan="2" id="759052689"  class="head">PHP</td></tr></thead><tbody><tr class="li1"><td><div id="759052689" style="height: 222px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td class="de1"><pre class="de1"><span class="kw2">public</span> <span class="kw2">function</span> search<span class="br0">&#40;</span><span class="re0">$params</span><span class="br0">&#41;</span>
<span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="sy0">...</span>
&nbsp; &nbsp; <span class="re0">$pageSize</span> <span class="sy0">=</span> <span class="kw3">isset</span><span class="br0">&#40;</span><span class="re0">$params</span><span class="br0">&#91;</span><span class="st_h">'per-page'</span><span class="br0">&#93;</span><span class="br0">&#41;</span> ? <span class="kw3">intval</span><span class="br0">&#40;</span><span class="re0">$params</span><span class="br0">&#91;</span><span class="st_h">'per-page'</span><span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="sy0">:</span> <span class="nu0">10</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="re0">$dataProvider</span> <span class="sy0">=</span> <span class="kw2">new</span> ActiveDataProvider<span class="br0">&#40;</span><span class="br0">&#91;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'query'</span> <span class="sy0">=&gt;</span> <span class="re0">$query</span><span class="sy0">,</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'pagination'</span> <span class="sy0">=&gt;</span> &nbsp;<span class="br0">&#91;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">'pageSize'</span> <span class="sy0">=&gt;</span> <span class="re0">$pageSize</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#93;</span><span class="sy0">,</span>
&nbsp; &nbsp; <span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="sy0">...</span>
<span class="br0">&#125;</span></pre></td></tr></table></div></td></tr></tbody></table></div><a rel="nofollow noopener noreferrer" href="https://github.com/ProkopenkoRoman/yii2-widget-advanced-linkpager" target="_blank" title="https://github.com/ProkopenkoRoman/yii2-widget-advanced-linkpager">Ссылка на репозиторий</a>.</div>

]]></content:encoded>
			<dc:creator>long399</dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/419889/7231.html</guid>
		</item>
		<item>
			<title>Обложки альбомов rock/metal групп, как отдельный вид искусства (часть 2)</title>
			<link>https://www.cyberforum.ru/blogs/419889/7065.html</link>
			<pubDate>Mon, 05 Apr 2021 14:09:48 GMT</pubDate>
			<description>Новая порция оригинальных и красивых обложек альбомов. Начало здесь...</description>
			<content:encoded><![CDATA[<div>Новая порция оригинальных и красивых обложек альбомов. Начало <a href="https://www.cyberforum.ru/blogs/419889/blog6471.html">здесь</a>.<br />
<br />
<table cellspacing="1" cellpadding="5" class="stg_table tborder sortable" id="sorttable804" style="width:100%; "><thead class="thead"><tr><th>#</th><th>Группа</th><th>Жанр</th><th>Страна</th><th>Альбом</th><th>Обложка</th></tr></thead><tbody><tr class="alt2"><td>1</td><td><div align="center"><b>[Atlantean Kodex]</b></div></td><td><div align="center"><u>epic metal</u></div></td><td><div align="center">Германия</div></td><td><div align="center"><i>The Pnakotic Demos (2007)</i></div></td><td><a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6920&amp;d=1617628274" rel="Lightbox" id="attachment6920" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6920&amp;thumb=1&amp;d=1617628274" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: 8e56748dc3f5dad21bfd0f7f6f6b3b21.jpg
Просмотров: 285
Размер:	227.9 Кб
ID:	6920" style="margin: 5px" /></a></td></tr><tr class="alt1"><td>2</td><td><div align="center"><b>Eisbrecher</b></div></td><td><div align="center"><u>industrial metal</u></div></td><td><div align="center">Германия</div></td><td><div align="center"><i>Sünde (2008)</i></div></td><td><a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6921&amp;d=1617628448" rel="Lightbox" id="attachment6921" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6921&amp;thumb=1&amp;d=1617628448" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: 1000x1000.jpg
Просмотров: 326
Размер:	95.1 Кб
ID:	6921" style="margin: 5px" /></a></td></tr><tr class="alt2"><td>3</td><td><div align="center"><b>Gotham Police Station</b></div></td><td><div align="center"><u>post metal/melodic hardcore metal</u></div></td><td><div align="center">Украина</div></td><td><div align="center"><i>Sad &amp; Agressive (2015)</i></div></td><td><a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6922&amp;d=1617628554" rel="Lightbox" id="attachment6922" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6922&amp;thumb=1&amp;d=1617628554" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: 89689866.jpg
Просмотров: 301
Размер:	34.9 Кб
ID:	6922" style="margin: 5px" /></a></td></tr><tr class="alt1"><td>4</td><td><div align="center"><b>Heldmaschine</b></div></td><td><div align="center"><u>industrial metal</u></div></td><td><div align="center">Германия</div></td><td><div align="center"><i>Weichen + Zunder (2012)</i></div></td><td><a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6923&amp;d=1617629831" rel="Lightbox" id="attachment6923" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6923&amp;thumb=1&amp;d=1617629831" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: m1000x1000.jpg
Просмотров: 259
Размер:	112.5 Кб
ID:	6923" style="margin: 5px" /></a></td></tr><tr class="alt2"><td>5</td><td><div align="center"><b>I Am A Preacher</b></div></td><td><div align="center"><u>hardcore metal</u></div></td><td><div align="center">Белоруссия</div></td><td><div align="center"><i>II (2018)</i></div></td><td><a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6924&amp;d=1617628902" rel="Lightbox" id="attachment6924" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6924&amp;thumb=1&amp;d=1617628902" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: 2Ls8m.jpg
Просмотров: 310
Размер:	640.1 Кб
ID:	6924" style="margin: 5px" /></a></td></tr><tr class="alt1"><td>6</td><td><div align="center"><b>Linkin Park</b></div></td><td><div align="center"><u>nu-metal</u></div></td><td><div align="center">США</div></td><td><div align="center"><i>Meteora (2003)</i></div></td><td><a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6925&amp;d=1617629015" rel="Lightbox" id="attachment6925" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6925&amp;thumb=1&amp;d=1617629015" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: Meteora.jpg
Просмотров: 318
Размер:	87.5 Кб
ID:	6925" style="margin: 5px" /></a></td></tr><tr class="alt2"><td>7</td><td><div align="center"><b>Rammstein</b></div></td><td><div align="center"><u>industrial metal</u></div></td><td><div align="center">Германия</div></td><td><div align="center"><i>Rosenrot (2005)</i></div></td><td><a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6926&amp;d=1617629342" rel="Lightbox" id="attachment6926" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6926&amp;thumb=1&amp;d=1617629342" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: 1321515361_rammstein-rosenrot.jpg
Просмотров: 294
Размер:	218.9 Кб
ID:	6926" style="margin: 5px" /></a></td></tr><tr class="alt1"><td>8</td><td><div align="center"><b>Slipknot</b></div></td><td><div align="center"><u>nu-metal</u></div></td><td><div align="center">США</div></td><td><div align="center"><i>Vol. 3: (The Subliminal Verses) (2004)</i></div></td><td><a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6927&amp;d=1617629460" rel="Lightbox" id="attachment6927" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6927&amp;thumb=1&amp;d=1617629460" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: hIGPnH9r.jpg
Просмотров: 261
Размер:	227.3 Кб
ID:	6927" style="margin: 5px" /></a></td></tr><tr class="alt2"><td>9</td><td><div align="center"><b>Starset</b></div></td><td><div align="center"><u>alternative</u></div></td><td><div align="center">США</div></td><td><div align="center"><i>Vessels (2017)</i></div></td><td><a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6928&amp;d=1617629903" rel="Lightbox" id="attachment6928" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6928&amp;thumb=1&amp;d=1617629903" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: m1000x1000-.jpg
Просмотров: 255
Размер:	164.3 Кб
ID:	6928" style="margin: 5px" /></a></td></tr><tr class="alt1"><td>10</td><td><div align="center"><b>Stigmata</b></div></td><td><div align="center"><u>metalcore</u></div></td><td><div align="center">Россия</div></td><td><div align="center"><i>Мой путь (2009)</i></div></td><td><a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6929&amp;d=1617630027" rel="Lightbox" id="attachment6929" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6929&amp;thumb=1&amp;d=1617630027" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: stigmata_moj_put.jpg
Просмотров: 284
Размер:	280.3 Кб
ID:	6929" style="margin: 5px" /></a></td></tr><tr class="alt2"><td>11</td><td><div align="center"><b>The Drowning</b></div></td><td><div align="center"><u>doom death metal</u></div></td><td><div align="center">Великобритания</div></td><td><div align="center"><i>The Radiant Dark (2019)</i></div></td><td><a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6930&amp;d=1617630185" rel="Lightbox" id="attachment6930" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6930&amp;thumb=1&amp;d=1617630185" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: TheDrowningBandcamp2-1170x1170.jpg
Просмотров: 281
Размер:	336.4 Кб
ID:	6930" style="margin: 5px" /></a></td></tr><tr class="alt1"><td>12</td><td><div align="center"><b>Vitriol</b></div></td><td><div align="center"><u>death metal</u></div></td><td><div align="center">США</div></td><td><div align="center"><i>To Bathe From the Throat of Cowardice (2019)</i></div></td><td><a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6931&amp;d=1617630489" rel="Lightbox" id="attachment6931" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6931&amp;thumb=1&amp;d=1617630489" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: vitriol__to_bathe_from_the_throat_of_cowardice_180_gr1.jpg
Просмотров: 235
Размер:	187.6 Кб
ID:	6931" style="margin: 5px" /></a></td></tr><tr class="alt2"><td>13</td><td><div align="center"><b>When Nothing Remains</b></div></td><td><div align="center"><u>melodic death metal/doom metal</u></div></td><td><div align="center">Швеция</div></td><td><div align="center"><i>As All Torn Asunder (2012)</i></div></td><td><a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6932&amp;d=1617630615" rel="Lightbox" id="attachment6932" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6932&amp;thumb=1&amp;d=1617630615" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: as-all-torn-asunder-5515738317318.jpg
Просмотров: 267
Размер:	314.8 Кб
ID:	6932" style="margin: 5px" /></a></td></tr><tr class="alt1"><td>14</td><td><div align="center"><b>Defiler</b></div></td><td><div align="center"><u>deathcore</u></div></td><td><div align="center">США</div></td><td><div align="center"><i>The Lazarus Sign / Hollow Bastion (2015)</i></div></td><td><a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6933&amp;d=1617630844" rel="Lightbox" id="attachment6933" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6933&amp;thumb=1&amp;d=1617630844" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: 31912753_800_800.jpg
Просмотров: 255
Размер:	76.4 Кб
ID:	6933" style="margin: 5px" /></a></td></tr><tr class="alt2"><td>15</td><td><div align="center"><b>Caladan Brood</b></div></td><td><div align="center"><u>atmospheric black metal/doom metal</u></div></td><td><div align="center">США</div></td><td><div align="center"><i>Echoes of Battle (2013)</i></div></td><td><a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6934&amp;d=1617631089" rel="Lightbox" id="attachment6934" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6934&amp;thumb=1&amp;d=1617631089" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: s-l1600.jpg
Просмотров: 295
Размер:	355.9 Кб
ID:	6934" style="margin: 5px" /></a></td></tr></tbody></table><br />
Делитесь и вы вашими любимыми музыкальными коллективами и их альбомами! Будет интересно узнать, кто какую музыку слушает.</div>

]]></content:encoded>
			<dc:creator>long399</dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/419889/7065.html</guid>
		</item>
		<item>
			<title>Разбиение строки на вектор слов в C++</title>
			<link>https://www.cyberforum.ru/blogs/419889/6865.html</link>
			<pubDate>Thu, 10 Dec 2020 07:14:27 GMT</pubDate>
			<description>Частенько приходится сталкиваться с задачей разбиения строки на слова. Особенно когда помогаю...</description>
			<content:encoded><![CDATA[<div>Частенько приходится сталкиваться с задачей разбиения строки на слова. Особенно когда помогаю новичкам с заданиями в разделе <a href="https://www.cyberforum.ru/cpp-beginners/">C++ для начинающих</a>.<br />
<br />
Оставлю здесь код-заготовку, чтобы каждый раз не делать поиск по форуму.<br />
<br />
Буду рад, если кому-то еще она поможет чем-то.<br />
<br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="356292893"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="356292893" style="height: 350px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
</pre></td><td class="de1"><pre class="de1"><span class="co2">#include &lt;iostream&gt;</span>
<span class="co2">#include &lt;vector&gt;</span>
<span class="co2">#include &lt;string&gt;</span>
<span class="co2">#include &lt;algorithm&gt;</span>
<span class="co2">#include &lt;sstream&gt;</span>
&nbsp;
<span class="co1">// замена в строке str всех встречающихся в строке separators символов на пробел</span>
<span class="kw4">void</span> replaceSeparators <span class="br0">&#40;</span>std<span class="sy4">::</span><span class="me2">string</span> <span class="sy3">&amp;</span>str, <span class="kw4">const</span> std<span class="sy4">::</span><span class="me2">string</span> <span class="sy3">&amp;</span>separators<span class="sy1">=</span><span class="st0">&quot;<span class="es1">\n</span>,.!?-()[]{};:$%&amp;^*'<span class="es1">\&quot;</span><span class="es1">\\</span>/|@#№~=+<span class="es1">\t</span>&quot;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; std<span class="sy4">::</span><span class="me2">replace_if</span><span class="br0">&#40;</span>
&nbsp; &nbsp; &nbsp; &nbsp; str.<span class="me1">begin</span><span class="br0">&#40;</span><span class="br0">&#41;</span>,
&nbsp; &nbsp; &nbsp; &nbsp; str.<span class="me1">end</span><span class="br0">&#40;</span><span class="br0">&#41;</span>,
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span><span class="sy3">&amp;</span>separators<span class="br0">&#93;</span> <span class="br0">&#40;</span><span class="kw4">char</span> c<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="kw1">return</span> separators.<span class="me1">find</span><span class="br0">&#40;</span>c<span class="br0">&#41;</span> <span class="sy3">!</span><span class="sy1">=</span> std<span class="sy4">::</span><span class="me2">string</span><span class="sy4">::</span><span class="me2">npos</span><span class="sy4">;</span> <span class="br0">&#125;</span>,
&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">' '</span>
&nbsp; &nbsp; <span class="br0">&#41;</span><span class="sy4">;</span>
<span class="br0">&#125;</span>
&nbsp;
<span class="co1">// разбиение строки str на слова</span>
std<span class="sy4">::</span><span class="me2">vector</span> <span class="sy1">&lt;</span>std<span class="sy4">::</span><span class="me2">string</span><span class="sy1">&gt;</span> explodeString <span class="br0">&#40;</span><span class="kw4">const</span> std<span class="sy4">::</span><span class="me2">string</span> <span class="sy3">&amp;</span>str<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; std<span class="sy4">::</span><span class="me2">vector</span> <span class="sy1">&lt;</span>std<span class="sy4">::</span><span class="me2">string</span><span class="sy1">&gt;</span> result<span class="sy4">;</span>
&nbsp; &nbsp; std<span class="sy4">::</span><span class="me2">string</span> word<span class="sy4">;</span>
&nbsp;
&nbsp; &nbsp; std<span class="sy4">::</span><span class="me2">istringstream</span> ss <span class="br0">&#40;</span>str<span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp;
&nbsp; &nbsp; <span class="kw1">while</span><span class="br0">&#40;</span> ss <span class="sy1">&gt;&gt;</span> word <span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; result.<span class="me1">push_back</span><span class="br0">&#40;</span>word<span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp;
&nbsp; &nbsp; <span class="kw1">return</span> result<span class="sy4">;</span>
<span class="br0">&#125;</span>
&nbsp;
<span class="kw4">int</span> main <span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; std<span class="sy4">::</span><span class="me2">string</span> str<span class="sy4">;</span>
&nbsp;
&nbsp; &nbsp; std<span class="sy4">::</span><span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;Введите строку: &quot;</span><span class="sy4">;</span> <span class="co1">// latin symbols only</span>
&nbsp; &nbsp; std<span class="sy4">::</span><span class="me2">getline</span><span class="br0">&#40;</span>std<span class="sy4">::</span><span class="kw3">cin</span>, str<span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp;
&nbsp; &nbsp; replaceSeparators<span class="br0">&#40;</span>str<span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp;
&nbsp; &nbsp; std<span class="sy4">::</span><span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;Слова:&quot;</span> <span class="sy1">&lt;&lt;</span> std<span class="sy4">::</span><span class="me2">endl</span><span class="sy4">;</span>
&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">auto</span> <span class="sy3">&amp;</span>word <span class="sy4">:</span> explodeString<span class="br0">&#40;</span>str<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; std<span class="sy4">::</span><span class="kw3">cout</span> <span class="sy1">&lt;&lt;</span> word <span class="sy1">&lt;&lt;</span> std<span class="sy4">::</span><span class="me2">endl</span><span class="sy4">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp;
&nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">0</span><span class="sy4">;</span>
<span class="br0">&#125;</span></pre></td></tr></table></div></td></tr></tbody></table></div>Еще, возможно, где-то пригодится функция удаления из строки &quot;лишних&quot; пробелов. Функция заменяет множественные пробелы в середине строки на один пробел, а также удаляет пробелы в начале и конце строки, если они там есть.<br />
<br />
<div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="964282051"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="964282051" style="height: 286px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
</pre></td><td class="de1"><pre class="de1"><span class="co1">// удаление из строки str &quot;лишних&quot; пробелов</span>
<span class="kw4">void</span> removeExtraSpaces <span class="br0">&#40;</span>std<span class="sy4">::</span><span class="me2">string</span> <span class="sy3">&amp;</span>str<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; std<span class="sy4">::</span><span class="kw4">size_t</span> pos<span class="sy4">;</span>
&nbsp;
&nbsp; &nbsp; <span class="kw1">while</span> <span class="br0">&#40;</span> <span class="br0">&#40;</span>pos <span class="sy1">=</span> str.<span class="me1">find</span><span class="br0">&#40;</span><span class="st0">&quot; &nbsp;&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="sy3">!</span><span class="sy1">=</span> std<span class="sy4">::</span><span class="me2">string</span><span class="sy4">::</span><span class="me2">npos</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; str <span class="sy1">=</span> str.<span class="me1">replace</span><span class="br0">&#40;</span>pos, <span class="nu0">2</span>, <span class="st0">&quot; &quot;</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp;
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>str.<span class="me1">front</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy1">==</span> <span class="st0">' '</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; str.<span class="me1">erase</span><span class="br0">&#40;</span><span class="nu0">0</span>, <span class="nu0">1</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp;
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>str.<span class="me1">back</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy1">==</span> <span class="st0">' '</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; str.<span class="me1">pop_back</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
<span class="br0">&#125;</span></pre></td></tr></table></div></td></tr></tbody></table></div></div>

]]></content:encoded>
			<dc:creator>long399</dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/419889/6865.html</guid>
		</item>
		<item>
			<title>Обложки альбомов rock/metal групп, как отдельный вид искусства</title>
			<link>https://www.cyberforum.ru/blogs/419889/6471.html</link>
			<pubDate>Thu, 09 Apr 2020 13:41:35 GMT</pubDate>
			<description>Так как слушаю в основном тяжелую музыку, заметил, что обложки альбомов у групп, выступающих в...</description>
			<content:encoded><![CDATA[<div>Так как слушаю в основном тяжелую музыку, заметил, что обложки альбомов у групп, выступающих в различных ответвлениях жанров <code class="inlinecode">rock</code> и <code class="inlinecode">metal</code> отличаются особой оригинальностью и изяществом. Часто они оформлены очень искусно, креативно и приятно для глаза.<br />
<br />
<table cellspacing="1" cellpadding="5" class="stg_table tborder sortable" id="sorttable7594" style="width:100%; "><thead class="thead"><tr><th>#</th><th>Группа</th><th>Жанр</th><th>Страна</th><th>Альбом</th><th>Обложка</th></tr></thead><tbody><tr class="alt2"><td>1</td><td><div align="center"><b>[AMATORY]</b></div></td><td><div align="center"><u>metalcore</u></div></td><td><div align="center">Россия</div></td><td><div align="center"><i>Инстинкт обреченных (2010)</i></div></td><td><a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6072&amp;d=1586164458" rel="Lightbox" id="attachment6072" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6072&amp;thumb=1&amp;d=1586164458" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: BmfgoR3Golo.jpg
Просмотров: 977
Размер:	192.0 Кб
ID:	6072" style="margin: 5px" /></a></td></tr><tr class="alt1"><td>2</td><td><div align="center"><b>Aborted</b></div></td><td><div align="center"><u>death metal</u></div></td><td><div align="center">Бельгия</div></td><td><div align="center"><i>Termination Redux (2016)</i></div></td><td><a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6073&amp;d=1586164827" rel="Lightbox" id="attachment6073" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6073&amp;thumb=1&amp;d=1586164827" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: 1531.jpg
Просмотров: 1513
Размер:	212.7 Кб
ID:	6073" style="margin: 5px" /></a></td></tr><tr class="alt2"><td>3</td><td><div align="center"><b>Agalloch</b></div></td><td><div align="center"><u>dark metal</u></div></td><td><div align="center">США</div></td><td><div align="center"><i>Ashes Against The Grain (2006)</i></div></td><td><a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6074&amp;d=1586165047" rel="Lightbox" id="attachment6074" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6074&amp;thumb=1&amp;d=1586165047" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: 263bba823463958bae563081e5908f43.jpg
Просмотров: 803
Размер:	221.6 Кб
ID:	6074" style="margin: 5px" /></a></td></tr><tr class="alt1"><td>4</td><td><div align="center"><b>Anaal Nathrakh</b></div></td><td><div align="center"><u>black death metal</u></div></td><td><div align="center">Великобритания</div></td><td><div align="center"><i>Vanitas (2012)</i></div></td><td><a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6075&amp;d=1586165362" rel="Lightbox" id="attachment6075" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6075&amp;thumb=1&amp;d=1586165362" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: CANDLE390CD.jpg
Просмотров: 904
Размер:	179.6 Кб
ID:	6075" style="margin: 5px" /></a></td></tr><tr class="alt2"><td>5</td><td><div align="center"><b>Atlantean Kodex</b></div></td><td><div align="center"><u>epic heavy doom metal</u></div></td><td><div align="center">Германия</div></td><td><div align="center"><i>The Golden Bough (2010)</i></div></td><td><a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6076&amp;d=1586165623" rel="Lightbox" id="attachment6076" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6076&amp;thumb=1&amp;d=1586165623" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: 1363714148_atlantean-kodex-the-golden-bough.jpg
Просмотров: 581
Размер:	173.2 Кб
ID:	6076" style="margin: 5px" /></a></td></tr><tr class="alt1"><td>6</td><td><div align="center"><b>Cartographs</b></div></td><td><div align="center"><u>post black metal</u></div></td><td><div align="center">Дания</div></td><td><div align="center"><i>Wilt &amp; Blossom (2019)</i></div></td><td><a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6077&amp;d=1586165877" rel="Lightbox" id="attachment6077" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6077&amp;thumb=1&amp;d=1586165877" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: 2RT8p.jpg
Просмотров: 631
Размер:	126.1 Кб
ID:	6077" style="margin: 5px" /></a></td></tr><tr class="alt2"><td>7</td><td><div align="center"><b>Inexistence</b></div></td><td><div align="center"><u>atmospheric black metal</u></div></td><td><div align="center">Аргентина</div></td><td><div align="center"><i>Inexistence (2013)</i></div></td><td><a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6090&amp;d=1586438696" rel="Lightbox" id="attachment6090" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6090&amp;thumb=1&amp;d=1586438696" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: 8c986771ecb44459867d705f6faf2a6e.jpg
Просмотров: 624
Размер:	87.3 Кб
ID:	6090" style="margin: 5px" /></a></td></tr><tr class="alt1"><td>8</td><td><div align="center"><b>Inverted Earth</b></div></td><td><div align="center"><u>death metal/groove metal</u></div></td><td><div align="center">США</div></td><td><div align="center"><i>Vection (2018)</i></div></td><td><a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6081&amp;d=1586270142" rel="Lightbox" id="attachment6081" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6081&amp;thumb=1&amp;d=1586270142" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: 5a8c99a3ce119.jpg
Просмотров: 750
Размер:	748.8 Кб
ID:	6081" style="margin: 5px" /></a></td></tr><tr class="alt2"><td>9</td><td><div align="center"><b>Morito Ergo Sum</b></div></td><td><div align="center"><u>doom metal</u></div></td><td><div align="center">Швеция</div></td><td><div align="center"><i>A Mournful Foreboding (2016)</i></div></td><td><a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6082&amp;d=1586270465" rel="Lightbox" id="attachment6082" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6082&amp;thumb=1&amp;d=1586270465" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: wIE4HkKymsk.jpg
Просмотров: 640
Размер:	108.9 Кб
ID:	6082" style="margin: 5px" /></a></td></tr><tr class="alt1"><td>10</td><td><div align="center"><b>Novembre</b></div></td><td><div align="center"><u>gothic metal/doom death metal</u></div></td><td><div align="center">Италия</div></td><td><div align="center"><i>URSA (2016)</i></div></td><td><a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6084&amp;d=1586436032" rel="Lightbox" id="attachment6084" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6084&amp;thumb=1&amp;d=1586436032" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: _dY8HC1vmxg.jpg
Просмотров: 715
Размер:	107.8 Кб
ID:	6084" style="margin: 5px" /></a></td></tr><tr class="alt2"><td>11</td><td><div align="center"><b>Remembrance</b></div></td><td><div align="center"><u>funeral doom metal</u></div></td><td><div align="center">Франция</div></td><td><div align="center"><i>Fall, Obsidian Night (2010)</i></div></td><td><a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6085&amp;d=1586436395" rel="Lightbox" id="attachment6085" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6085&amp;thumb=1&amp;d=1586436395" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: Fall Obsidian Night cover.jpg
Просмотров: 629
Размер:	122.2 Кб
ID:	6085" style="margin: 5px" /></a></td></tr><tr class="alt1"><td>12</td><td><div align="center"><b>Slumber</b></div></td><td><div align="center"><u>melodic death metal</u></div></td><td><div align="center">Швеция</div></td><td><div align="center"><i>Fallout (2004)</i></div></td><td><a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6086&amp;d=1586436887" rel="Lightbox" id="attachment6086" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6086&amp;thumb=1&amp;d=1586436887" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: 9095e669.jpg
Просмотров: 584
Размер:	129.3 Кб
ID:	6086" style="margin: 5px" /></a></td></tr><tr class="alt2"><td>13</td><td><div align="center"><b>Starset</b></div></td><td><div align="center"><u>alternative</u></div></td><td><div align="center">США</div></td><td><div align="center"><i>Transmissions (2014)</i></div></td><td><a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6087&amp;d=1586437149" rel="Lightbox" id="attachment6087" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6087&amp;thumb=1&amp;d=1586437149" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: 56bf6402bd0470a4728b456b.jpg
Просмотров: 730
Размер:	104.0 Кб
ID:	6087" style="margin: 5px" /></a></td></tr><tr class="alt1"><td>14</td><td><div align="center"><b>The Drowning</b></div></td><td><div align="center"><u>doom death metal</u></div></td><td><div align="center">Великобритания</div></td><td><div align="center"><i>Senescent Signs (2016)</i></div></td><td><a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6088&amp;d=1586437589" rel="Lightbox" id="attachment6088" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6088&amp;thumb=1&amp;d=1586437589" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: 93ac8411959287bfa4d4cda169113430.jpg
Просмотров: 613
Размер:	221.6 Кб
ID:	6088" style="margin: 5px" /></a></td></tr><tr class="alt2"><td>15</td><td><div align="center"><b>When Nothing Remains</b></div></td><td><div align="center"><u>melodic death metal/doom metal</u></div></td><td><div align="center">Швеция</div></td><td><div align="center"><i>Thy Dark Serenity (2013)</i></div></td><td><a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6089&amp;d=1586437875" rel="Lightbox" id="attachment6089" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=6089&amp;thumb=1&amp;d=1586437875" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: lk2N3RDIbpg.jpg
Просмотров: 663
Размер:	70.7 Кб
ID:	6089" style="margin: 5px" /></a></td></tr></tbody></table><br />
Но, разумеется, данная музыка привлекает меня не только красочным оформлением обложек. Нравится мне в ней мрачная агрессия вокала и мощная инструментальная составляющая.<br />
<br />
Будет интересно узнать, а какую музыку слушаете вы. И есть ли какие-то обложки альбомов, которые вам нравятся более других? Прикрепляйте их в комментариях!</div>

]]></content:encoded>
			<dc:creator>long399</dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/419889/6471.html</guid>
		</item>
		<item>
			<title>Рекурсивный обход каталога в PHP</title>
			<link>https://www.cyberforum.ru/blogs/419889/6272.html</link>
			<pubDate>Thu, 09 Jan 2020 08:51:57 GMT</pubDate>
			<description>Недавно на работе возникла необходимость получения содержимого определенного каталога, назовем его...</description>
			<content:encoded><![CDATA[<div>Недавно на работе возникла необходимость получения содержимого определенного каталога, назовем его <code class="inlinecode">dir</code>. Это подразумевает также и рекурсивное получение содержимого всех каталогов, находящихся внутри каталога <code class="inlinecode">dir</code>, например <code class="inlinecode">dir/dir1</code>, <code class="inlinecode">dir/dir2</code> и т.д.<br />
<br />
Не хотелось реализовывать это стандартными средствами ( <b>opendir()</b>, <b>readdir()</b>, <b>closedir()</b> ) и писать рекурсивную функцию обхода дерева каталогов, поэтому полез в интернет в поисках более простого и короткого решения.<br />
<br />
Наткнулся на код, реализованный с использованием рекурсивных итераторов. Используются два класса: <b>RecursiveIteratorIterator </b>и <b>RecursiveDirectoryIterator</b>.<br />
<ol style="list-style-type: decimal"><li><a rel="nofollow noopener noreferrer" href="https://www.php.net/manual/ru/class.recursiveiteratoriterator.php" target="_blank" title="https://www.php.net/manual/ru/class.recursiveiteratoriterator.php">RecursiveIteratorIterator</a> - класс, который может быть использован для перебора рекурсивных итераторов.</li>
<li><a rel="nofollow noopener noreferrer" href="https://www.php.net/manual/ru/class.recursivedirectoryiterator.php" target="_blank" title="https://www.php.net/manual/ru/class.recursivedirectoryiterator.php">RecursiveDirectoryIterator</a> - класс, предоставляющий интерфейс для рекурсивного перебора каталогов файловой системы.</li>
</ol><br />
Немного переделал код под свои нужды, но основную идею обхода (и вывода) дерева каталогов привожу ниже, возможно когда-то, кому-то и пригодится.<br />
<br />
<div class="codeblock"><table class="php"><thead><tr><td colspan="2" id="37770037"  class="head">PHP</td></tr></thead><tbody><tr class="li1"><td><div id="37770037" style="height: 158px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
</pre></td><td class="de1"><pre class="de1"><span class="re0">$dir</span> <span class="sy0">=</span> <span class="st0">&quot;D:<span class="es1">\\</span>somedir&quot;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; 
<span class="re0">$rdir</span> <span class="sy0">=</span> <span class="kw2">new</span> \RecursiveIteratorIterator<span class="br0">&#40;</span><span class="kw2">new</span> \RecursiveDirectoryIterator<span class="br0">&#40;</span><span class="re0">$dir</span><span class="br0">&#41;</span><span class="sy0">,</span> <span class="kw4">TRUE</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
<span class="kw1">foreach</span> <span class="br0">&#40;</span><span class="re0">$rdir</span> <span class="kw1">as</span> <span class="re0">$file</span><span class="br0">&#41;</span>
<span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw1">echo</span> <span class="kw3">str_repeat</span><span class="br0">&#40;</span><span class="st_h">'-- '</span><span class="sy0">,</span> <span class="re0">$rdir</span><span class="sy0">-&gt;</span><span class="me1">getDepth</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="sy0">.</span> <span class="re0">$file</span> <span class="sy0">.</span> PHP_EOL<span class="sy0">;</span>
<span class="br0">&#125;</span></pre></td></tr></table></div></td></tr></tbody></table></div></div>


<!-- attachments -->
	<div style="margin-top:10px">

		
			<fieldset class="fieldset">
				<legend>Миниатюры</legend>
				<div style="padding:3px">
				
	<a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=5806&amp;d=1578559257" target="attachment" rel="Lightbox" id="attachment5806"><img loading="lazy" decoding="async" class="thumbnail" src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=5806&amp;stc=1&amp;thumb=1&amp;d=1578559257" border="0" alt="Нажмите на изображение для увеличения
Название: tree.png
Просмотров: 1249
Размер:	53.0 Кб
ID:	5806" /></a>
	&nbsp;
	

				</div>
			</fieldset>
		
		
		
		

	</div>
<!-- / attachments -->
]]></content:encoded>
			<dc:creator>long399</dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/419889/6272.html</guid>
		</item>
		<item>
			<title>Фриланс. Начало</title>
			<link>https://www.cyberforum.ru/blogs/419889/6239.html</link>
			<pubDate>Thu, 19 Dec 2019 06:39:23 GMT</pubDate>
			<description>Недавно решил попробовать заняться фрилансом в свободное время, которого, пока-что, не так много. 
...</description>
			<content:encoded><![CDATA[<div>Недавно решил попробовать заняться фрилансом в свободное время, которого, пока-что, не так много.<br />
<br />
Помогаю с учебными задачами на C | C++ | PHP | Pascal. Также решаю задачи по математическим дисциплинам (мат. анализ, дискретная математика, численные методы). Выполняю работы без предоплаты.<br />
<br />
<a href="https://www.cyberforum.ru/freelancers-offers/thread2545697.html">Ссылка не тему</a> в разделе &quot;Предложения фрилансеров&quot;.</div>

]]></content:encoded>
			<dc:creator>long399</dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/419889/6239.html</guid>
		</item>
		<item>
			<title>Давненько в этом блоге ничего не появлялось!</title>
			<link>https://www.cyberforum.ru/blogs/419889/6177.html</link>
			<pubDate>Wed, 20 Nov 2019 12:28:25 GMT</pubDate>
			<description><![CDATA[Хочу выразить благодарность пользователям, которые способны сказать банальное "спасибо" за помощь!...]]></description>
			<content:encoded><![CDATA[<div>Хочу выразить благодарность пользователям, которые способны сказать банальное &quot;спасибо&quot; за помощь! Это всегда приятно, знать, что твою помощь оценили!</div>


<!-- attachments -->
	<div style="margin-top:10px">

		
			<fieldset class="fieldset">
				<legend>Миниатюры</legend>
				<div style="padding:3px">
				
	<a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=5708&amp;d=1574252857" target="attachment" rel="Lightbox" id="attachment5708"><img loading="lazy" decoding="async" class="thumbnail" src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=5708&amp;stc=1&amp;thumb=1&amp;d=1574252857" border="0" alt="Нажмите на изображение для увеличения
Название: Screenshot_1.png
Просмотров: 2962
Размер:	61.2 Кб
ID:	5708" /></a>
	&nbsp;
	

	<a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=5709&amp;d=1574252857" target="attachment" rel="Lightbox" id="attachment5709"><img loading="lazy" decoding="async" class="thumbnail" src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=5709&amp;stc=1&amp;thumb=1&amp;d=1574252857" border="0" alt="Нажмите на изображение для увеличения
Название: Screenshot_2.png
Просмотров: 2546
Размер:	11.2 Кб
ID:	5709" /></a>
	&nbsp;
	

				</div>
			</fieldset>
		
		
		
		

	</div>
<!-- / attachments -->
]]></content:encoded>
			<dc:creator>long399</dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/419889/6177.html</guid>
		</item>
		<item>
			<title>Служба в армии</title>
			<link>https://www.cyberforum.ru/blogs/419889/2491.html</link>
			<pubDate>Mon, 23 Jun 2014 16:06:54 GMT</pubDate>
			<description>25.06.2014 ухожу в армию. Так что в случае чего, не теряйте :) Через год ждите))) Всем добра :good:</description>
			<content:encoded><![CDATA[<div>25.06.2014 ухожу в армию. Так что в случае чего, не теряйте :) Через год ждите))) Всем добра :good:</div>

]]></content:encoded>
			<dc:creator>long399</dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/419889/2491.html</guid>
		</item>
		<item>
			<title>Помощь</title>
			<link>https://www.cyberforum.ru/blogs/419889/2273.html</link>
			<pubDate>Tue, 22 Apr 2014 13:17:34 GMT</pubDate>
			<description>Сам еще начинающий программист, учусь только. Но решил около месяца назад попытаться помогать по...</description>
			<content:encoded><![CDATA[<div>Сам еще начинающий программист, учусь только. Но решил около месяца назад попытаться помогать по возможности на этом форуме. И когда мне это удается, то это так приятно! :)</div>


<!-- attachments -->
	<div style="margin-top:10px">

		
			<fieldset class="fieldset">
				<legend>Миниатюры</legend>
				<div style="padding:3px">
				
	<a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=2280&amp;d=1398172630" target="attachment" rel="Lightbox" id="attachment2280"><img loading="lazy" decoding="async" class="thumbnail" src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=2280&amp;stc=1&amp;thumb=1&amp;d=1398172630" border="0" alt="Нажмите на изображение для увеличения
Название: 2014-04-22_194828.png
Просмотров: 897
Размер:	33.2 Кб
ID:	2280" /></a>
	&nbsp;
	

	<a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=2283&amp;d=1398354298" target="attachment" rel="Lightbox" id="attachment2283"><img loading="lazy" decoding="async" class="thumbnail" src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=2283&amp;stc=1&amp;thumb=1&amp;d=1398354298" border="0" alt="Нажмите на изображение для увеличения
Название: 2014-04-24_224202.png
Просмотров: 848
Размер:	82.1 Кб
ID:	2283" /></a>
	&nbsp;
	

	<a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=2357&amp;d=1400345428" target="attachment" rel="Lightbox" id="attachment2357"><img loading="lazy" decoding="async" class="thumbnail" src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=2357&amp;stc=1&amp;thumb=1&amp;d=1400345428" border="0" alt="Нажмите на изображение для увеличения
Название: 2014-05-15_232518.png
Просмотров: 631
Размер:	39.8 Кб
ID:	2357" /></a>
	&nbsp;
	
		<br /><br />
	

	<a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=2359&amp;d=1400613676" target="attachment" rel="Lightbox" id="attachment2359"><img loading="lazy" decoding="async" class="thumbnail" src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=2359&amp;stc=1&amp;thumb=1&amp;d=1400613676" border="0" alt="Нажмите на изображение для увеличения
Название: 2014-05-21_021849.png
Просмотров: 703
Размер:	39.0 Кб
ID:	2359" /></a>
	&nbsp;
	

	<a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=2360&amp;d=1400613676" target="attachment" rel="Lightbox" id="attachment2360"><img loading="lazy" decoding="async" class="thumbnail" src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=2360&amp;stc=1&amp;thumb=1&amp;d=1400613676" border="0" alt="Нажмите на изображение для увеличения
Название: 2014-05-21_021910.png
Просмотров: 767
Размер:	41.7 Кб
ID:	2360" /></a>
	&nbsp;
	

	<a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=2361&amp;d=1400614234" target="attachment" rel="Lightbox" id="attachment2361"><img loading="lazy" decoding="async" class="thumbnail" src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=2361&amp;stc=1&amp;thumb=1&amp;d=1400614234" border="0" alt="Нажмите на изображение для увеличения
Название: 2014-05-21_022810.png
Просмотров: 618
Размер:	62.2 Кб
ID:	2361" /></a>
	&nbsp;
	
		<br /><br />
	

				</div>
			</fieldset>
		
		
		
		

	</div>
<!-- / attachments -->
]]></content:encoded>
			<dc:creator>long399</dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/419889/2273.html</guid>
		</item>
		<item>
			<title>Учим компьютер говорить</title>
			<link>https://www.cyberforum.ru/blogs/419889/2264.html</link>
			<pubDate>Sat, 19 Apr 2014 09:01:02 GMT</pubDate>
			<description>На Delphi достаточно просто сделать программу, которая будем произносить те слова, которые вы ей...</description>
			<content:encoded><![CDATA[<div>На Delphi достаточно просто сделать программу, которая будем произносить те слова, которые вы ей задаете. :)<br />
<br />
Для начала следует импортировать в Delphi SpeechLib_TLB. Для этого делаем следующие шаги:<br />
Component-&gt;Import component-&gt;Import a type library-&gt;Microsoft speech object library.<br />
<br />
Чтобы можно было произносить русские слова, следует скачать и установить любой русский голосовой движок. Я скачивал движок <b>Acapela Elan Nikolaj 5.1</b> (Скину его ниже - Русский голосовой движок.rar). <br />
<br />
Затем следует объявить такие объекты:<br />
<div class="codeblock"><table class="delphi"><thead><tr><td colspan="2" id="495732538"  class="head">Delphi</td></tr></thead><tbody><tr class="li1"><td><div id="495732538" style="height: 190px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
</pre></td><td class="de1"><pre class="de1"><span class="kw1">type</span>
&nbsp; TForm1 <span class="sy3">=</span> <span class="kw1">class</span><span class="br0">&#40;</span>TForm<span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="kw1">procedure</span> FormCreate<span class="br0">&#40;</span>Sender<span class="sy1">:</span> <span class="kw4">TObject</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; <span class="kw1">private</span>
&nbsp; &nbsp; <span class="coMULTI">{ Private declarations }</span>
&nbsp; <span class="kw1">public</span>
&nbsp; gpIVTxt<span class="sy1">:</span> TSpVoice<span class="sy1">;</span>
&nbsp; Voices<span class="sy1">:</span>ISpeechObjectTokens<span class="sy1">;</span>
&nbsp; &nbsp; <span class="coMULTI">{ Public declarations }</span>
&nbsp; <span class="kw1">end</span><span class="sy1">;</span></pre></td></tr></table></div></td></tr></tbody></table></div>В Oncreate формы сделаем следующее:<br />
<div class="codeblock"><table class="delphi"><thead><tr><td colspan="2" id="280904250"  class="head">Delphi</td></tr></thead><tbody><tr class="li1"><td><div id="280904250" style="height: 78px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
</pre></td><td class="de1"><pre class="de1">&nbsp; &nbsp; gpIVTxt<span class="sy1">:</span><span class="sy3">=</span>TSpVoice<span class="sy1">.</span><span class="me1">Create</span><span class="br0">&#40;</span><span class="kw1">nil</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; Voices<span class="sy1">:</span><span class="sy3">=</span>gpIVTxt<span class="sy1">.</span><span class="me1">GetVoices</span><span class="br0">&#40;</span><span class="st0">''</span><span class="sy1">,</span><span class="st0">''</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; gpIVTxt<span class="sy1">.</span><span class="me1">Voice</span><span class="sy1">:</span><span class="sy3">=</span>Voices<span class="sy1">.</span><span class="me1">Item</span><span class="br0">&#40;</span><span class="nu0">1</span><span class="br0">&#41;</span><span class="sy1">;</span> <span class="co1">// Будем говорить голосом установленного выше движка (Acapela Elan Nikolaj 5.1)</span></pre></td></tr></table></div></td></tr></tbody></table></div>Чтобы сказать какую-то фразу пишем такой код:<br />
<div class="codeblock"><table class="delphi"><thead><tr><td colspan="2" id="271529391"  class="head">Delphi</td></tr></thead><tbody><tr class="li1"><td><div id="271529391" style="height: 110px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
</pre></td><td class="de1"><pre class="de1"><span class="kw1">procedure</span> TForm1<span class="sy1">.</span><span class="me1">Button1Click</span><span class="br0">&#40;</span>Sender<span class="sy1">:</span> <span class="kw4">TObject</span><span class="br0">&#41;</span><span class="sy1">;</span>
<span class="kw1">begin</span>
gpIVTxt<span class="sy1">.</span><span class="me1">Speak</span><span class="br0">&#40;</span>edit1<span class="sy1">.</span><span class="me1">Text</span><span class="sy1">,</span>SVSFlagsAsync<span class="br0">&#41;</span><span class="sy1">;</span> <span class="co1">// Озвучится текст из edit1. Если не захочет говорить пробуем заменить </span>
<span class="co1">// SVSFlagsAsync на SVSFDefault</span>
<span class="kw1">end</span><span class="sy1">;</span></pre></td></tr></table></div></td></tr></tbody></table></div>Можно писать так:<br />
<div class="codeblock"><table class="delphi"><thead><tr><td colspan="2" id="714924873"  class="head">Delphi</td></tr></thead><tbody><tr class="li1"><td><div id="714924873" style="height: 94px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
</pre></td><td class="de1"><pre class="de1"><span class="kw1">procedure</span> TForm1<span class="sy1">.</span><span class="me1">Button1Click</span><span class="br0">&#40;</span>Sender<span class="sy1">:</span> <span class="kw4">TObject</span><span class="br0">&#41;</span><span class="sy1">;</span>
<span class="kw1">begin</span>
gpIVTxt<span class="sy1">.</span><span class="me1">Speak</span><span class="br0">&#40;</span><span class="st0">'Реструктуриза&lt;ция'</span><span class="sy1">,</span>SVSFlagsAsync<span class="br0">&#41;</span><span class="sy1">;</span> <span class="co1">// С помощью символа '&lt;' - ставится ударение на букву перед ним</span>
<span class="kw1">end</span><span class="sy1">;</span></pre></td></tr></table></div></td></tr></tbody></table></div>Скидываю сделанную простейшую прогу (Балаболка.rar), которая произносит слова, записанные в edit. она будет работать, если установлен голосовой движок и выполнены все инструкции описанные выше.</div>


<!-- attachments -->
	<div style="margin-top:10px">

		
		
		
		
			<fieldset class="fieldset">
				<legend>Вложения</legend>
				<table cellpadding="0" cellspacing="3" border="0">
				<tr>
	<td><img loading="lazy" decoding="async" class="inlineimg" src="http://www.cyberforum.ru//cyberstatic.net/images/attach/rar.gif" alt="Тип файла: rar" width="16" height="16" border="0" style="vertical-align:baseline" /></td>
	<td><a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=2271&amp;d=1397897679">Русский голосовой движок.rar</a> (10.74 Мб, 798 просмотров)</td>
</tr><tr>
	<td><img loading="lazy" decoding="async" class="inlineimg" src="http://www.cyberforum.ru//cyberstatic.net/images/attach/rar.gif" alt="Тип файла: rar" width="16" height="16" border="0" style="vertical-align:baseline" /></td>
	<td><a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=2272&amp;d=1397897866">Балаболка.rar</a> (583.3 Кб, 693 просмотров)</td>
</tr>
				</table>
			</fieldset>
		

	</div>
<!-- / attachments -->
]]></content:encoded>
			<dc:creator>long399</dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/419889/2264.html</guid>
		</item>
	</channel>
</rss>
