Создание компонента демотиваторов на базе скрипта
А демотиваторам я сразу нашел ему применение, мне будет очень кстати для одной задумки на сайте, но мне еще нужен будет слайдер фото, чтоб он брал фото из папки демотиваторов.
Во, классно! Останется сделать свой tpl для данного альбома — и будет полноценный демотиватора альбом!
Попробовал прикрутить скрипт к галерее.
Пока получилось так — cms-i.ru/photos/1036
Логин и пароль — tester
Когда придумаю как реализовать кнопку "Демотивировать", опишу решение
А я все даже и не брался :(
Касательно кнопки — прикручиваете условие и направляете в другой шаблон
поэтому по-быстрому тут напишу.
1) Из архива catsite — uvsr.stu.ru/dm/root_dm.zip, берем копируем в корень сайта 2 файла шрифтов и dm.php
2) В файле dm.php первой строкой на всякий случай пишем
а вместо строки
3) В файле /components/photos/model.php
после
$this->deletePhotoFile($photo_file, $uploaddir);
if ($album['title']=='Демотиваторы'){ include ("dm.php"); demotivator($uploadphoto,$_SESSION['icms']['mod']['title'],$_SESSION['icms']['mod']['description'],"instantcms.ru");}
4) Файл /templates/ШАБЛОН/components/com_photos_add1.tpl
Вместо
<tr> <td colspan="2" valign="top"> <input id="only_mod" name="only_mod" type="checkbox" value="1" onclick="mod_text()" /> <label for="only_mod">{$LANG.ADD_MULTY}</label></td> </tr>
{if $album.title != 'Демотиваторы'} <tr> <td colspan="2" valign="top"> <input id="only_mod" name="only_mod" type="checkbox" value="1" onclick="mod_text()" /> <label for="only_mod">{$LANG.ADD_MULTY}</label></td> </tr> {/if}
5) Файл /templates/ШАБЛОН/components/com_photos_view.tpl
Вместо
<a class="photo_add_link" href="/photos/{$album.id}/addphoto.html">{$LANG.ADD_PHOTO_TO_ALBUM}</a>
{if $pagetitle == 'Демотиваторы'} <a class="photo_add_link" href="/photos/{$album.id}/addphoto.html">Создать демотиватор</a> {else} <a class="photo_add_link" href="/photos/{$album.id}/addphoto.html">{$LANG.ADD_PHOTO_TO_ALBUM}</a> {/if}
Вроде все…
Кнопку "Демотивировать" я пока не делал — совершенно нет времени. К томуже с ней всё не так просто…Касательно кнопки — прикручиваете условие и направляете в другой шаблон
В файл /includes/graphic.inc.php вставить следующее:
[hide]развернуть
// ========================================================================= function demotivator($image, $slogan1, $slogan2, $copyright) { // преобразование win в utf $slogan1 = dm_win2utf($slogan1); $slogan2 = dm_win2utf($slogan2); $copyright = dm_win2utf($copyright); // Открываем изображение switch($ext[2]) { case 6: {$img = ImageCreateFromBMP($image); break;} default : { return 2; } } // Получение размеров изображения // Размер черного прямоугольника, который будем рисовать $tx = $x * 0.1; $ty = $x * 0.1; $bx = $x + $tx; $by = $y + $ty; $dx= $x * 0.01; // Смещение. Необходимо для рисования рамки $dy= $x * 0.01; // Черный фон // Создаем новое изображение // Масштабирование // Расчет смещений для рисования рамки $x1 = $tx; $y1 = $ty; $x2 = $bx; $y2 = $y + $ty; // Цвета рамки, слоганов и копирайта // Рамки на изображении // Пишем слоганы, сначала с X=0, чтобы получить линейные размеры текста $s2 = ImageTTFText($img2, 0.035 * $bx, 0, $dx, $by + $ty + 0.08 * $bx, $col, "arial.ttf", $slogan2); // 1-й слоган не помещается в картинку - ошибка! if (($s1[2] - $s1[0]) > $bx + $tx) $sl1 = 1; $dx = (($bx + $tx) - ($s1[2] - $s1[0]))/2; // Смещение. Эта величина определяет центровку текста для 1-го слогана // Непосредственно текст. 1-й слоган $dx = (($bx + $tx) - ($s2[2] - $s2[0]))/2; // Смещение. Эта величина определяет центровку текста для 2-го слогана // Непосредственно текст. 2-й слоган (таглайн) if ($dx < 0) { // Текст не умещается в картинку, масштабируем. $s = $s2[2] - $s2[0]; $size = (0.035 * $bx * $bx) /$s; $dx = (($bx + $tx) - ($s2[2] - $s2[0]))/2; } else { $size = 0.035 * $bx; } // Copyright return 0; } // ========================================================================= // Преобразование win-1251 в UTF-8 // Взято с сайта: www.php.net, Автор: SiMM function dm_win2utf($string){ return $string; } else { $out = ''; else if ($ch >= 0xC0) if ($ch < 0xF0)
А можно подробнее, куда вставить? после каких строк?В файл /includes/graphic.inc.php вставить следующее:
В начало, вы же функцию описываете
после этого прямо:
Вставил куда сказано, попробовал на денвере. При загрузке картинки для демотивации выдало ошибку
Fatal error: Call to undefined function dm_win2utf() in Z:\home\test2.ru\www\includes\graphic.inc.php on line 20
это строка $slogan1 = dm_win2utf($slogan1);
Что не так?
Сейчас фото загружается, рамка накладывается, но текст не вставляется…Не загружается фото…
include ("dm.php");
Впрочем, можно действительно как советует catsite вместо копирования и подключения кода перенести функции себе.
Алфей, строки могут быть пустыми если забыл скопировать шрифты
что то я нашел только галлерею готовых демотиваторов, а самой кнопки сделать демотиватор так и не обнаружил.(( Кто нибудь покажет как это работает?))