<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:georss="http://www.georss.org/georss">
<channel>
<title>jQuery - ПафНутиЙ-Блог</title>
<link>https://pafnuty.name/</link>
<language>ru</language><item>
<title>Вместо воскресных сниппетов №5</title>
<link>https://pafnuty.name/statyi/jquery/130-sunday-snippets-5.html</link>
<pdalink>https://pafnuty.name/statyi/jquery/130-sunday-snippets-5.html</pdalink>
<guid>https://pafnuty.name/statyi/jquery/130-sunday-snippets-5.html</guid>
<pubDate>Sun, 19 Aug 2012 23:43:29 +0400</pubDate>
<category>index</category>

<enclosure url="http://pafnuty.name/uploads/posts/2012-08/1345404768_three_bars.png" type="image/png" />
<content:encoded><![CDATA[<div align="center"><img src="http://pafnuty.name/uploads/posts/2012-08/1345404768_three_bars.png" style="max-width:100%;" data-maxwidth="480" alt="Вместо воскресных сниппетов №5"></div><br>Сегодня описания и самих сниппетов не будет. <br>Это связано с плотной работой над двумя важными вещами: обновление дизайна dle-faq.ru и ремонтом машины.<br>Однако без вкусностей не обойдётся.<br>Первая вкусность: Обновлённый , который перекочевал на <br>Вторая вкусность: Плагин для jQuery - , обещанный на прошлой неделе и со среды так не дождавшийся публикации. (плагин так же живёт на )<br><br>Если есть вопросы относительно модуля или скрипта - задавайте - разъясню. По модулю желательно писать в <a href="http://pafnuty.name/modules/125-showstat-for-dle.html" target="_blank" rel="noopener external">соответствующей теме</a>]]></content:encoded>
</item><item>
<title>Воскресные сниппеты №3</title>
<link>https://pafnuty.name/statyi/jquery/128-voskresnye-snippety-3.html</link>
<pdalink>https://pafnuty.name/statyi/jquery/128-voskresnye-snippety-3.html</pdalink>
<guid>https://pafnuty.name/statyi/jquery/128-voskresnye-snippety-3.html</guid>
<pubDate>Sun, 05 Aug 2012 23:59:08 +0400</pubDate>
<category>index</category>

