Хак фотоальбома - добавляем демотиватор!

2004
Решение данного хака принадлежит Max
Автор функции демотивирования Copyright (C) 6 авг. 2011. Kalabzin Maxim e-mail: [email protected]
Здесь представлено облагороженное решение с форума.
Данный хак позволяет создавать демотиваторы прямо на сайте в Альбоме "Демотиваторы" встроенного фотоальбома instantcms
Вот так выглядят созданные демотиваторы:



Вот так выглядит альбом:



Вот так выглядит создание демотиватора:



Итак, приступим к реализации.

Для начала скачайте 2 файла шрифтов и 1 php файл: dm.zip

Далее есть 2 варианта решения подключения функции демотивирования:

1. вариант - залить весь архив в корень.
1.1 В файле /components/photos/model.php в самом начале описательной части пишем:
Код PHP:
include ("dm.php");
1.2 в файле dm.php архива в самом вверху вставить:
Код PHP:
if(!defined('VALID_CMS')) { die('ACCESS DENIED'); }
2. вариант - заливаем в корень сайта только файлы шрифтов.
2.1 В самое начало файла /includes/graphic.inc.php после
Код PHP:
if(!defined('VALID_CMS')) { die('ACCESS DENIED'); }
вставить полностью скопированный код из файла dm.php архива
(в файле graphic.inc.php вообще желательно описывать все функции по работе с графикой)

Далее не зависимо от предыдущих вариантов:

3. Открываем файл /components/photos/model.php
После
Код PHP:
$this->deletePhotoFile($photo_file, $uploaddir);
Вставить
Код PHP:
if ($album['title']=='Демотиваторы'){
	include ("dm.php");
	demotivator($uploadphoto,$_SESSION['icms']['mod']['title'],$_SESSION['icms']['mod']['description'],"instantcms.ru");}
4. Занимаемся оформлением ссылки создания демотиватора:
Открыть файл /templates/ШАБЛОН/components/com_photos_view.tpl
Вместо:
Код PHP:
<a class="photo_add_link" href="/photos/{$album.id}/addphoto.html">{$LANG.ADD_PHOTO_TO_ALBUM}</a>
Добавить условие:
Код PHP:
{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}
5. Занимаемся оформлением загрузки демотиватора:
Открыть файл /templates/ШАБЛОН/components/com_photos_add1.tpl
Вместо:
Код PHP:
<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>
Добавить условие:
Код PHP:
{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}
6. Далее по желанию, чтобы все было как на картинке:
все тот же файл /templates/ШАБЛОН/components/com_photos_add1.tpl
Ищем следующие фразы и заменяем их конструкциями smarty {if...}...{else}...{/if}

{$LANG.PHOTO_DESC} заменить на {if $album.title != 'Демотиваторы'}{$LANG.PHOTO_DESC}{else}Описание демотиватора{/if}

{$LANG.PHOTO_TITLE} >>>>>> {if $album.title != 'Демотиваторы'}{$LANG.PHOTO_TITLE}{else}Заголовок{/if}

{$LANG.PHOTO_DESC} >>>>> {if $album.title != 'Демотиваторы'}{$LANG.PHOTO_DESC}{else}Текст{/if}

Данную разметку:
Код PHP:
<textarea name="description" style="width:350px;" rows="5" id="description">{$mod.description}</textarea>
На такую:
Код PHP:
{if $album.title != 'Демотиваторы'}
				<textarea name="description" style="width:350px;" rows="5" id="description">{$mod.description}</textarea>
				{else}
				<textarea name="description" style="width:350px;" rows="1" id="description">{$mod.description}</textarea>
				{/if}
Основное решение закончено. Чтобы сделать пояснительную картинку, как у меня на сайте, создайте демотиватор, и вставьте его код после
Код PHP:
{$LANG.PHOTO_PLEASE_NOTE}</div>
Код PHP:
{if $album.title == 'Демотиваторы'}
Введите надписи, как на данном примере:
<div>
</div>
<img src="/путь_к_картинке/картинка.jpg" width=250 align="center" />
<div>
</div>
{/if}
Все, хак готов.
Теперь на сайте будет полноценный сервис демотиваторов в Альбоме "Демотиваторы" фотоальбома.
Да, кстати, если такого альбома у Вас еще нет, то создайте!
Обратите внимание! в третьем пункте instantcms.ru заменить на свой копирайт!
Хак модуля последних объявлений | Хак: sip звонки пользователям сайта (сторонний сервис)
Комментарии (70)
ByMind 16 ноября 2011 в 21:10 0
немного смутило


