воскресенье, 30 июня 2013 г.

OpenCart: краткое описание товара

Как-то понадобилось мне вывести краткое описание продукта, чтоб получилось вот так:
Ну ок
Смотрим, у какой модели наш модуль инфу берет:

$this->load->model('catalog/product');

Хорошо, идем смотреть в модель product, ищем какую инфу он нам еще передает:
Как видим, описание нам передается

Пробуем достать его, в модуль добавляем это:
Вот так мы подцепили описание из модели и передали его нашему шаблону
А ну ка попробуем его вывести:

<div class="text"><?php echo $product['description']; ?></div>  
И получаем такое:

Описание вывелось! Но стоп: почему тэги вывелись текстом а не отрендерились? Я хз :о) Где-то они переводятся из html-сущности в текст, так давайте это исправим:



Прекрасно!
Ну теперь осталось лишь избавиться от тэгов и обрезать описание до нужных нам размеров:

'description' => substr(strip_tags(html_entity_decode($result['description'])), 0, 60)."...",
Вуаля!)))

воскресенье, 26 мая 2013 г.

Анимация в Flash: урок для начинающих

И так, достаем где-нибудь программу Adobe Flash (тут используется версия CS6), желательно её установить, запускаем и... половина работы сделана, далее расписаны лишь мелочи, которых должно хватить для рисовки угарного мульта и последующего его показа пьяным друзьям

Создаем новый ActionScript3 проект
Смотрим на интерфейс проги, а именно на временную шкалу
Слева мы видим "Layer 1" - это слой, как в фотожопе, и его можно скрывать (жмакаем на точку, расположенную под глазиком), блокировать от редактирования на всякий случяй (колодка), удалять (в низу, изображение мусорного бака), создавать новые слои и группы/папки
Справа мы видим саму временную шкалу, в ней размещаются кадры нашего мего-ролика достойного высших наград

Панель инструментов трогать почти не будем, мы будем использовать хот-кеи как настоящие джедаи

И так, находим рабочее поле/холст, готовимся в нем рисовать
Приготовились
Жмем  "В"(кисть) и ищем Properties (эта вкладка показывает настройки текущего инструмента/объекта)
Давайте попробуем нарисовать несколько линий, играясь с параметром Smoothing (размер кисти регулируем кнопками "[" и "]")
Должно получится нечто на подобии современного искусства
Жмем "Q"(выделялка), выделаем их (Ctrl+A - выделить все) и удаляем

А теперь нарисуй круг
Жмем "К"(заливка), тыкаем в середину круга и радуемся

Ну все, теперь мы готовы рисовать настоящий мульт!!1
Я хочу нарисовать голубое небо
Жмем "R"(прямоугольник), выбираем небесно голубой цвет заливки и заполняем им весь холст
В новом слое кистью рисуем землю, облака, солнце, и заливаем подходящими цветами (почему в новом слое? попробуйте продолжить работу без создания слоя, сами увидите :о) )
Вы можете столкнуться с маленькой проблемкой, которая изрядно бесит еще со времен Paint-a - невозможность залить пространство из за возможных дырок
ЗЫ: то, что за пределами холста, в исходном ролике видно не будет
В Adobe Flash решение есть! У инструмента заливки есть параметр степени пофигизма к дыркам!!1
Фухх, идем дальше
В новом слое нарисуем деревья
По-моему получилось восхитительно, и у вас, уверен, тоже!
Но кое чего явно не хватает, скорее всего объема
Жмем "Y"(ручка), и проделываем что-то типа такого:
А теперь заливаем нужные места цветами чуть-темнее исходных
Выделяем все (Q, Ctrl+A), и жмакаем на следующее:

Как видим, дерево очистилось от линий ручки, а тени остались
Что это вообще было?
Создай новый слой, нарисуй две фигуры отдельно друг от друга
Жмем "V"(выделялка объектов), выбираем одну фигуру, перетаскиваем на другую, убираем выделение (щелкаем где-нибудь в пустое место холста), опять выбираем нашу фигуру - и - о чудо! - они объединились! Что это за злое волшебство?
В Flash, на сколько я понимаю, один слой == один объект (есть конечно возможность рисовать в отдельный объект (подслой), но это уже другая история)
Tак вот: ручку мы использовали для рисования вспомогательных контуров, которые можно легко убрать

Давайте теперь в новом слое нарисуем Главного Героя (далее как гг) гордо стоящего на сотворенной нами земле

Надо бы вдохнуть в него жизнь, а то стоит там как столб
Жмем "F7"(новый кадр), и чтобы видеть предыдущий кадр (его "тень") тычем вооот сюда:
Рисуем чувачка еще раз, или не чувачка, на ваше усмотрение
ЗЫ: параметр fps можно понизить до 12, при этом пострадает плавность анимации, но зато придется меньше рисовать кадров :о)
Ну что еще?
Можно нажать "F6"(новый кадр, на основе предыдущего), или "F5"(увеличение размера кадра во временной шкале)
"<" и ">" - перемещение между кадрами
И святой "Enter"(пуск/пауза воспроизведения анимации)

Еще есть такая штука как Сцена (Scene)
Каждая из них это отдельный холст со своей временной шкалой, и в финальном ролике они воспроизводятся поочередно
"Ctrl+Enter"(построить ролик)

