Создаем простую иконку файла из фотографии

2 Июнь 2011

Иконка файла чуть ли не самая распространенная, в ней уже сложно придумать что то новое и придать ей уникальный вид. Один из вариантов — просто согнуть и сфотографировать лист бумаги, и он уже уникален. Никто больше так его не согнет.

Берем лист А4, сгибаем угол, как это принято у иконок, и фотографируем на телефон, на темном фоне, так потом будет проще вырезать.

Вырезаем наш лист из фона без теней, выравниваем по вертикалям и дорисовываем его, чтобы линии были ровными.

Мой лист освещался из окна, он холодного оттенка, что не подходит — обесцветим, убираем фактуру бумаги и кладем серый градиент.

Все готово, остается добавить мелочи — тень и зажим с обозначением формата файла.

Создание иллюстрации для шапки покерного сайта

18 Май 2011

Ниже я опишу процесс создания иллюстрации для главной страницы сайта онлайн покера. Задача иллюстрации (да, даже у нее есть задача) — показать посетителю куда он попал, создать настроение и сочно показать покер.

Придумываем идею и композицию. При разработке не забываем про минимальную ширину сайта 1000 пикселей, и что он тянется на 100%. Т. е. фон нужно будет тянуть слева и справа.

Рисуем не клипартные текстуры для карт и фишек

Создаем 3д модель

У сырого рендера корректируем цвет, создаем неоднородность фона, добавляем цвета

Чтобы иллюстрация не смотрелась пустой, добавляем «мусор» в виде конфетти и огоньков. Последний штрих — добавляем блик

Подгрузка новых постов в WordPress на AJAX (jQuery)

18 Февраль 2011

Если в нашем блоге доскроллить страницу почти до самого низа — начинается подгрузка новых постов.
В этом посте я хочу рассказать о том, как сделать так в своем блоге на WordPress.
Для этого нам придется редактировать текущую тему блога. Темы хранятся в папка_блога/wp-content/themes/название_темы/

Краткое описание работы

С помощью JavaScript мы проверяем, доскроллил ли пользователь до конца страницы. Если да, то отправляем AJAX запрос PHP скрипту, который отдаем нам нужные посты. При этом будем передавать доп. параметры, например: количество постов, номер страницы, смещение и прочее.

JQuery

Начнем с JQuery. Скачайте скрипт, если у вас его еще нет. Подключаем JQuery в шапку блога. Для этого редактируем файл header.php.

<script type="text/javascript" src="<?php bloginfo('template_directory'); ?>/jquery.js"></script>

У нас используется такой путь. Файл jquery.js должен лежать в одной папкой с темой блога.

Теперь переходим к файлу functions.php. Может получится так, что у вас этого файла нет. В этом случае создайте его в папке темы.
В WordPress есть так называемые экшены (actions), которые можно привязать к выполнению какой-либо функции. Нам необходимо добавить наш JavaScript в тег head наших страниц. Начнем с добавления экшена (он может быть расположен после функции) и добавления функции.

<?php
add_filter('wp_head', 'javascript_page');
function javascript_page() {
	global $query_string;
?>
<script type="text/javascript">
	/* Наш код будет размещен здесь */
</script>
<?php
}
?>

Добавляем JavaScript вместо комментария. Объявляем несколько полезных переменных и проверяем не доскроллил ли еще пользователь до конца страницы.

$(document).ready(function() {
	var number = 5; //количество постов
	var offset = 0; //смещение постов
	var page_number = 2; //номер страницы
	var busy = false;
    var loc = '<?php echo $query_string; ?>';
    if(loc==""){
        $(window).bind('scroll', function(e) {
            if($(window).scrollTop() + $(window).height() > $(document).height() - 250 && !busy) {
                busy = true;
                $.post('<?php bloginfo('siteurl') ?>/wp-admin/admin-ajax.php', {
                    action: 'and_action',
                    off: offset+number,
                    pagenumber: page_number,
                    query_string: '<?php echo $query_string; ?>'
                    }, function(data) {
                        if(data == "") {
                            //больше нет постов
                        }
                        else {
                            offset = offset+number;
                            $('.content').append(data);
                            busy = false;
                            page_number += 1;
                       }
                });
            }
        });
    }
});

Если в вашей теме есть отдельные файлы под каждую страницу — главная, один пост и прочее, то можно убрать эту проверку:

var loc = '<?php echo $query_string; ?>';
if(loc==""){

У нас в теме только один файл, который выводит все страницы сразу.
В этой строке $(document).height() – 250 можно установить в какой момент вы хотите начинать подгружать новые посты. Например, у нас это 250 px до конца страницы.

PHP

Продолжаем работать в functions.php
Переходим в верхнюю часть файла и добавляем два экшена (один для людей с правами администратора, второй для всех остальных) и функцию для получения новых постов.

add_action('wp_ajax_and_action', 'get_posts_page');
add_action('wp_ajax_nopriv_and_action', 'get_posts_page');

function get_posts_page() {
/* Описание функции будет здесь */
}

Обратите внимание, мы вызываем and_action, который мы ранее отправляли в функции JQuery $.post(). Теперь нам нужно написать функцию, которая выбирает все подходящие посты и выводит их в нашей верстке.
Объявляем глобальную переменную (класс) $wpdb, формируем строку запроса и в цикле выводим все наши посты.

$query_string = $_POST['query_string'];
global $wpdb;
query_posts($query_string . '&posts_per_page=5&post_status=publish&offset='.$_POST['off']);	//получаем посты
if ( have_posts() ) : while ( have_posts() ) : the_post();
/* Вывод постов в цикле */
endwhile; endif;
die();

На место моего комментария в цикл необходимо вставить HTML код вывода поста. Его нужно скопировать из файла index.php
У нас он вот такой:

<div class="post" id="post-<?php the_ID(); ?>">
	<h2 class="storytitle">
		<?php  if (!is_single() && !is_page() ) { echo '<a href="'; the_permalink() ; echo '">';}; the_title();
	if ( !is_single() && !is_page() ) echo '</a>'; ?>
	</h2>
	<em class="date"><?php the_time('j F Y') ?></em>
	<div class="storycontent">
		<?php the_content(); ?>

		<div class="feedback">
			<!-- Я убрал отсюда социальные кнопки, чтобы сократить код -->
			<span class="author"><?php the_author() ?></span>
			<?php wp_link_pages(); ?>
			<span class="comment"><?php comments_popup_link(__('0 комментариев'), __('1 комментарий'), __('% комментариев')); ?></span>
		</div>
	</div>
</div>
<?php comments_template( '', true ); ?>

Вот и все.

Скачать

Скачать файл functions.php в архиве можно здесь. Демо можно посмотреть на главной странице нашего блога.

Проверка валидности номера пластиковой карты

8 Февраль 2011

Недавно на просторах интернета мы встретили вот такую картинку с инфографикой. Картинка повествует о том, что означают эти загадочные цифры на пластиковых картах и как можно проверить валидность (правильность) номера кредитной карты.

Зачем-то мы решили сделать сервис для проверка валидности пластиковых карт. Никаких данных вашей карты мы не сохраняем. Параноики могут заглянуть в исходный код страницы и найти там чистый JavaScript без отправки данных куда-либо. Надеемся, что кому-то это будет полезно и не будет использоваться в незаконных целях.

А еще недавно мы сделали новый сайт по акции. Клиент, в очередной раз, остался очень доволен хорошим сайтом за совсем скромные деньги. Торопитесь, мы не знаем сколько еще продлится все это.

Дизайн сайта пивного бара

24 Январь 2011

На днях мы запустили новую версию нашего сайта. И замечательную акцию — «создадим сайт без лишних слов».

Первый дизайн сайта сделанный по акции. Стояла задача: создать сайт бара, где посетители смогут получить всю важную информацию о заведении и ознакомится с меню. При этом используя простые и не дорогостоящие изобразительные средства.

Начинаем с идеи. Располагаем телефон и адрес на самом видном месте — нам важно получить в итоге звонки и посетителей. Показываем основные достоинства и возможности заведения — место, разнообразие меню (на макете лишь малая его часть), аренда зала и спец. предложения. Особое внимание уделяем меню: удобочитаемо набираем текст и не используем сложного фона — всё, что бы быстро прикинуть стоимость проведения своего дня рождения.

Приступаем к макету. Продумываем компоновку меню так, что бы его было просто дополнять и редактировать в будущем. От заказчика получены фотографии не лучшего качества, бюджет не позволяет проводит фотосессию, для того, чтобы придать фотографиям приемлемый вид используем один из фильтров набора «топазлабс» (topazlabs). Он делает эффект скетча убирая плохое качество фотографии, при этом фотографии получаются с не избитым и интересным эффектом.

Дизайн занял не много времени, т. к. рисовался только один макет, нет сложных графических элементов и иллюстраций, а информации для обработки было не много.