{$LANG.PHOTO_DESC} заменить на {if $album.title != 'Демотиваторы'}{$LANG.PHOTO_DESC}{else}Описание демотиватора{/if}

{$LANG.PHOTO_TITLE} >>>>>> {if $album.title != 'Демотиваторы'}{$LANG.PHOTO_TITLE}{else}Заголовок{/if}

{$LANG.PHOTO_DESC} >>>>> {if $album.title != 'Демотиваторы'}{$LANG.PHOTO_DESC}{else}Текст{/if}

чем отличаются первый и третий пункты?
GarikKR 17 ноября 2011 в 23:57 0
чото тут не то!!!
lezginka.ru 18 ноября 2011 в 00:40 0
GarikKR ,а что именно ?
Telema93 18 ноября 2011 в 12:05 0
ошибся где-то, е-мае! почитайте текст и поймете, тут же не надписи главное, а условная конструкция смарти
Александр 16 ноября 2011 в 21:35 0
Один вопрос, а что будет с ф самой фотогалереей? При установки данного хака будет ли стандартная галерея работать также, как и работает сейчас?
Kreator 16 ноября 2011 в 21:41 0
Если видели тему на форуме, а еще и читали ее, то данный хак влияет на фотоальбом с названием "Демотиваторы"
Telema93 18 ноября 2011 в 12:03 0
if ($album['title']=='Демотиваторы')
вот и ответ
fact 16 ноября 2011 в 22:19 0
Вcё работает. Не подскажите как убрать в этом альбоме кнопку редактирования созданного демотиватора?
WALTERZ 17 ноября 2011 в 05:45 +1
Код PHP:
{if $album.title != 'Демотиваторы'}
Демотивароский вывод
	                {else}
ссылка на редактирование
	                {/if}
fact 17 ноября 2011 в 15:55 +1
Спасибо.
Если кому нужно точнее, то в com_photos_view_photo.tpl
после {if $is_author || $is_admin}
вместо
Код PHP:
<a href="/photos/editphoto{$photo.id}.html" title="{$LANG.EDIT}"><img src="/templates/_default_/images/icons/edit.png" border="0"/></a>&nbsp;
я поставил

Код PHP:
     {if $album.title != 'Демотиваторы'}  
	                {else}<a href="/photos/editphoto{$photo.id}.html" title="{$LANG.EDIT}"><img src="/templates/_default_/images/icons/edit.png" border="0"/></a>&nbsp;
	               
	                {/if}
fact 17 ноября 2011 в 15:59 0
опс виноват. не прокатило. теперь ив обычных фото исчезло редактирование...
fact 17 ноября 2011 в 16:09 0
как же?
WALTERZ 17 ноября 2011 в 21:34 0
Ой, извиняюсь
Вместо
Код PHP:
<a href="/photos/editphoto{$photo.id}.html" title="{$LANG.EDIT}"><img src="/templates/_default_/images/icons/edit.png" border="0"/></a>&nbsp;
Вставьте это:
Код PHP:
{if $pagetitle == 'Демотиваторы'}
 {else}
<a href="/photos/editphoto{$photo.id}.html" title="{$LANG.EDIT}"><img src="/templates/_default_/images/icons/edit.png" border="0"/></a>&nbsp;
{/if}
Rossoman 17 ноября 2011 в 10:05 0
Отличный хак. Только вот столкнулся с проблемой. При добавлении файла происходит редекларация, а почему никак не пойму. Может поможет кто?
Вот ошибка: Fatal error: Cannot redeclare demotivator() (previously declared in /var/www/rossoman/data/www/sasovo.net/dm.php:43) in /var/www/rossoman/data/www/sasovo.net/dm.php on line 166

