Июн 09

Лето, солнце, отпуск

Заметил, что летом наблюдается сезонное снижение посещаемости на моих проектах. Видимо связано это с тремя факторами:

  1. Сады-огороды
  2. Отдых на природе
  3. Отпуска и поездки

А как у вас летом с посещаемостью, уважаемые читатели?

Опубликовать в Мой Мир
Опубликовать в Одноклассники
Опубликовать в Google Plus
Опубликовать в LiveJournal
Июн 09

Скрипт для ротации баннеров

Решил сделать на своем сайте ротацию баннеров от различных партнерских программ. Сайт самописный и различные готовые решения, которые есть, например, для WordPress не подходят (кстати, в WordPress для этих же целей я использую плагин AdRotate, весьма удобный).

Поскольку простейшая ротация баннеров не требует слонжого программирования, то на создание скрипта и его тестирование отладку ушло ~20 минут.
Код баннерного ротатора выглядит следующим образом.

<? 
function rotator($filename)
 {
   if (file_exists($filename)) // проверяем наличие файла
    {
      $s=file_get_contents($filename); // читаем файл в строку
      $n = explode("###", $s);	// разделяем строку на отдельные баннеры
      $r = rand(0,count($n)-1); // выбираем случайное число (по кол-ву баннеров)
      echo $n[$r]; // выводим код баннера в поток вывода
     }
 }
?>

Для удобства использования ротатор реализован в виде функции, параметром которой является имя файла с HTML-кодом рекламных объявлений.
Файл с рекламными объявлениями выглядит следующим образом.

<a href="http://codething.ru/">Уголок веб-разработчика</a>
###
<a href="http://blog.codething.ru/">Блог веб-разработчика</a>
###
<a href="http://forum.codething.ru/">Форум о веб-разработке</a>

В качестве разделителя используется последовательность ###.

Вызов показа баннеров выполняется в коде следующим образом

<?php
 include ("rotator.php");
 rotator("file"); // запускаем с именем файла, в котором код баннеров
?>

Задача ротации баннеров решена.

Опубликовать в Мой Мир
Опубликовать в Одноклассники
Опубликовать в Google Plus
Опубликовать в LiveJournal
Июн 07

Формируем PDF файл из PHP

Столкнулся недавно с задачей формирования PDF файла из PHP.  Немного погуглив нашел два программных решения: FPDF и TCPDF. Первое значительно компактнее второго, но мне не подошло, т.к. там имелись проблемы с русскими шрифтами. Шрифты для него необходимо как-то обрабатывать и включать в состав продукта, после чего можно работать. С этим разбираться не хотелось и поэтому я стал смотреть второй вариант - TCPDF. В кодировке UTF-8 всё отображается сразу нормально.

PDF-файл может формироваться разными способами, самый простой из которых -  формирование из HTML кода.  Правда HTML поддерживается лишь частично, но все основное есть и работает. Можно задавать стили и цвета текста, размещать картинки и таблицы. Для моей задачи этого было более чем достаточно.

Весьма просто создать PDF-файл из HTML кода средствами TCPDF, вот пример:

1. сначала копируете файлы TCPDF в необходимую папку на хостинге.

2.  пишете программный код.

<?
require_once('tcpdf/config/lang/eng.php');
require_once('tcpdf/tcpdf.php');
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);

// устанавливаем описание документа
$pdf->SetCreator(PDF_CREATOR);
$pdf->SetAuthor('Test');
$pdf->SetTitle('Test');
$pdf->SetSubject('Test');
$pdf->SetKeywords('Test');

// выключаем заголовки, т.к. они нам не нужны
$pdf->setPrintHeader(false);
$pdf->setPrintFooter(false);

// устанавливаем поля
$pdf->SetMargins(10,10,10,10);

// автоперенос на новую страницу
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);

// пропорционирование картинок
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);

// языковые настройки
$pdf->setLanguageArray($l);

// Устанавливаем шрифт
$pdf->setFontSubsetting(true);
$pdf->SetFont('dejavusans', '', 12, '', true);
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);

// Вывод данных из HTML в PDF
$pdf->AddPage();
$s= '<h1>Привет мир!</h1><p>Это тестовый пример!</p>';
$pdf->writeHTML($s, true, false, true, false, '');
$pdf->Output('test.pdf', 'I');
?>

ВАЖНО! Файл примера должен быть записан в кодировке UTF-8! Иначе ничего не увидите в сгенерированном PDF-файле.

На сайте TCPDF имеется множество других примеров.

P.S. Если при запуске примеров Вы видите ошибку:

TCPDF ERROR: Some data has already been output, can't send PDF file

необходимо перед строками

require_once('tcpdf/config/lang/eng.php');
require_once('tcpdf/tcpdf.php');

вызвать функцию ob_end_clean().

Помогает. Почему-то так было на хостинге от Мастерхост, а на jino.ru сразу все нормально.

P.P.S. TCPDF распространяется по лицензии LGPL, следовательно может встраиваться (при соблюдении лицензионных требований) даже в коммерческие продукты.

Опубликовать в Мой Мир
Опубликовать в Одноклассники
Опубликовать в Google Plus
Опубликовать в LiveJournal
Май 14

Яндекс.Метрика vs Google Analitycs

Подробного анализа проводить не буду, выскажу лишь свое субъективное мнение, т.к. пользовался и тем и другим.

Метрика Яндекса - значительно нагляднее и удобнее в использовании, нежели аналог от Google. Более того, помимо похожих статистических отчётов (которые имеются в том или ином виде у каждого счётчика), у Яндекса есть очень удобные визуальные инструменты, такие как карта кликов и карта ссылок - позволяющие наглядно отследить поведение пользователей на вашем сайте. Еще есть карта путей по сайту, показывающая переходы между страницами, а также точки входа и выхода на определенной странице. Все это визуализируется с учётом долей различного трафика (поискового, прямого, внешнего). В общем, для любителей анализировать поведение пользователей - Яндекс.Метрика - один из лучших инструментов. Примеры использования приведены на рисунках.

Яндекс.Метрика - карта кликов

Яндекс.Метрика - карта кликов

Яндекс.Метрика - карта ссылок

Яндекс.Метрика - карта ссылок

Яндекс.Метрика - карта путей по сайту

Яндекс.Метрика - карта путей по сайту

Опубликовать в Мой Мир
Опубликовать в Одноклассники
Опубликовать в Google Plus
Опубликовать в LiveJournal
Апр 13

Что-то у меня страничка с машинками не открывается

Обращение к клиентам!

Дорогие клиенты, я знаю, что ваше любимое обращение об ошибке на сайте звучит примерно так:
"Что-то у меня страничка с машинками не открывается!"

Туды её в качель, страничку с машинками! Сообщайте полный адрес! Обычно, во всех мессенджерах он даже выделяется ссылкой автоматически!

Знаете, какой мукой и душевным страданием является для программиста перевод адреса из только вам понятного описания в общепринятую URL-форму?! Особенно если это происходит несколько раз за день!

Будьте взаимовежливы!

Спасибо.

Опубликовать в Мой Мир
Опубликовать в Одноклассники
Опубликовать в Google Plus
Опубликовать в LiveJournal