<enclosure url="http://pafnuty.name/uploads/posts/2012-08/1344195036_snippets3.png" type="image/png" />
<content:encoded><![CDATA[<div align="center"><img src="http://pafnuty.name/uploads/posts/2012-08/1344195036_snippets3.png" style="max-width:100%;" data-maxwidth="480" alt="Воскресные сниппеты №3"></div><br><br>Сегодня сниппет два-в-одном. <br>Интересный эффект всплытия картинок при наведении а уменьшенную копию на основе html5 атрибута data-*.<br><br>Собственно про новый (кому как) атрибут data-* я рассказывать не собираюсь, информации полным полно в сети.<br>А вот про скрипткик, демо которого можно наблюдать чуть ниже, расскажу немного.<br><br><div class="downloadlink"><p><br></p></div><br><br><h2>Умная всплывалка с картинкой</h2><br>Как видно из демонстрации, при маленьком размере окна браузера (в разумных пределах) картинка, всплывающая при наведении на миниатюру, появляется слева от курсора, если не помещается справа.<br>Достигнут подобный результат довольно просто.<br><b>Первое, что делает скрипт - определяет положение, которое займёт всплывалка на странице </b><pre><code>function getXY(e) { //Определяем положение всплывалки на странице<br> if($(window).width() - (offset *2) &gt;= $("#preview").width() + e.pageX){<br> left_pos = e.pageX+offset;<br> } else {<br> left_pos = e.pageX-$("#preview").width()-offset;<br> } <br> top_pos = e.pageY - ($("#preview").height() / 2); <br> return {left: left_pos, top: top_pos};<br>}</code></pre><br>Далее в конец body добавляем пустой див c нужным нам ID с помощью нехитрой конструкции <pre><code>$("body").append("&lt;p id='preview'&gt;&lt;img src='"+ $(this).data("image") +"' alt='"+$(this).attr("alt")+"' /&gt;&lt;/p&gt;"); //Добавляем блок в конец body - именно в него будет "вставляться" наша картинка, для выбора картинки используем html5 атрибут data-<br> pos = getXY(e);</code></pre><br>в этот пустой див и будут попадать картинки, ссылки на которые мы укажем в специально заведённом атрибуте <b>data-image</b>.<br>Но т.к. картинка должна показываться только при наведении курсора на миниатюру - заворачиваем код в .hover() добавляем слежение за позицией курсора через событие .mousemove() <pre><code>function imagePreview(targets){<br> offset = 15;<br> var left_pos;<br><br> $(targets).hover(function(e){<br> $("body").append("&lt;p id='preview'&gt;&lt;img src='"+ $(this).data("image") +"' alt='"+$(this).attr("alt")+"' /&gt;&lt;/p&gt;"); //Добавляем блок в конец body - именно в него будет "вставляться" наша картинка, для выбора картинки используем html5 атрибут data-<br> pos = getXY(e); <br> <br> $("#preview").css({left:pos.left, top:pos.top}); <br> <br> $("#preview").fadeIn(); <br> },<br> function(){ <br> $("#preview").remove();<br> });<br><br> $(targets).mousemove(function(e){<br> pos = getXY(e); <br> $("#preview").css({left:pos.left, top:pos.top});<br> });<br>}</code></pre><br><br>Осталось только проинициализировать наши функции и всё, скрипт готов к бою. <pre><code>$(document).ready(function(){ //Инициализация скрипта.<br> imagePreview(".miniatures img"); <br>});</code></pre><br><br><div class="downloadlink"><p><br></p></div><br><br><b>P.S.</b> В следующей статье я расскажу как превратить этот сниппет в универсальный плагин и прикрутить к DLE]]></content:encoded>
</item><item>
<title>Воскресные сниппеты №2</title>
<link>https://pafnuty.name/statyi/jquery/127-voskresnye-snippety-2.html</link>
<pdalink>https://pafnuty.name/statyi/jquery/127-voskresnye-snippety-2.html</pdalink>
<guid>https://pafnuty.name/statyi/jquery/127-voskresnye-snippety-2.html</guid>
<pubDate>Sun, 29 Jul 2012 12:10:22 +0400</pubDate>
<category>index</category>

<enclosure url="http://pafnuty.name/uploads/posts/2012-07/1343546656_ss2.png" type="image/png" />
<content:encoded><![CDATA[<div align="center"><img src="http://pafnuty.name/uploads/posts/2012-07/1343546656_ss2.png" style="max-width:100%;" data-maxwidth="480" alt="Воскресные сниппеты №2"></div><br>Сегодня в подборке ещё пара сниппетов на jQuery.<br><br>Посмотреть или скачать пример к статье:<br><div class="downloadlink"><p><br></p></div><br><br><h2>Первый сниппет добавит собственный фильтр (:random) для отбора элементов</h2><br>В jquery можно создавать собственные фильтры и предложил замечательное применение этой возможности. Фильтр похож на псевдокласс css и поэтому прост в понимании.<br><pre><code>//Добавляем собственный фильтр (по аналогии с псевдоклассами css)<br><br>var random = 0;<br>$.expr[':'].random = function(a, i, m, r) {<br> if (i == 0) {<br> random = Math.floor(Math.random() * r.length);<br> }<br> return i == random;<br>};<br><br>// Используем созданный фильтр<br>$('.random-block:random').addClass('show-random');</code></pre><br>Простое и эффективное решение для показа случайного элемента. Подобным образом можно добавлять какой угодно фильтр.<br><br><h2>Второй сниппет для разворачивания и сворачивания блока с запоминанием положения cookies</h2><br>HTML: <br><pre><code>&lt;div class="poll"&gt;<br> &lt;h2&gt;&lt;a href="#" title="Свернуть/развернуть опрос"&gt;Опрос&lt;/a&gt;&lt;/h2&gt;<br> &lt;div class="vote-show"&gt;<br> скрываемый контент, например опрос на сайте<br> &lt;label&gt;&lt;input type="radio"&gt; вопрос 1&lt;/label&gt;<br> &lt;label&gt;&lt;input type="radio"&gt; вопрос 2&lt;/label&gt;<br> &lt;label&gt;&lt;input type="radio"&gt; вопрос 3&lt;/label&gt;<br> &lt;/div&gt;<br>&lt;/div&gt; &lt;!-- .poll --&gt;</code></pre><br><br>обязательные CSS-свойства:<br><pre><code>.vote-show {<br> display: none;<br> }<br>.poll.show .vote-show {<br> display: block;<br> }</code></pre><br><br>ну и конечно же jQuery: <br><pre><code>//Работаем с куками<br><br>$(".poll").addClass($.cookie("show_poll")); //Добавляем класс элементу на основе значения cookie<br><br>$(".poll h2 a").click(function () { <br> if($.cookie("show_poll")=="hide") { //Если блок скрыт - показываем<br> $.cookie("show_poll","show"); //назначаем куки<br> $(".poll .vote-show").slideDown(500, function(){ //функция для плавного показа блока и назначения класса с display: block<br> $(".poll").removeClass("show, hide").addClass($.cookie("show_poll"));<br> });<br> } <br> else { //иначе - скрываем<br> $.cookie("show_poll",'hide'); //переназначаем куки<br> $(".poll .vote-show").slideUp(500, function(){ //функция для плавного показа блока и удаления класса с display: block<br> $(".poll").removeClass("show, hide").addClass($.cookie("show_poll"));<br> });<br> } <br> return false;<br>});</code></pre><br>Не забываем в обязательном порядке перед вызовом скрипта, но после подключения jquery, подключить плагин иначе ничего не получится)<br>При желании можно усовершенствовать данный код, превратив его в плагин (о чём я возможно напишу в следующих статьях), и тогда можно будет сворачивать/разворачивать несколько блоков на странице. Но в большинстве случаев достаточно одного подобного блока.<br><br>На сегодня всё. Смотрите пример, качайте демо, используйте, модифицируйте и предлагайте свои сниппеты)<br><br><div class="downloadlink"><p><br></p></div>]]></content:encoded>
</item><item>
<title>Воскресные сниппеты №1</title>
<link>https://pafnuty.name/statyi/jquery/126-sunday-snippets-1.html</link>
<pdalink>https://pafnuty.name/statyi/jquery/126-sunday-snippets-1.html</pdalink>
<guid>https://pafnuty.name/statyi/jquery/126-sunday-snippets-1.html</guid>
<pubDate>Sun, 22 Jul 2012 12:57:03 +0400</pubDate>
<category>index</category>

<enclosure url="http://pafnuty.name/uploads/posts/2012-07/1342946043_styled_input.png" type="image/png" />
<content:encoded><![CDATA[<div align="center"><img src="http://pafnuty.name/uploads/posts/2012-07/1342946043_styled_input.png" style="max-width:100%;" data-maxwidth="480" alt="Воскресные сниппеты №1"></div><br>В процессе работы часто приходится писать небольшие сниппеты (скрипты на jQuery, кусочки HTML и CSS-кода), которые потом в той или иной модификации находят применение и в других проектах. <br>Сниппетов таких накапливается всё больше и больше, поэтому я попробую начать их еженедельную публикацию. Получится или нет - покажет время, а пока <s>первый нах</s> первая подборка из пары маленьких, но полезных jQuery сниппетов. <br><br>Для начала вы можете посмотреть или скачать пример к статье:<br><div class="downloadlink"><p><br></p></div><br><br><h2>Первый сниппет - для отлавливания хеша из адресной строки</h2><br>Зачастую нужно выполнить какое то событие, если в адресной строке браузера присутствует определённый хеш (site.ru/link.html<b>#hash</b>). <br>Например показ всплывающего окошка с контентом на сайте <a href="http://blockpro.ru/documentation.html#changelog" target="_blank" rel="noopener external">blockpro.ru</a>.<br><br>Реализация проста как электровеник, однако эффект удобный))<br><pre><code>$(window).load(function () {<br> thisLinkId = window.location.hash; //получаем хэш из адресной строки <br> $(thisLinkId).trigger("click"); //эмулируем клик по соответствующему ID<br>});</code></pre><br>Можно назначить практически любое событие, запускаемое при наличии определённого хеша в адресной строке.<br><br><h2>Второй сниппет - простая стилизация input type="file"</h2><br>Для начала приведу код HTML:<br><pre><code>&lt;div class="custom-form" id="show"&gt;<br> &lt;h3&gt;Демонстрация стилизованного инпута&lt;/h3&gt;<br> &lt;form method="post" action="noaction"&gt;<br> &lt;p&gt;<br> &lt;textarea&gt;тут текст сообщения&lt;/textarea&gt;<br> &lt;/p&gt;<br> &lt;p&gt;<br> вот он, стилизованный input type="file"<br> &lt;/p&gt;<br> &lt;p&gt;<br> &lt;input type="file" /&gt;<br> &lt;/p&gt;<br> &lt;/form&gt;<br>&lt;/div&gt;</code></pre><br>и JS:<br><pre><code>$(".custom-form input[type='file']").addClass("remove").parent().addClass("custom-file"); //убираем стандартный инпут и добавляем родительскому блоку класс<br><br>$(".custom-file").append('&lt;input type="text" id="file-input" /&gt;&lt;a href="#" id="file-but"&gt;Обзор&lt;/a&gt;'); //вставляем html-код для кастомизации инпута<br><br>$("#file-but, #file-input").on("click", function(){ //навешиваем клик на форму input для вызова формы загрузки файла<br> $(".custom-form input[type='file']").trigger("click");<br> return false;<br>});<br><br>$(".custom-form input[type='file']").change(function () { //получаем значение value из инпута<br> fileval(this.value);<br>}).change();<br><br>$("body").mousemove( function(){ // Защита от дибилов, чтоб не пытались менять выводимое значение.<br> $("#file-input").attr("value", filevalF[filevalF.length -1]); //берём последнюю строку из массива, чтобы не было видно fakepath.<br>});</code></pre><br><br>Суть скрипта в том, что он просто прячет стандартный инпут, вставляет обычный input type="text" и ссылку рядом, а по клику на них эмулирует клик по файловому инпуту, вызывая тем самым диалог открытия файла. <br>После чего "подцепляет" значение value файлового инпута и суёт в текстовый, предварительно обрезав текст с конца до первого (опять таки с конца) слеша.<br>Это нужно, чтобы убрать надпись C://fakepath, появляющуюся как следствие невозможности получения реального значения value файлового инпута <i>(безопасность однако)</i>. Вероятно обрезка текста не будет работать в unix системах из-за правильных слешей (в винде то используются обратные слеши в путях к фалам)<br><br>На сегодня всё, смотрите пример, дорабатывайте под свои нужны, я постарался максимально упростить всё для более лучшего понимания процессов.<br><br><h3>Продолжение следует...</h3><br><br><div class="downloadlink"><p><br></p></div>]]></content:encoded>
</item><item>
<title>Компактный вид комментариев на сайте</title>
<link>https://pafnuty.name/statyi/jquery/120-kompaktnyy-vid-kommentariev-na-sayte.html</link>
<pdalink>https://pafnuty.name/statyi/jquery/120-kompaktnyy-vid-kommentariev-na-sayte.html</pdalink>
<guid>https://pafnuty.name/statyi/jquery/120-kompaktnyy-vid-kommentariev-na-sayte.html</guid>
<pubDate>Sat, 02 Jun 2012 21:39:13 +0400</pubDate>
<category>index</category>

<enclosure url="http://pafnuty.name/uploads/posts/2012-06/1338654910_2012-06-02_203104.jpg" type="image/jpeg" />
<content:encoded><![CDATA[<div align="center"><img src="http://pafnuty.name/uploads/posts/2012-06/1338654910_2012-06-02_203104.jpg" style="max-width:100%;" data-maxwidth="480" alt="Компактный вид комментариев на сайте"></div><br><br>Сегодня я поделюсь с вами небольшим, но возможно полезным, примером кастомизации внешнего вида сайта и спообом добавления ему интерактивности.<br>А именно: <b>дадим пользователю возможность выбирать представление комментариев</b> (компактный и обычный режимы просмотров).<br><br>Для нетерпеливых: <a href="http://pafnuty.name/demos/compact-comments/index.html" target="_blank" rel="noopener external">наглядная демонстрация</a>.<br><br>Для остальных изложу суть.<br><br><h3>Для чего это нужно?</h3> Для того, чтобы дать возможность комфортного времяпрепровождения на вашем сайте тем пользователям, которым не очень интересно разглядывать аватарки и читать подписи юзербарами и разноцветными ссылками.<br><br><h3>Как сделать?</h3> Очень просто!<br><ol type="1"><li> Потребуются:<br>- Плагин jquery.cookie.js (для лёгкой и непринуждённой работы с куками)<br>- Прямые руки.<br></li><li> Конечно же главное - это js. Поэтому сразу привожу код:<br><pre><code> $(".comment").addClass($.cookie("small_comments"));<br> <br> $(".compact-mode").click(function () { <br> $.cookie("small_comments", "small"); <br> $(".comment").removeClass("normal").removeClass("small").addClass($.cookie("small_comments"));<br> return false;<br> });<br><br> $(".normal-mode").click(function () { <br> //comCook.text=""; <br> $.cookie("small_comments", "normal"); <br> $(".comment").removeClass("normal").removeClass("small").addClass($.cookie("small_comments"));<br> return false;<br> });</code></pre><br>Где <b>$.cookie("small_comments")</b> - это имя переменной, в которой будут записываться cookies, что бы при повторном обращении к странице пользователь видел выбранное представление комментариев.<br>Суть в следующем: <br>- При загрузке страницы всем блокам с классом <b>comment</b> присваивается класс с именем значения cookies (если пользователь зашёл на сайт первый раз, то ничего не добавится и ничего не поменяется).<br>- При клике на ссылку с классом <b>compact-mode</b> в куки записывается значение "small" и это же значение присваивается ко всем блокам <b>comment</b><br>- При клике на ссылку с классом <b>normal-mode</b> в куки записывается значение "normal" и это же значение присваивается ко всем блокам <b>comment</b><br>- Проще некуда.<br></li><li> Осталось подточить немного стили.<br>Если сократить, то таблица стилей выглядит вот так:<br><pre><code>.comment {...}<br> .comment.small {...}<br> .inner {...}<br> .small .inner {...}</code></pre><br>Т.е. мы просто добавили в тех местах, где это необходимо модификатор в виде класса <b>small</b>, тем самым изменили внешний вид комментариев.<br></li><li> Вот и всё. Скачать и посмотреть демо можно ниже.<br></li></ol><br><div class="downloadlink"><p><br><a href="http://pafnuty.name/demos/compact-comments/index.html" target="_blank" rel="noopener external">Посмотреть демонстрацию</a></p></div>]]></content:encoded>
</item><item>
<title>Подключаем социальные закладки от share42.com в shortstory.tpl DLE</title>
<link>https://pafnuty.name/statyi/jquery/119-podklyuchaem-socialnye-zakladki-ot-share42com-v-shortstorytpl-dle.html</link>
<pdalink>https://pafnuty.name/statyi/jquery/119-podklyuchaem-socialnye-zakladki-ot-share42com-v-shortstorytpl-dle.html</pdalink>
<guid>https://pafnuty.name/statyi/jquery/119-podklyuchaem-socialnye-zakladki-ot-share42com-v-shortstorytpl-dle.html</guid>
<pubDate>Wed, 23 May 2012 23:27:20 +0400</pubDate>
<category>index</category>

<enclosure url="http://pafnuty.name/uploads/posts/2012-05/1337800053_2012-05-23_225419.jpg" type="image/jpeg" />
<enclosure url="http://pafnuty.name/uploads/posts/2012-05/1337799870_2012-05-23_211111.jpg" type="image/jpeg" />
<enclosure url="http://pafnuty.name/uploads/posts/2012-05/thumbs/1337799809_2012-05-23_212915.jpg" type="image/jpeg" />
<enclosure url="http://pafnuty.name/uploads/posts/2012-05/thumbs/1337799891_2012-05-23_212937.jpg" type="image/jpeg" />
<content:encoded><![CDATA[<div align="center"><img src="http://pafnuty.name/uploads/posts/2012-05/1337800053_2012-05-23_225419.jpg" style="max-width:100%;" data-maxwidth="480" alt="Подключаем социальные закладки от share42.com в shortstory.tpl DLE"></div><br><br>Сегодня я расскажу как легко и непринуждённо, без правок php и плясок с бубнами, добавить кнопки социальных сервисов от в короткие новости DLE.<br>Статья будет интересна прежде всего новичкам, поэтому я постарался расписать всё немного подробнее, чем это необходимо.<br><br><h2>Главное условие - прямые руки</h2>Идём на и генерируем там скрипт с удобными для себя параметрами.<br>Я выбрал <i>G+, Twitter, OK, FB, ЖЖ и ВК</i>. Думаю для примера этого вполне достаточно.<br><br><div align="center"><img src="http://pafnuty.name/uploads/posts/2012-05/1337799870_2012-05-23_211111.jpg" style="max-width:100%;" data-maxwidth="480" alt=""></div><br><br><h3>Важные опции</h3><ul><li>Тип панели с иконками: "Горизонтальная"<br></li><li>К вашему сайту подключен jQuery: "Да" <i>(т.к. DLE есть ужа давно библиотека jQuery)</i><br></li></ul><br><br><b>Нужно сделать полученный скрипт читабельным.</b> Для этого идём на , вставляем содержимое файла <b>share42.js</b> в большое текстовое поле и жмём единственную кнопку.<br><br><div align="center"><a href="http://pafnuty.name/uploads/posts/2012-05/1337799809_2012-05-23_212915.jpg" class="highslide" target="_blank" rel="noopener external"><img src="http://pafnuty.name/uploads/posts/2012-05/thumbs/1337799809_2012-05-23_212915.jpg" style="max-width:100%;" alt=""></a></div><br><br>Вот теперь работать со скриптом станет значительно удобнее.<br><b>Копируем код</b>, по аналогии с выделенным на рисунке, или проще говоря: <i>отсчитываем три открывающие фигурные скобки вначале и три закрывающие в конце, всё что между ними - копируем.</i> <br><br><div align="center"><a href="http://pafnuty.name/uploads/posts/2012-05/1337799891_2012-05-23_212937.jpg" class="highslide" target="_blank" rel="noopener external"><img src="http://pafnuty.name/uploads/posts/2012-05/thumbs/1337799891_2012-05-23_212937.jpg" style="max-width:100%;" alt=""></a></div><br><br>Это будет наш основной код.<br><br><b>Для примера я возьму стандартный шаблон DLE - Gemini</b> (Default уже приелся <span class="emoji noncontenteditable"><img style="vertical-align:middle;border:none;" alt="smile" src="https://pafnuty.name/public/emoticons/smile.gif"></span>)<br>Скрипт можно вставлять куда угодно и как угодно, главное правильно. <br><ol type="1"><li> Поэтому, чтобы защитить неподготовленный мозг от нелепых ошибок, лучше <b>создадим файл social.js и положим его в папку js шаблона</b>. <br>В файле пишем: <br><pre><code>$(document).ready(function(){<br>//в это место вставляем наш основной код, скопированный ранее<br>});</code></pre><br></li><li> Кладём картинку из архива (который скачали с share42.com) в папку images.<br></li><li> Подключаем скрипт в шаблон. Для этого откроем main.tpl и после <pre><code>&lt;script type="text/javascript" src="&#123;THEME}/js/libs.js"&gt;&lt;/script&gt;</code></pre> прописываем <pre><code>&lt;script type="text/javascript" src="&#123;THEME}/js/social.js"&gt;&lt;/script&gt;</code></pre><br></li><li> С простым разобрались, теперь немного посложнее <i>(для неподготовленного мозга - очень сложно).</i> <br>После "обрезания" скрипта нам более не нужна отдельная его инициализация, но для корректной работы скрипта ему нужен id блока, в который он будет вставлять кнопки соцсервисов и получать необходимые данные (заголовок и ссылку на новость), мы можем использовать стандартный тег {news-id} для присвоения уникальных идентификаторов для каждого блока. Поэтому блок в файе shortstory.tpl, куда будут вставляться кнопки будет выглядеть примерно так:<br><pre><code>&lt;div id="sh{news-id}" class="share42init" data-url="{full-link}" data-title="{title}"&gt;&lt;/div&gt;</code></pre> где <b>id="sh{news-id}"</b> может быть в принципе любым, главное наличие тега <b>{news-id}</b> и какого-либо текста рядом с ним (чтобы не дублировать id новостей).<br>Стоит отметить, что <b>data-url </b>и <b>data-title</b> - это HTML5-атрибуты и валидацию на старых доктайпах они не пройдут <i>(хотя когда DLE проходил валидацию...)</i><br></li><li> Ну а наш скрипт теперь нуждается в несложной доработке, а именно: нужно дать понять скрипту в какой блок какие ссылки-кнопки вставлять. <br>Для этого:<br>Перед (или после или на строчку ниже, разницы нет) <pre><code>u = $(this).attr('data-url');</code></pre> Вставить <pre><code>shareId = $(this).attr('id');</code></pre><br>Далее найти <pre><code>$(this).html('&lt;span id="share42"&gt;' + l + '&lt;/span&gt;');</code></pre> и заменить на <pre><code>$(this).html('&lt;span id="share42_'+shareId+'"&gt;'+l+'&lt;/span&gt;');</code></pre><br>Это нехитрое телодвижение научит скрипт "различать блоки друг от друга".<br></li><li> Внимательный человек сразу увидит, что вместе с "обрезанием" скрипт утратил переменную <b>f</b> (она отвечала за путь к картинке), поэтому мы ещё немного причешем скрипт, заодно избавимся от не уместных в нашем случаи инлайн-стилей <i>(не люблю я их)</i>. <br>Для этого просто заменим длинную строку: <pre><code>for (j = 0; j &lt; s.length; j++) l += '&lt;a rel="nofollow" style="display:inline-block;vertical-align:bottom;width:24px;height:24px;margin:0 6px 6px 0;outline:none;background:url(' + f + 'icons.png) -' + 24 * j + 'px 0" href=' + s[j] + ' target="_blank"&gt;&lt;/a&gt;';</code></pre> на более изящную и короткую: <pre><code>for (j = 0; j &lt; s.length; j++) l += '&lt;a rel="nofollow" class="sharelink" style="background-position: -' + 24 * j + 'px 0" href=' + s[j] + ' target="_blank"&gt;&lt;/a&gt;';</code></pre><br><br><h3>Внимание!</h3> не забудьте поменять размер иконок на свой (в данном случаи это циферка <b>24</b>).<br><br></li><li> Осталось только добавить <s>воды</s> стилей. <br>Открываем любой css файл <i>(например styles.css)</i> и в любом месте пишем:<br><pre><code>.sharelink {<br> display: inline-block;<br> vertical-align: bottom;<br> width: 24px;<br> height: 24px;<br> margin: 0 6px 6px 0;<br> outline: none;<br> background-image:url(../images/icons.png); <br> }</code></pre> <br>Естественно не забываем указать нужный размер иконок.<br></li></ol><br><br><h2>В готовом виде скрипт должен выглядеть примерно так</h2><br><div class="dle-spoiler noncontenteditable"><div class="title_spoiler"><a href="#" data-id="spb86a71b52a203a06a7" class="spoiler-btn-svg"><svg width="18" height="18" fill="currentColor" viewBox="0 0 20 20"><path id="svg-spb86a71b52a203a06a7" d="M17.418 6.109c0.272-0.268 0.709-0.268 0.979 0s0.271 0.701 0 0.969l-7.908 7.83c-0.27 0.268-0.707 0.268-0.979 0l-7.908-7.83c-0.27-0.268-0.27-0.701 0-0.969s0.709-0.268 0.979 0l7.419 7.141 7.418-7.141z"></path></svg></a><a href="#" data-id="spb86a71b52a203a06a7" class="spoiler-btn contenteditable">Показать / Скрыть текст</a></div><div id="spb86a71b52a203a06a7" class="text_spoiler"><div class="contenteditable"><pre><code>$(document).ready(function(){<br> $('div.share42init').each(function () {<br> shareId = $(this).attr('id');<br> u = $(this).attr('data-url');<br> t = $(this).attr('data-title');<br> if (!u) u = location.href;<br> if (!t) t = document.title;<br> u = encodeURIComponent(u);<br> t = encodeURIComponent(t);<br> var s = new Array('"#" onclick="window.open('https://plusone.google.com/_/+1/confirm?hl=ru&amp;url=' + u + '', '_blank', 'scrollbars=0, resizable=1, menubar=0, left=200, top=200, width=550, height=440, toolbar=0, status=0');return false" title="Добавить +1 и поделиться в Google+"', '"#" onclick="window.open('http://twitter.com/share?text=' + t + '&amp;url=' + u + '', '_blank', 'scrollbars=0, resizable=1, menubar=0, left=200, top=200, width=550, height=440, toolbar=0, status=0');return false" title="Добавить в Twitter"', '"#" onclick="window.open('http://www.odnoklassniki.ru/dk?st.cmd=addShare&amp;st._surl=' + u + '&amp;title=' + t + '', '_blank', 'scrollbars=0, resizable=1, menubar=0, left=200, top=200, width=550, height=440, toolbar=0, status=0');return false" title="Добавить в Одноклассники"', '"#" onclick="window.open('http://www.facebook.com/sharer.php?u=' + u + '&amp;t=' + t + '', '_blank', 'scrollbars=0, resizable=1, menubar=0, left=200, top=200, width=550, height=440, toolbar=0, status=0');return false" title="Поделиться в Facebook"', '"http://www.livejournal.com/update.bml?event=' + u + '&amp;subject=' + t + '" title="Опубликовать в LiveJournal"', '"#" onclick="window.open('http://vk.com/share.php?url=' + u + '', '_blank', 'scrollbars=0, resizable=1, menubar=0, left=200, top=200, width=554, height=421, toolbar=0, status=0');return false" title="Поделиться В Контакте"', '"http://share42.com/" title="Share42.com - Бесплатный скрипт кнопок социальных закладок и сетей"');<br> var l = '';<br> for (j = 0; j &lt; s.length; j++) l += '&lt;a rel="nofollow" class="sharelink" style="background-position: -' + 24 * j + 'px 0" href=' + s[j] + ' target="_blank"&gt;&lt;/a&gt;';<br><br> $(this).html('&lt;span id="share42_'+shareId+'"&gt;'+l+'&lt;/span&gt;');<br> }) <br>});</code></pre></div></div></div><br><br><h3>Вот и всё!</h3><br><br>P.S. Проверено на DLE 9.6 <i>(но версия тут не играет роли)</i>]]></content:encoded>
</item><item>
<title>Карусель с автопрокруткой на основе Block.Pro.2 и jCarousel</title>
<link>https://pafnuty.name/statyi/jquery/114-karusel-s-avtoprokrutkoj-na-osnove-blockpro2-i-jcarousel.html</link>
<pdalink>https://pafnuty.name/statyi/jquery/114-karusel-s-avtoprokrutkoj-na-osnove-blockpro2-i-jcarousel.html</pdalink>
<guid>https://pafnuty.name/statyi/jquery/114-karusel-s-avtoprokrutkoj-na-osnove-blockpro2-i-jcarousel.html</guid>
<pubDate>Sun, 29 Jan 2012 01:07:12 +0400</pubDate>
<category>index</category>

<enclosure url="http://pafnuty.name/uploads/posts/2012-01/1327783622_bp_carosel.jpg" type="image/jpeg" />
<content:encoded><![CDATA[<div align="center"><img src="http://pafnuty.name/uploads/posts/2012-01/1327783622_bp_carosel.jpg" style="max-width:100%;" data-maxwidth="480" alt="Карусель с автопрокруткой на основе Block.Pro.2 и jCarousel"></div><br><b>Сегодня речь пойдёт об очередном применении модуля Block.Pro.2 в свете очередного же обновления до версии 2.4</b><br>Применять модуль будем для вывода последних новостей в виде небольшого слайдера с автоматической прокруткой новостей по кругу (что по сути и является каруселью) и остановкой прокрутки при наведении мышки на новость. Крутиться карусель будет на замечательном плагине для jQuery , особенностью которого является гибкая настройка и кастомизация, в чём я лично неоднократно убеждался.<br><br><h2>Итак</h2><br><br>Нам понадобятся:<br>, и конечно же прямые руки. За основу возьмём стандартный шаблон DLE 9.5 - Default.<br><br><br>1. Кладём файл jquery.jcarousel.min.js из скачанного архива в папку <b>js</b> шаблона.<br>Там же открываем файл libs.js и в самый конец дописываем: <pre><code>//Карусель<br>function mycarousel_initCallback(carousel)<br>{<br> carousel.clip.hover(function() {<br> carousel.stopAuto();<br> }, function() {<br> carousel.startAuto();<br> });<br>};<br><br>$(function() {<br> jQuery('#bp_slider').jcarousel({<br> wrap: 'circular',<br> auto: 5, //интервал прокрутки в секундах<br> scroll: 1, //кол-во элементов, прокручиваемых за один раз<br> animation: 500, //скорость прокрутки<br> initCallback: mycarousel_initCallback //вызов функции остановки прокрутки при наведении мышки<br> });<br>});</code></pre><br>тут немного поясню что это.<br>Это функция вызова нашего скрипта-карусели и его опции.<br><br>2. Создаём новый файл с именем <b>bp_carousel.tpl</b>, кладём его в папку с шаблоном, вставляем туда вот это:<br><pre><code>&lt;li class="bp_item"&gt;<br> &lt;strong&gt;&lt;a href="{full-link}" title="{title}"&gt;{title limit="30"}&lt;/a&gt;&lt;/strong&gt;<br> &lt;div class="bp_item_img"&gt;&lt;img src="{image-1}" alt="{title}" width="50" height="50" /&gt;&lt;/div&gt;<br> &lt;div class="bp_item_text"&gt;{text limit="70"}&lt;/div&gt;<br>&lt;/li&gt;</code></pre><br>Думаю объяснять что тут к чему смысла нет, всё наглядно.<br><br>3. Открываем main.tpl и перед <pre><code>&lt;script type="text/javascript" src="&#123;THEME}/js/libs.js"&gt;&lt;/script&gt;</code></pre> вставляем: <pre><code>&lt;script type="text/javascript" src="&#123;THEME}/js/jquery.jcarousel.min.js"&gt;&lt;/script&gt;</code></pre><br><br>4. Открываем sidebar.tpl. Находим код:<pre><code>&lt;div id="popular" class="block"&gt;<br> &lt;div class="dtop"&gt;&amp;nbsp;&lt;/div&gt;<br> &lt;div class="dcont"&gt;<br> &lt;div class="btl"&gt;<br> &lt;h4&gt;Популярные статьи&lt;/h4&gt;<br> &lt;/div&gt;<br> &lt;ul&gt;<br> {topnews}<br> &lt;/ul&gt;<br> &lt;/div&gt;<br> &lt;div class="dbtm"&gt;&amp;nbsp;&lt;/div&gt;<br>&lt;/div&gt;</code></pre><br>заменяем на:<pre><code>&lt;div class="block"&gt;<br> &lt;div class="dtop"&gt;&amp;nbsp;&lt;/div&gt;<br> &lt;div class="dcont"&gt;<br> &lt;div class="btl"&gt;<br> &lt;h4&gt;Карусель + Block.Pro.2&lt;/h4&gt;<br> &lt;/div&gt;<br> &lt;ul id="bp_slider"&gt;<br> &#123;include file="engine/modules/block.pro.2.php?&amp;block_id=carousel&amp;template=bp_carousel&amp;news_num=6&amp;last=y&amp;img_size=50x50"}<br> &lt;/ul&gt;<br> &lt;/div&gt;<br> &lt;div class="dbtm"&gt;&amp;nbsp;&lt;/div&gt;<br>&lt;/div&gt;</code></pre><br><br>5. Открываем файл styles.css и в самый конец добавляем:<pre><code>/*Carousel<br>-----------------------------------------------------------------------------*/<br>#bp_slider {<br> max-height: 100px; <br> }<br>#bp_slider .bp_item {<br> font-size: 12px;<br> width: 230px;<br> }<br>#bp_slider .bp_item strong {<br> display: block;<br> }<br> #bp_slider .bp_item a {<br> text-decoration: none;<br> } <br> #bp_slider .bp_item a:hover {<br> text-decoration: underline;<br> color: #9966cc;<br> }<br> #bp_slider .bp_item_img {<br> float: left;<br> padding: 3px 5px 0 0;<br> }<br><br>.jcarousel-clip {<br> overflow: hidden; <br> margin-top: 10px;<br> }<br><br>.jcarousel-container {<br> width: 230px; <br> margin-left: 15px;<br> } <br>/**<br> * Horizontal Buttons<br> */<br>.jcarousel-next-horizontal {<br> position: absolute;<br> bottom: -10px;<br> right: -14px;<br> width: 23px;<br> height: 23px;<br> cursor: pointer;<br> background: url(../images/basenavi.png) no-repeat -26px -32px;<br> }<br><br>.jcarousel-next-horizontal:hover {<br> background: url(../images/basenavi.png) no-repeat -26px -61px;<br> } <br>.jcarousel-next-horizontal:active {<br> background: url(../images/basenavi.png) no-repeat -26px -90px;<br> }<br>.jcarousel-next-disabled-horizontal,<br>.jcarousel-next-disabled-horizontal:hover {<br> cursor: default;<br> }<br><br>.jcarousel-prev-horizontal {<br> position: absolute;<br> bottom: -10px;<br> right: 9px;<br> width: 23px;<br> height: 23px;<br> cursor: pointer;<br> background: url(../images/basenavi.png) no-repeat -3px -32px;<br> }<br><br>.jcarousel-prev-horizontal:hover {<br> background: url(../images/basenavi.png) no-repeat -3px -61px;<br> } <br>.jcarousel-prev-horizontal:active {<br> background: url(../images/basenavi.png) no-repeat -3px -90px;<br> }<br>.jcarousel-prev-disabled-horizontal,<br>.jcarousel-prev-disabled-horizontal:hover,<br>.jcarousel-prev-disabled-horizontal:focus,<br>.jcarousel-prev-disabled-horizontal:active {<br> cursor: default;<br> } </code></pre><br><br>6. Фантазируем и придумываем своё оформление и использование Block.Pro.2<br><div class="forlamers"><p><strong>ВНИМАНИЕ!</strong></p><p>Все обсуждения модуля теперь только в <a href="http://pafnuty.name/main/123-blockpro2-obzavelsya-svoim-saytom-vstrechayte.html" target="_blank" rel="noopener external">этой теме</a> или на сайте </p></div>]]></content:encoded>
</item><item>
<title>Меняем BBcode-редактор для комментариев</title>
<link>https://pafnuty.name/statyi/jquery/97-bbcode-redaktor-jquery.html</link>
<pdalink>https://pafnuty.name/statyi/jquery/97-bbcode-redaktor-jquery.html</pdalink>
<guid>https://pafnuty.name/statyi/jquery/97-bbcode-redaktor-jquery.html</guid>
<pubDate>Thu, 24 Mar 2011 10:04:40 +0300</pubDate>
<category>index</category>

<enclosure url="http://pafnuty.name/uploads/posts/2011-03/1300972386_comm.jpg" type="image/jpeg" />
<content:encoded><![CDATA[<div align="center"><img src="http://pafnuty.name/uploads/posts/2011-03/1300972386_comm.jpg" style="max-width:100%;" data-maxwidth="480" alt="Меняем BBcode-редактор для комментариев"></div><br><br>Многие спрашивают меня: <i>"Как сделать такой редактор комментариев как в шаблоне <a href="http://pafnuty.name/portfolio/shablony/94-twocolors-prostoj-shablon-dlya-dle.html" target="_blank" rel="noopener external">TwoColors</a>?" </i><br><br>Специально для Вас я сегодня покажу нехитрый способ как поменять редактор комментариев в DLE.<br><br>Сразу скажу, что исходники, которые я использовал являются бесплатным jQuery-плагином, а посмотреть его можно на сайте . Но тот вариант, который предлагается для скачивания отказывался работать в DLE по непонятным причинам, поэтому пришлось "допилить" и доработать этот плагин.<br><br>В итоге мы получаем красивый, гибкий в настройке, лёгкий Bbcode-редактор для комментариев на сайте. <br><br><h2>Инструкция</h2><br><b>1.</b> Для начала скачиваем прикрепленный архив и распаковвываем его в папку с шаблоном (структура папок соответствует шаблону Default от DLE 9.2).<br><br><b>2.</b> Открываем main.tpl и перед <b>&lt;/head&gt;</b> вставляем: <br><pre><code>[aviable=showfull]<br>&lt;link rel="stylesheet" href="&#123;THEME}/style/markitup.css" type="text/css" media="screen, projection" /&gt;<br>&lt;script type="text/javascript" src="&#123;THEME}/js/markitup.js" &gt;&lt;/script&gt;<br>&lt;script type="text/javascript" src="&#123;THEME}/js/mk_set.js" &gt;&lt;/script&gt;<br>&lt;script type="text/javascript" &gt;<br>$(document).ready(function() {<br> $('textarea.forbbcode').click(function() {<br> if ($("textarea.forbbcode.markItUpEditor").length === 1) {<br> return false;<br> } else {<br> $(this).markItUp(BbcodeSettings).value = "";<br> }<br> return false;<br> });<br>});<br>&lt;/script&gt;<br>[/aviable]</code></pre><br>Где <br><b>/markitup.css</b> - оформление редактора<br><b>/markitup.js </b>- ядро редактора<br><b>/mk_set.js</b> - настройки кнопок редактора (об этом чуть ниже)<br>а расположенный под ссылками скрипт производит вызов редактора, и отвечает за эффект его появления.<br><br>Ну и естественно всё обрамлено в тег [aviable=showfull], чтоб не грузить браузер лишним кодом на остальных страницах. <br><br><b>3.</b> Открываем <b>addcomments.tpl</b> и убираем оттуда тег <b>{editor}</b>.<br>Вместо этого вставляем:<br><pre><code>&lt;textarea name="comments" class="forbbcode" id="comments" cols="" rows="" onclick="setNewField(this.name, document.getElementById( 'dle-comments-form' ))"&gt;&lt;/textarea&gt;<br>&lt;p&gt;&lt;input type="checkbox" name="allow_subscribe" id="allow_subscribe" value="1" /&gt;Подписаться на комментарии&lt;/p&gt;</code></pre><br><br>Это и будет форма добавления комментария.<br><br><b>На этом установка завершена.</b> А вот <a href="http://www.dolnet.ru/developments/" target="_blank" rel="noopener external">разработка интернет сайтов</a> - гораздо сложнее....<br><br><br><h3>Как настроить?</h3><br><br>Совсем не сложно <s>если руки не кривые</s>!<br>Для добавления или удаления кнопок нужно редактировать файлы <b>/markitup.css</b> и <b>/mk_set.js</b><br><br>Чтобы не разговаривать на отвлечённые темы, давайте рассмотрим как работает например кнопка, делающая текст жирным. Представим, что у нас её нет и предстоит добавить эту нужную кнопочку.<br><br>- Для начала откроем файл <b>/markitup.css</b> и найдём там класс <b>.bb_button:hover</b> это стил кнопки при наведении курсора (можно прописать в любое место, но так будет попроще ориентироваться в коде в дальнейшем) ниже и будут стили кнопок, отвечающие за их оформление.<br>Добавим стиль для новой кнопки: <pre><code>.bb_button.bold {background-image: url(../bbcodes/new/bold.png);}</code></pre> только не забываем закинуть картинку в нужную папку. <i>Кстати при оформлении кнопок я использовал иконки от </i><br><br>- Теперь откроем <b>/mk_set.js</b> и в удобное место, но ниже строки <b>markupSet: [</b> добавим код, отвечающий за показ нашей кнопки:<br><pre><code>{name:'Жирный', openWith:'[b]', closeWith:'[/b]', className:"bold"},</code></pre><br>Думаю пояснять содержание кода не нужно, всё наглядно. главное чтобы значение параметра <b>className</b> соответствовало существующему классу в CSS (в нашем случаи он есть <i>.bb_button.bold</i>)<br><br><br>Вот собственно и всё. Жду Ваших комментариев.<br><br><div class="downloadlink"><p>Скачать архив </p></div>]]></content:encoded>
</item><item>
<title>Сообщение об отсутствии комментариев на jQuery</title>
<link>https://pafnuty.name/statyi/jquery/91-soobshhenie-ob-otsutstvii-kommentariev-na-jquery.html</link>
<pdalink>https://pafnuty.name/statyi/jquery/91-soobshhenie-ob-otsutstvii-kommentariev-na-jquery.html</pdalink>
<guid>https://pafnuty.name/statyi/jquery/91-soobshhenie-ob-otsutstvii-kommentariev-na-jquery.html</guid>
<pubDate>Fri, 11 Feb 2011 14:10:42 +0300</pubDate>
<category>index</category>

<enclosure url="http://pafnuty.name/uploads/posts/2011-02/1297430665_nocomments.jpg" type="image/jpeg" />
<content:encoded><![CDATA[<div align="center"><img src="http://pafnuty.name/uploads/posts/2011-02/1297430665_nocomments.jpg" style="max-width:100%;" data-maxwidth="480" alt="Сообщение об отсутствии комментариев на jQuery"></div><br><br>Сегодня представлю небольшой скриптик, для того, чтобы сообщать юзерам об отсутствии комментариев к новости, но так как я не сторонник вмешиваться из-за таких мелочей в двиг, сделаем это на jQuery.<br><br>В сети есть хаки, которые выводят сообщение "нет комментариев" если их нет, но это ХАКИ! Что будет с ним, когда вы решите обновить DLE до актуальной версии? А если ещё и забыли как ставили...... в общем очередная головная боль.<br><br>Всем известно, что в DLE девятой линейки уже встроена библиотека jquery? так почему бы не воспользоваться её возможностями, а не возможностями php? <br><br><h2>Итак</h2><br>Началось всё с того, что на сайте, в силу специфика вёрстки блок с комментариями, при их отсутствии оставался пустым и выглядело это не очень призентабельно. Поэтому и был найден несложный способ "заполнить" эту пустоту.<br>Кстати: <a href="http://www.programmex.ru/kurs-prodvigenija-saitov" target="_blank" rel="noopener external">seo курсы</a> ещё никто не отменял.<br><br>Для начала очмечу, что вывод комментариев осуществляется через тег <b>{commеnts} </b>в <b>fullstory.tpl</b>.<br><br><h2>Теперь перейдем к разбору кода.</h2><br>Для начала обернём тег {commеnts} в div с идентификатором <b>fornocomments</b> (вы можете использовать любой id, какой душе угодно) в результате получим вот такую конструкцию:<br><pre><code>&lt;div class="comments" id="fornocomments"&gt;<br> {comments}<br>&lt;/div&gt;<br></code></pre><br>Далее "включаем" логическое мышление:<br>- Если к новости есть хоть один комментарий, то он в любом случаи будет заключён в чтото типа:<br><pre><code>&lt;div id="comment-id-100"&gt;Комментарий номер 100&lt;/div&gt;</code></pre><br><br>- Если же комментариев к новости нет, значит и не будет блока с идентификатором комментария.<br><br>Отсюда делаем нехитрый вывод и пишем jquery скрипт:<br><br><pre><code>$(function(){ <br>var comments_block = $("#fornocomments");<br>if (comments_block.find("div[id*=comment-id-]").first().text() == "") {comments_block.prepend('&lt;div class="nocomments"&gt;Комментариев пока нет&lt;/div&gt;');}<br>}); </code></pre><br>где:<br><pre><code>var comments_block = $("#fornocomments");</code></pre><br>это назначение переменной , для дальнейшей "удобности" работы (вдруг мы ещё чтото захотим покодить на jquery для комментариев <span class="emoji noncontenteditable"><img style="vertical-align:middle;border:none;" alt="smile" src="https://pafnuty.name/public/emoticons/smile.gif"></span>)<br>далее условие:<br><pre><code>if (comments_block.find("div[id*=comment-id-]").first().text() == "") </code></pre><br>т.е. если в блоке с <b>id="fornocomments"</b> не найдётся ни одного блока, содержащего в идентификаторе слова <b>comment-id-</b> и имеющего внутри себя текст, то произойдёт:<br><pre><code>comments_block.prepend('&lt;div class="nocomments"&gt;Комментариев пока нет&lt;/div&gt;');</code></pre><br>внутрь блока с <b>id="fornocomments"</b> добавится блок с классом nocomments и текстом <i>Комментариев пока нет</i> <br><br>В противном случаи ничего не произойдёт.<br>Вот собственно и весь скрипт.<br>Далее помещаем наш скрипт в файл с расширением .js, лучше всего в отдельный, чтобы лишний раз не нагружать браузер пользователя лишним js-кодом, закидываем в папку с шаблоном (обычно это папка /js) и подключаем файл в fullstory.tpl (опять же, чтобы скрипт не вызывался в других местах и не тратил "силы" браузера)]]></content:encoded>
</item></channel></rss>