А вот кусок кода с 43 по 166 строки
Скрытый текст виден только зарегистрированным пользователям
Rossoman 17 ноября 2011 в 10:13 0
Вопрос снимаю, разобрался сам.
В п. 1.1 нужно вставить
Код PHP:
include ("/dm.php");
а не
Код PHP:
include ("dm.php");
Так у меня заработал
Telema93 17 ноября 2011 в 14:34 0
вы не весь текст там скопировали, вот и проблема, нужно же еще подключать конвертер
Rossoman 17 ноября 2011 в 10:36 0
Теперь появилась другая проблема. Не выводится загаловок и описание демотиватора...
Rossoman 17 ноября 2011 в 11:25 0
в пунктах 1.1 и 3 точно нужно дважды подключать dm.php ??
Telema93 17 ноября 2011 в 14:35 0
где это вы увидели?
Rossoman 17 ноября 2011 в 14:41 0
1. вариант - залить весь архив в корень. 1.1 В файле /components/photos/model.php в самом начале описательной части пишем: Код PHP: 1 include ("dm.php"); 1.2 в файле dm.php архива в самом вверху вставить: Код PHP: 1 if(!defined('VALID_CMS')) { die('ACCESS DENIED'); } 2. вариант - заливаем в корень сайта только файлы шрифтов. 2.1 В самое начало файла /includes/graphic.inc.php после Код PHP: 1 if(!defined('VALID_CMS')) { die('ACCESS DENIED'); } вставить полностью скопированный код из файла dm.php архива (в файле graphic.inc.php вообще желательно описывать все функции по работе с графикой) Далее не зависимо от предыдущих вариантов: 3. Открываем файл /components/photos/model.php После Код PHP: 1 $this->deletePhotoFile($photo_file, $uploaddir); Вставить Код PHP: 1 if ($album['title']=='Демотиваторы'){ 2 include ("dm.php"); 3 demotivator($uploadphoto,$_SESSION['icms']['mod']['title'],$_SESSION['icms']['mod']['description'],"instantcms.ru");}

Или я чего то не понимаю?
Rossoman 17 ноября 2011 в 14:43 0
Не очень понятно с цитатой получилось)
п. 1.1 В файле /components/photos/model.php в самом начале описательной части пишем:
include ("dm.php");