Ну в принципе и все )))
Рисовать - умеем, кадры создавать - умеем, что еще? Ну разве что пару уроков по чёрной магии не помешает :о)
А я пока отлучусь на кое-какое время:

вторник, 14 мая 2013 г.

Что лучше? Mozilla Firefox vs Google Chrome

Все началось с того, что комп начал сильно тормозить (если точнее, то тормоза были во время работы браузера)
Отнес на полную чистку (смазка кулеров и т п), но к моему величайшему удивлению тормоза остались О_О
Проверил температуру процессора во время воспроизведения ютубе-видео
В пределах нормы, но все же слишком горячо
Да и оперативка забита фиг знает чем
Поставил Firefox и - о Боги! - все работает без тормозов!(кхм, сравнительно)
Открыл в мозилле больше десяти вкладок - оперативы хавает ++280мб, открыл в хроме 7 вкладок - ++1000мб (мог бы и больше, но задолбался ждать когда они наконец-то загрузятся, в мозилле намного быстрее)
Получается православный хром уже не торт
Но почему так?

Что лучше? Mozilla Firefox vs Google Chrome - ответ прост: зависит от вашей машины
Chrome хорошо использует многоядерные процессоры, каждая его вкладка живет "своей жизнью", и это плохо сказывается на одноядерных
Если у вас нетбук, старый ноутбук или допотопный пк - Firefox однозначно подойдет именно вам
Если у вас больше одного ядра в процессоре и больше 2гб оперативки - Chrome это ваш браузер (то же касается Windows Vista/7/8)
В остальном же (функциональные возможности, количество расширений, удобство) они в принципе равны
На этом пока можно поставить точку в войне между двумя Гигантами
ЗЫ: эта запись является компиляцией моей темы в моем любимом форуме

Как сгенерировать/создать юзербар на PHP?

В принципе нечего тут рассказывать, просто выложу прокомментированный код и приложу архив со всем остальным
В итоге должно получится следующее:


<?php
// Тип содержимого
header('Content-Type: image/png');

define('FONT_NAME', 'trebuc.ttf');//имя шрифта
define('FONT_SIZE', 9);//кегль
define('SPACING', 1);//расстояние между символами
$im = imagecreatefrompng('userbar_template.png')//достаем "подложку" юзербара
  or die('Cannot create image');
define('WIDTH', imagesx($im));
define('HEIGHT', imagesy($im));

// Создание цветов
$white = imagecolorallocate($im, 255, 255, 255);
$grey = imagecolorallocate($im, 128, 128, 128);
$yellow = imagecolorallocate($im, 255, 216, 0);
$black = imagecolorallocate($im, 0, 0, 0);

// Текст надписи
$text = "Введите название...";

//определяем нужный для нашего текста размер области
$coord = imagettfbbox(
  FONT_SIZE,  // размер шрифта
  0,          // угол наклона шрифта (0 = не наклоняем)
  FONT_NAME,  // имя шрифта, а если точнее, ttf-файла
  $text       // собственно, текст
);
$width = $coord[2] - $coord[0];
$height = $coord[1] - $coord[7];
// Зная ширину и высоту изображения, располагаем текст по центру:
//$X = (WIDTH - $width) / 2;
$Y = (HEIGHT + $height) / 2.5;

// Тень
imagettftextSp($im, FONT_SIZE, 0, 11, $Y, $white, FONT_NAME, $text, SPACING);

// Текст
imagettftextSp($im, FONT_SIZE, 0, 10, $Y, $white, FONT_NAME, $text, SPACING);

// Достаем вторую, верхнюю часть шаблона
$cover = imagecreatefrompng('userbar_template_cover.png')
  or die('Cannot create image');
// Накладываем её поверх нашего супер-юзербара
imagecopy ($im, $cover, 0, 0, 0, 0, WIDTH, HEIGHT);

imagepng($im);
imagedestroy($im);

// Функция эта украдена уже не помню у кого и где, но автору большая от меня благодарность - именно благодаря ей можно управлять расстоянием между символами, ибо стандартные средства этого не предусмотрели О_О
function imagettftextSp($image, $size, $angle, $x, $y, $color, $font, $text, $spacing = 0)
{        
    if ($spacing == 0){imagettftext($image, $size, $angle, $x, $y, $color, $font, $text);}
    else
    {
        $temp_x = $x;
        for ($i = 0; $i < strlen($text); $i++)
        {
            $bbox = imagettftext($image, $size, $angle, $temp_x, $y, $color, $font, mb_substr($text,$i,1,'UTF-8'));
            $temp_x += $spacing + ($bbox[2] - $bbox[0]);
        }
    }
}
?>
В html на время тестов можно прописать что-то типа такого:
<img src="userbar.php">
Php-скрипт выдает картинку в качестве результата благодаря записи header('Content-Type: image/png'), позже её надо бы убрать, а саму картинку сохранять на сервере
Ссылка на архив с шрифтом и шаблоном
Ну и конечно же можно генерить BB-коды и просто ссылки для вставки в html
//BB-code
$res = $res."[url=".ссылка на вашу страницу."][img]".ссылка на юзербар."[/img][/url]";
//HTML
$res = $res."<a target=\"_blank\" href=\"".ссылка на вашу страницу."\"><img src=\"".ссылка на юзербар."\" border=\"0\"></a>";