<?xml version="1.0" encoding="windows-1251"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
<title>Персональный блог верстальщика и php-программиста Руслана Дерепко</title>
<link>http://derepko.ru/</link>
<language>ru</language>
<description>Персональный блог верстальщика и php-программиста Руслана Дерепко</description>
<generator>DataLife Engine</generator><item>
<title>Множество блоков Топ новостей в DLE</title>
<guid isPermaLink="true">http://derepko.ru/modules/modules_datalife_engine/8_top-news-blocks-in-dle/</guid>
<link>http://derepko.ru/modules/modules_datalife_engine/8_top-news-blocks-in-dle/</link>
<description><![CDATA[Понадобилось мне на днях в одном проекте на Datalife Engine вывести блоки Топ новостей из <u>разных категорий</u>. Дабы не изобретать велосипед и не тратить свое время, я решил немного погуглить в поисках быстрого решения. Нашел много всякого, но все либо платное, либо чересчур корявое и не совсем то, что мне нужно было. Буквально за две минуты я придумал очень простое и оригинальное решение: а почему бы не взять всем хорошо известный тег {custom} и его немного модифицировать? Это я собственно и сделал. Для этого нужно:<br />1) Открыть /engine/modules/functions.php и найти в нем функцию <i>custom_print</i>, которая обрабатывает custom вывод:<br /><!--code1--><div class="scriptcode"><div class="php-1"><!--ecode1--><br />function custom_print($custom_category, $custom_template, $aviable, $custom_from, $custom_limit, $custom_cache, $do) {<br /><!--code2--></div></div><!--ecode2--><br />Заеняем на:<br /><!--code1--><div class="scriptcode"><div class="php-2"><!--ecode1--><br />function custom_print($custom_category, $custom_template, $aviable, $custom_from, $custom_limit, $custom_cache, $do, $top) {<br /><!--code2--></div></div><!--ecode2--><br />Кто не заметили, здесь мы добавили $top.<br /><br />2) Здесь же, в этой функции ищем:<br /><!--code1--><div class="scriptcode"><div class="php-3"><!--ecode1--><br />$sql_select = "SELECT id, autor, date, short_story, full_story, xfields, title, category, alt_name, comm_num, allow_comm, allow_rate, rating, vote_num, news_read, flag, editdate, editor, reason, view_edit, tags, icon, flash_size, game_lang FROM " . PREFIX . "_post WHERE " . $stop_list . $where_category . " AND approve" . $where_date . " ORDER BY " . $fixed . $news_sort . " " . $news_msort . " LIMIT " . $custom_from . "," . $custom_limit;<br /><br /><!--code2--></div></div><!--ecode2--><br />Заменяем на:<br /><!--code1--><div class="scriptcode"><div class="php-4"><!--ecode1--><br />		if( $top == "yes") {<br />			$sql_select = "SELECT id, autor, date, short_story, full_story, xfields, title, category, alt_name, comm_num, allow_comm, allow_rate, rating, vote_num, news_read, flag, editdate, editor, reason, view_edit, tags FROM " . PREFIX . "_post WHERE " . $stop_list . $where_category . " AND approve" . $where_date . " ORDER BY rating DESC, comm_num DESC, news_read DESC, date DESC LIMIT " . $custom_from . "," . $custom_limit;<br />		} else {<br />			$sql_select = "SELECT id, autor, date, short_story, full_story, xfields, title, category, alt_name, comm_num, allow_comm, allow_rate, rating, vote_num, news_read, flag, editdate, editor, reason, view_edit, tags FROM " . PREFIX . "_post WHERE " . $stop_list . $where_category . " AND approve" . $where_date . " ORDER BY " . $fixed . $news_sort . " " . $news_msort . " LIMIT " . $custom_from . "," . $custom_limit;<br />		}<br /><br /><!--code2--></div></div><!--ecode2--><br />Здесь мы поставили условие - если будет указано, что в блоке выводить только Топ новости, то запрос будет немного другой, для топа новостей. Сам запрос был взят из штатного Топа новостей в DLE.<br /><br />3) Открываем index.php в корне сайта и находим:<br /><!--code1--><div class="scriptcode"><div class="php-5"><!--ecode1--><br />$tpl->copy_template = preg_replace ( "#\\{custom category=['\"](.+?)['\"] template=['\"](.+?)['\"] aviable=['\"](.+?)['\"] from=['\"](.+?)['\"] limit=['\"](.+?)['\"] cache=['\"](.+?)['\"]\\}#ies", "custom_print('\\\1', '\\\2', '\\\3', '\\\4', '\\\5', '\\\6', '{$dle_module}')", $tpl->copy_template );<br /><br /><!--code2--></div></div><!--ecode2--><br />Заменяем на:<br /><!--code1--><div class="scriptcode"><div class="php-6"><!--ecode1--><br />$tpl->copy_template = preg_replace ( "#\\{custom category=['\"](.+?)['\"] template=['\"](.+?)['\"] aviable=['\"](.+?)['\"] from=['\"](.+?)['\"] limit=['\"](.+?)['\"] cache=['\"](.+?)['\"] top=['\"](.+?)['\"]\\}#ies", "custom_print('\\\1', '\\\2', '\\\3', '\\\4', '\\\5', '\\\6', '{$dle_module}', '\\\7')", $tpl->copy_template );<br /><br /><!--code2--></div></div><!--ecode2--><br />Здесь изменили обработку самого тега {custom}, а именно добавили один параметр - top, который может принимать значение yes или no.<br /><br />На этом все прелести закончились, переходим непосредственно к самому шаблону, а точнее к месту, где будет выводить блоки Топ новостей.<br />Открываем main.tpl и в нужном для нас месте вставляем наш модифицированный тег {custom} следующего вида:<br /><!--code1--><div class="scriptcode"><div class="html-7"><!--ecode1--><br />{custom category="1" template="custom" aviable="global" from="0" limit="10" cache="yes" top="yes"}<br /><!--code2--></div></div><!--ecode2--><br />Надеюсь разжевывать не надо, за что отвечает каждый параметр. Внимание лишь на один - top="yes".<br />Догадайтесь сами, что он значит :)]]></description>
<category><![CDATA[Datalife Engine]]></category>
<dc:creator>aL13n</dc:creator>
<pubDate>Fri, 09 Jul 2010 11:09:22 +0300</pubDate>
</item><item>
<title>Автоматическое создание превью с эффектом Philips Ambilight</title>
<guid isPermaLink="true">http://derepko.ru/modules/modules_datalife_engine/7_-philips-ambilight-effect-datalife-engine/</guid>
<link>http://derepko.ru/modules/modules_datalife_engine/7_-philips-ambilight-effect-datalife-engine/</link>
<description><![CDATA[Данный хак может послужить одним из вариантов оформления галереи фотографий в стиле технологий Philips (Philips Ambilight). Руку к реализации такого эффекта <a href="http://habrahabr.ru/blogs/webdev/92654/" target="_blank">приложил</a> хабраюзер <u>Aidsoid</u>. Я лишь по просьбе желающих захотел реализовать возможность создания такого эффекта и в DLE.<br />Итак, наша задача получить превью показанного ниже типа, используя CMS DatalifeEngine.<br /><div align="center"><!--TBegin--><a href="http://derepko.ru/uploads/posts/2010-05/1273370211_gall-01.jpg" onclick="return hs.expand(this)" ><img src="http://derepko.ru/uploads/posts/2010-05/thumbs/1273370211_gall-01.jpg" alt='Автоматическое создание превью с эффектом Philips Ambilight' title='Автоматическое создание превью с эффектом Philips Ambilight'  /></a><!--TEnd--></div><br />Делается это очень просто.<br /><br />Открываем класс обработки изображений /engine/classes/thumb.class.php и находим строчку:<br />1) <i>function size_auto($size = 100, $site = 0)</i><br /><br />Выше вставляем следующий кусок кода:<br /><!--code1--><div class="scriptcode"><div class="php-1"><!--ecode1--><br />function insert_bg($width, $height, $padding) {<br />	<br />		$dest_image = imagecreatetruecolor($width, $height);<br />		<br />		$result = imagecopyresized($dest_image, $this->img['src'],  0,  0,  0,  0, $width, $height, $this->img['lebar'], $this->img['tinggi']);<br />		<br />		if (!$result) return FALSE;<br />		<br />		for ($i= 0; $i &lt;= 100; $i++) {<br />			$result = imagefilter($dest_image, IMG_FILTER_SMOOTH, 6);<br />			if (!$result) return FALSE;<br />	        }<br />	    <br />		if ( ($this->img['lebar'] ==  0) or ($this->img['tinggi'] ==  0) ) {<br />			return FALSE;<br />		}<br />		<br />		$ratio = min( ($width-2*$padding)/$this->img['lebar'] , ($height-2*$padding)/$this->img['tinggi'] );<br />		 <br />		$new_width = $ratio * $this->img['lebar'];<br />    	        $new_height = $ratio * $this->img['tinggi'];<br />    	<br />		if ( ($new_width >= $this->img['lebar']) or ($new_height >= $this->img['tinggi']) ) {<br />			$new_width = $this->img['lebar'];<br />			$new_height = $this->img['tinggi'];<br />		}<br />	    <br />		imagecopyresampled($dest_image, $this->img['src'], round(($width-$new_width)/2), round(($height-$new_height)/2),  0,  0, $new_width, $new_height, $this->img['lebar'], $this->img['tinggi']);<br />		$this->img['src'] = $dest_image;<br />		<br />		return true;<br />	<br />	}<br /><!--code2--></div></div><!--ecode2--><br /><br />2) <i>return $this->crop( intval($size[0]), intval($size[1]) );</i><br /><br />Заменяем ее на:<br /><!--code1--><div class="scriptcode"><div class="php-2"><!--ecode1--><br />return $this->insert_bg( $size[0], $size[1], 10 ); // 10 - отступ<br /><!--code2--></div></div><!--ecode2--><br />где 10 - это отступ от краев, который будет размыт.<br /><br />3) При загрузке изображения указываем размеры создания тумбы, указывая ширину и высоту. Например, 150x100, либо 300x200 и т.п.<br /><br />Дело сделано, пользуйтесь на здоровье. И напоследок наш результат, протестированный на DLE <u>8.3</u> и <u>8.5</u>:<br /><div align="center"><!--TBegin--><a href="http://derepko.ru/uploads/posts/2010-05/1273372042_edurancesmallville08hddl4go0fj.jpg" onclick="return hs.expand(this)" ><img src="http://derepko.ru/uploads/posts/2010-05/thumbs/1273372042_edurancesmallville08hddl4go0fj.jpg" alt='Автоматическое создание превью с эффектом Philips Ambilight' title='Автоматическое создание превью с эффектом Philips Ambilight'  /></a><!--TEnd--></div>]]></description>
<category><![CDATA[Datalife Engine]]></category>
<dc:creator>aL13n</dc:creator>
<pubDate>Thu, 20 May 2010 05:04:00 +0300</pubDate>
</item><item>
<title>Борьба с альфа прозрачностью PNG в IE6</title>
<guid isPermaLink="true">http://derepko.ru/articles/xhtml/6_test/</guid>
<link>http://derepko.ru/articles/xhtml/6_test/</link>
<description><![CDATA[За всю историю существования Internet Explorer 6, было предложено много методов для корректного отображения PNG с альфа прозрачностью (alpha transperency). Многим думаю известно, что IE6 не поддерживает альфа-канал, а с настоящими стилями веб-дизайна без поддержки так называемых "фич" PNG создать нечто красивое и сверхъестественное очень сложно. Хоть и некоторые большие комьюнити, например, YouTube <a href="http://ripie6.com/" target="_blank">похоронили IE 6 версии</a>, но все же осталась довольно таки большая доля пользователей интернета по прежнему бороздящих его на своем "друге". И клиент, заказывающий верстку, порой просит поддержку IE6. Деваться нам некуда, надо делать.<br />Предлагаю использовать самый лучший на данный момент хак для поддержки прозрачности png изображений в Internet Explorer 6 - <b>DD_belatedPNG</b>.<br />Официальный сайт: <a href="http://www.dillerdesign.com/experiment/DD_belatedPNG/" target="_blank">http://www.dillerdesign.com/experiment/DD_belatedPNG/</a><br /><br />Потребуется всего-лишь один JS и небольшая настройка для наших элементов, чтобы решить данную проблему. Скачиваем его <a href="http://www.dillerdesign.com/experiment/DD_belatedPNG/#download" target="_blank">здесь</a>.<br /><br />Подключаем его в &lt;head&gt;&lt;/head&gt; и пишем комментарий, чтобы скрипт работал только для IE6:<br /><!--code1--><div class="scriptcode"><div class="html-1"><!--ecode1--><br />&lt;!--[if IE 6]&gt;<br />&lt;script type="text/j&#097;vascript" src="/js/belatedpng-min.js"></script><br />&lt;script language="j&#097;vascript" type="text/j&#097;vascript"><br />	DD_belatedPNG.fix('#menu');<br /></script><br />&lt;![endif]--&gt;<br /><!--code2--></div></div><!--ecode2--><br /><br />С помощью функции <i>DD_belatedPNG.fix</i> мы указываем в каком блоке, изображении обрабатывать наши png. В данном примере мы обрабатываем блок/изображение с ID <i>menu</i>.<br /><br />Можно задавать сразу несколько селекторов:<br /><!--code1--><div class="scriptcode"><div class="html-2"><!--ecode1--><br />&lt;script language="j&#097;vascript" type="text/j&#097;vascript"><br />	DD_belatedPNG.fix('.right input, #main_menu li a, .block_side, .index_page_1, .index_page_2, .index_page_3, .images img');<br /></script><br /><!--code2--></div></div><!--ecode2--><br /><br />Огромный плюс, которым не обладает ни один подобный хак, является <b>возможность позиционировать изображение в фоне</b>.<br /><br />Сайт автора скрипта с примерами и использованием: <a href="http://www.dillerdesign.com/experiment/DD_belatedPNG/" target="_blank">http://www.dillerdesign.com/experiment/DD_belatedPNG/</a>]]></description>
<category><![CDATA[X/HTML]]></category>
<dc:creator>aL13n</dc:creator>
<pubDate>Wed, 10 Mar 2010 00:57:04 +0200</pubDate>
</item><item>
<title>Очистка потока. Метод clearfix</title>
<guid isPermaLink="true">http://derepko.ru/articles/xhtml/5_clearing-ochistka-potoka-metodom-clearfix/</guid>
<link>http://derepko.ru/articles/xhtml/5_clearing-ochistka-potoka-metodom-clearfix/</link>
<description><![CDATA[В природе существует несколько способов очистки потока от float. И каждый из них в какой-то мере по разному работает в различных браузерах. Можно воспользоваться простым свойством <i>clear: both;</i>, но при этом придется добавить еще несколько свойств к элементу, чтобы отображение было идентичное во всех браузерах.<br /><br />Итак, <b>вариант первый</b>, не удовлетворяющий семантике - использование тега с определенными свойствами, среди которых <i>clear: both</i>.<br /><br />Свойства CSS, с помощью которых происходит <u>кроссбраузерная</u> очистка потока:<br /><!--code1--><div class="scriptcode"><div class="css"><!--ecode1--><br />.clr {<br />    clear: both; /* очистка потока */<br />    height: 0;<br />    line-height: 0;<br />    font-size: 0;<br />}<br /><!--code2--></div></div><!--ecode2--><br /><br /><i>line-height: 0</i> и <i>font-size: 0</i> используется для IE, т.к. он отображает пустоту в блоке с заданным размером шрифта и меж строчным интервалом.<br /><br />Рабочий пример:<br /><!--code1--><div class="scriptcode"><div class="html-1"><!--ecode1--><br /><html><br /><head><br /><style type="text/css"><br />.container {<br />	background #000000;<br />	border: 1px solid #666666;<br />}<br /><br />.clr {<br />	clear: both; /* очистка потока */<br />	height: 0;<br />	line-height: 0;<br />	font-size: 0;<br />}<br /></style><br /></head><br /><body><br /><div class="container"><br />	<div style="float: left;">Левый блок</div><br />	<div style="float: right;">Правый блок</div><br />	<div class="clr"></div><br /></div><br /></body><br /></html><br /><!--code2--></div></div><!--ecode2--><br /><br /><a href="http://derepko.ru/examples/clearfix/clearfix_1.html" >Смотреть результат</a>.<br /><br /><b>Вариант второй</b>: использование псевдо-класса <i>:after</i> для контейнера, внутри которого находятся те самые плавающие элементы, и hasLayout для IE.<br /><!--code1--><div class="scriptcode"><div class="css-2"><!--ecode1--><br />.clearfix:after {<br />	visibility: hidden;<br />	display: block;<br />	font-size: 0;<br />	content: " ";<br />	clear: both;<br />	height: 0;<br />}<br /><br />* html .clearfix { zoom: 1; } /* IE6 */<br />*:first-child+html .clearfix { zoom: 1; } /* IE7 */<br /><!--code2--></div></div><!--ecode2--><br /><br /><a href="http://derepko.ru/examples/clearfix/clearfix_2.html" >Смотреть результат</a>.<br /><br />Единственный минус этого варианта в том, что данный код не проходит валидацию CSS, потому что валидатор ничего не знает о <i>zoom</i>. Поэтому лучше закрыть глаза на те 2 строчки ошибок и <b>использовать именно этот вариант</b>.<br /><br />Но если Вы стремитесь к валидности кода, то можно использовать еще один вариант (в IE7 возможны глюки, куда же без них):<br /><!--code1--><div class="scriptcode"><div class="css-3"><!--ecode1--><br />.clearfix:after {<br />	visibility: hidden;<br />	display: block;<br />	font-size: 0;<br />	content: " ";<br />	clear: both;<br />	height: 0;<br />	}<br />.clearfix { display: inline-table; }<br />/* Hides from IE-mac \*/<br />* html .clearfix { height: 1%; }<br />.clearfix { display: block; }<br />/* End hide from IE-mac */<br /><!--code2--></div></div><!--ecode2--><br /><br />Существует еще несколько вариантов очистки потока, о которых нагляднее всего можно узнать из таблицы, приведенной <a href="http://www.ejeliot.com/samples/clearing/rule-support.html" target="_blank">здесь</a>. Там же указано как работает тот или иной метод в разных браузерах.]]></description>
<category><![CDATA[X/HTML]]></category>
<dc:creator>aL13n</dc:creator>
<pubDate>Sun, 31 Jan 2010 19:30:39 +0200</pubDate>
</item></channel></rss>