п. 3 if ($album['title']=='Демотиваторы'){

include ("dm.php");

demotivator($uploadphoto,$_SESSION['icms']['mod']['title'],$_SESSION['icms']['mod']['description'],"instantcms.ru");}
Rossoman 17 ноября 2011 в 14:43 0
Если делаю так, то у меня выдает ошибку редикларации
Telema93 17 ноября 2011 в 22:45 0
вы понимаете что такое самый верх файла? зачем лезть в хаки, если не понимаете даже основ программирования? почитайте, пожалуйста, хотябы основы, чтобы потом не делать ошибок.
вставить в самый верх инклуд после строки f(!defined('VALID_CMS')) { die('ACCESS DENIED'
Rossoman 17 ноября 2011 в 22:48 0
Уже читал, и не только основы. Именно в это место и вставляю инклюд, после указанной вами строки!
Rossoman 17 ноября 2011 в 22:52 0
Или вы считаете что я вставил не правильно?
Код PHP:
<?php

if(!defined('VALID_CMS')) { die('ACCESS DENIED'); }
include ("dm.php");
Telema93 18 ноября 2011 в 11:43 0
проще приложить файлы, чтоб их посмотреть, а то мы с вами гадаем на кофейной гуще
также, неплохо видеть информацию по серверу
ошибку только у Вас выбивает, если заметили
Rossoman 18 ноября 2011 в 12:15 0
Вот файл model.php
Скрытый текст виден только зарегистрированным пользователям
Rossoman 18 ноября 2011 в 12:17 0
Проще на форуме выложить. Сейчас туда выложу.
Telema93 18 ноября 2011 в 12:29 0
запакуйте в архив и киньте ссылку
Rossoman 18 ноября 2011 в 12:33 0
http://sasovo.net/downloads/files.zip
Буду весьма благодарен если поможете разобраться. Спасибо
Rossoman 17 ноября 2011 в 12:26 0
Еще раз все сделал по инструкции. При загрузке самого фото ошибка
Fatal error: Cannot redeclare demotivator() (previously declared in /var/www/rossoman/data/www/sasovo.net/dm.php:43) in /var/www/rossoman/data/www/sasovo.net/dm.php on line 166
Telema93 17 ноября 2011 в 14:37 0
скопируйте текст на форуме в graphic.inc.php
Telema93 17 ноября 2011 в 14:39 0
из ошибки видно, что вы 2 раза подключаете функцию, я же русским языком сказал, или вариант 1, или вариант 2, а не все сразу
Rossoman 17 ноября 2011 в 14:56 0
Помоему там русским языком написано:
п.1.1 ....

Далее не зависимо от предыдущих вариантов:

п.3
Rossoman 17 ноября 2011 в 14:57 0
я делал 1 вариант
GarikKR 18 ноября 2011 в 00:57 0
Чото вобще путаница!А это так и должно быть???
{$LANG.PHOTO_DESC} заменить на {if $album.title != 'Демотиваторы'}{$LANG.PHOTO_DESC}{else}Описание демотиватора{/if}

{$LANG.PHOTO_TITLE} >>>>>> {if $album.title != 'Демотиваторы'}{$LANG.PHOTO_TITLE}{else}Заголовок{/if}

{$LANG.PHOTO_DESC} >>>>> {if $album.title != 'Демотиваторы'}{$LANG.PHOTO_DESC}{else}Текст{/if}

чем отличаются первый и третий пункты?
Telema93 18 ноября 2011 в 11:47 0
где-то описку допусти, вы сами почитайте файл и поймете, это ж даже не php уже, а html, ну и чуть смарти
fact 17 ноября 2011 в 13:30 0
нужно как-то поставить ограничение на длину название и текста демотиватора. При длинном названии - обрезается, т.е весь текст не умещается на фото и обрезается по бокам
Telema93 17 ноября 2011 в 14:36 +2
ну это тоже есть, но хак пока сырой, примем во внимание
lezginka.ru 17 ноября 2011 в 15:35 0
+++
GarikKR 18 ноября 2011 в 01:11 0
ААА это пипец какойто!!))Никто не написал что надо создать тупо альбом с названием демотиваторы))И все заработает))Все работает Спасибо!
GarikKR 18 ноября 2011 в 01:30 0
Да и еще!!Заработало только так
Код PHP:
include ("/dm.php");
Telema93 18 ноября 2011 в 11:46 0
у каждого по-разному почему-то :)
странно, хотя грамотней все таки функции прописывать в спецфайл этих функций, чтоб потом найти их :)
да и скорость обработки уже подключенных функций будет быстрее, чем инклудинг, так как они уже в оперативке есть
Rossoman 18 ноября 2011 в 10:28 0
Да ладно))) Вот же)))
Теперь на сайте будет полноценный сервис демотиваторов в Альбоме "Демотиваторы" фотоальбома. Да, кстати, если такого альбома у Вас еще нет, то создайте!
Telema93 18 ноября 2011 в 11:49 0
Да, кстати, если такого альбома у Вас еще нет, то создайте!
Это написал в самом конце, это вы невнимательны :)
Telema93 18 ноября 2011 в 11:50 +1
В самом конце это было написано:
Да, кстати, если такого альбома у Вас еще нет, то создайте!
это Вы просто невнимательно прочитали :)
lezginka.ru 18 ноября 2011 в 19:24 0
пора создавать платную версию - всем жить легче будет(я так дУмаю)
GarikKR 19 ноября 2011 в 13:32 0
Пора кого закидать яйцами уважаемый лезгинка
Telema93 19 ноября 2011 в 16:29 0
зачем яйцами? для этого ddos есть :)
Telema93 19 ноября 2011 в 16:28 +1
разработка скрипта. та что в dm файле - бесплтная! так что некрасиво будет
другое дело, если кто напишет что-то более лучшее - тогда в платности есть смысл (не используя скрипт из файла dm)
lezginka.ru 19 ноября 2011 в 16:37 +1
ну и что скрипт бесплатный
наваротить и за небольшую плату, например не только черный фон вокруг, но и другие - красный,цветочки,черепа и т.д.
для разного юмора разныое офрмление. размер текста(регулировка в админке - 1,2,3строки) оформление сделать в отдельно тпл файле и т.д.
я взял бы, готовый вариант, без замарочек
Romario 20 ноября 2011 в 09:46 +2
У меня почему-то название и описание выводятся не на картинке, все делал по инструкции, подскажите пожалуйста что нужно исправить?
Вот скрин:
Rossoman 20 ноября 2011 в 10:48 +2
Аналогичная проблема, но решения так и не нашел(
Igor 5 ноября 2012 в 11:05 0
и у меня - все перепробовал, но надписи так и не появились
Telema93 20 ноября 2011 в 15:53 0
не знаю почему так, у всех работает, значит причина именно в Ваших настройках сервера
скиньте настройки сервера в архиве в личку - посмотрю
Tagil-Rulit 19 января 2012 в 19:00 0
Устанавливал и 1м и вторым способом. 1й-появились поля при добавлении картинки, нет чёрного фона загружается просто как картинка. При втором выдаёт ошибку при загрузке в модуль.пхп...Очень нужен данный хак, есть идея как расширить разносторонность и практичность его с наименьшими усилиями, отпишу в личку. Уважаемый stairway to hell есть ли у Вас время, возможность помочь-в личку скину подробные данные, информацию.
Заранее спасибо за ответ.
Дастан 25 января 2012 в 21:04 0
У меня все заработала на Денвере! Но как только заливаю сайт на хостинг и попытаюсь сделать, там появляется рамка и не белого цвета. А надписей ваше нету. У кого нибудь еще такое было! Хостинг на beget.ru
Tesper 14 февраля 2012 в 21:10 0
5 демотиваторов создались отлично, но стоило лечь спать, как на утро всё перестало работать. При загрузке появляется в адресной строке: http://site.ru/photos/101/upload - удаленный сервер или файл не найден, проверьте, верно ли написан адрес, или попробуйте найти сайт.
Dost 18 марта 2012 в 18:25 0
Для тех у кого все сделано правильно, но не печатается текст. Там скорее всего что то с правами на корневую папку. Намучился тоже - не видит скрипт файлы шрифтов и все тут. Попробуйте так:
Создаем папку в корне и загружаем в нее файлы шрифтов(arial.ttf и times.ttf). Прописываем везде пути к этим файлам в dm.php

У меня заработало.
vslava 18 апреля 2012 в 12:33 0
Здравствуйте! а для 1,9 так же по пунктам надо делать.
Igor 20 апреля 2012 в 17:38 0
да, кстати на 1,9 работает, ставили ли?
Алфей 20 апреля 2012 в 18:48 +2
Работает на 1.9, проверено!
Igor 5 ноября 2012 в 11:06 0
а у меня так и не появились надписи, вот так же http://instantcms.ru/blogs/zametki-po-delu/hak-fotoalboma-dobavljaem-demotivator.html#c25334 жаль - придется жить без демотиваторов
Helg 5 ноября 2012 в 17:52 0
{if $pagetitle == 'Демотиваторы'}
Почему-то вот этот кусок так и остается на сайте в таком виде? смs 1.9
Что-то не так сделал?
Helg 5 ноября 2012 в 18:08 0
{if $pagetitle == 'Демотиваторы'} Почему-то вот этот кусок так и остается на сайте в таком виде? смs 1.9 Что-то не так сделал?

Точнее в других альбомах тоже пишет добавить демотиватор, но при нажатии включает добавлените фото а не демотиватора. и перестала работать ссылка добавить фото в разделе со всеми фотоальбомами. Вот как-то так...
Майкл 22 декабря 2012 в 21:04 +1
Под 1.10 надо бы это хак сделать. Кто нибудь уже сделал?
Майкл 24 декабря 2012 в 05:05 0
Насколько я понял, большая часть кода переместилась в файлы шаблона.

Кто знает куда добавить нужно изменения, которык раньше были прописаны для файлы?
/components/photos/model.php
Майкл 23 января 2013 в 21:57 +2
Поднимаю тему!
Может автор всё таки подскажет как в 1.10.1 проделать тоже самое?
Заплюсуем однозначно)
Greener 24 января 2013 в 19:15 0
Тоже интересует этот вопрос.
Но мне кажется, что в 1.10 может и не работать (
Хотелось бы, конечно, хотя бы предварительно знать, подойдет это решение для новой версии, али нет...
Майкл 24 января 2013 в 19:19 0
Пойдет, если глобально внести измнения)
Я попробывал, но с некоторыми файлами не понял.