Хак - Флеш эффекты на аватарке

+45
3.06K
Иллюстрация
Недавно пользователь с ником Evanescence попросил переделать плагин "Флеш эффекты на Аватаре" для движка Social Enigne под Instant CMS, что соответственно и было сделано, ниже прилагаю скриншоты и описание того как устанавливать к сожалению другого способа кроме как хака не нашлось.
Функционал:
Установка флеш эффекта на аватар;
Ограничение по карме для установки эффекта;
Взимание оплаты в рейтингах за установку эффекта;
Удаление эффекта со своего аватара;
Иллюстрация
Иллюстрация
Иллюстрация
Инструкция по установке:
1. Выполнить запрос из файла install.sql в БД исправив предварительно префикс cms на тот который у вас;
2. Залить содержимое папки /components/users/effects/ из архива в аналогичную папку на сервере;
3. В файле /components/users/frontend.php после строчек:
  1. $plugins = $model->getPluginsOutput($usr);
вставьте строчку:
  1. $effs = $model->getEffects();
чуть ниже после строчек:
  1. $smarty->assign('plugins', $plugins);
вставьте строчку:
  1. $smarty->assign('effs', $effs);
4. В файле /components/users/model.php в самом низу (перед }) добавить функцию:
  1. public function getEffects(){
  2. $result = $this->inDB->query("SELECT * FROM cms_effects");
  3. $items = array();
  4. while ($item = $this->inDB->fetch_assoc($result)){
  5. $items[] = $item;
  6. }
  7. return $items;
  8. }
5. В файле /components/users/includes/usercore.php в функции usrImageNOdb после строчек:
  1. if ($usr_imageurl && @file_exists(PATH.'/images/users/avatars/'.$usr_imageurl)){
вставьте строчку:
  1. if ($eff_ava = getUserEffect($user_id, $usr_imageurl, $small)){
  2. return $eff_ava;
  3. }
тут же ниже после закрытия функции usrImageNOdb добавить функцию:
  1. function getUserEffect($user_id, $usr_imageurl, $small){
  2. $inDB = cmsDatabase::getInstance();
  3. $inCore = cmsCore::getInstance();
  4. $cfg = $inCore->loadComponentConfig('users');
  5. if ($small=='small'){
  6. $usr_imageurl = '/images/users/avatars/small/'.$usr_imageurl;
  7. $w = $h = $cfg['smallw'].'px';
  8. }else{
  9. $usr_imageurl = '/images/users/avatars/'.$usr_imageurl;
  10. $w = $cfg['medw'].'px';
  11. $h = "100%";
  12. }
  13. if ($eff_arr = $inDB->get_fields("cms_effects_chels", "to_user='{$user_id}'", "*")){
  14. return '<div id=\'ava\' style=\'background: url('.$usr_imageurl.') no-repeat center center;\' align="center"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://pdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" id="lecteur" width="'.$w.'" height="'.$h.'"><param name="wmode" value="transparent"><param name="movie" value="/components/users/effects/'.$eff_arr['url'].'"><param name="allowScriptAccess" value="never"><embed allowscriptaccess="never" type="application/x-shockwave-flash" src="/components/users/effects/'.$eff_arr['url'].'" wmode="transparent" width="'.$w.'" height="'.$h.'"></object></div>';
  15. }
  16. }
{Не обязательно} 5.1 Кому нужно чтобы и при вызове функции usrImage выдавался аватар с флешанимацией в файле /components/users/includes/usercore.php
после строчки:
  1. if ($usr['imageurl'] && @file_exists(PATH.'/images/users/avatars/'.$usr['imageurl'])){
вставить строчку:
  1. if ($eff_ava = getUserEffect($user_id, $usr['imageurl'], $small)){
  2. return $eff_ava;
  3. }
6. Закинуть в папку /components/users/includes/ из аналогичного расположения в архиве файл addusreffects.php
7. В файле /templates/ВАШ_ШАБЛОН/components/com_users_profile.tpl после строчек:
  1. <div class="usr_avatar">
  2. {$usr.avatar}
  3. </div>
вставьте строчки:
  1. {if !$myprofile}
  2. {literal}
  3. <script>
  4. function show_eff_form(){
  5. document.getElementById('effects').style.display = document.getElementById('effects').style.display == "block" ? "none" : "block";
  6. }
  7. function establish_effect(effect_id){
  8. $.ajax({
  9. type: "POST",
  10. url: "/components/users/includes/addusreffects.php",
  11. data: "from_user={/literal}{$is_auth}{literal}&to_user={/literal}{$usr.id}{literal}&effect_id="+effect_id,
  12. success: function(msg){
  13. if (msg == 'OK'){
  14. location.reload();
  15. }else{
  16. alert(msg);
  17. }
  18. }
  19. });
  20. }
  21. </script>
  22. {/literal}
  23. <div class='func'>
  24. <a href="javascript:void(0)" onclick="show_eff_form();" >Установить/изменить эффект</a>
  25. </div>
  26. <div name="effects" id="effects" style="display: none; background-color:#cccccc;">
  27.  
  28.  
  29. {foreach item=eff from=$effs}
  30. <b>{$eff.title}</b>
  31.  
  32. <div class="avatar">
  33. <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://pdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" id="lecteur" width="100px" height="100px">
  34. <param name="wmode" value="transparent">
  35. <param name="movie" value="/components/users/effects/{$eff.url}">
  36. <param name="allowScriptAccess" value="never">
  37. <embed allowscriptaccess="never" type="application/x-shockwave-flash" src="/components/users/effects/{$eff.url}" wmode="transparent" width="100px" height="100px">
  38. </object>
  39. </div>
  40. <a href="javascript:void(0)" onclick="establish_effect({$eff.id});">Выбрать Эффект</a>
  41.  
  42.  
  43. {/foreach}
  44.  
  45.  
  46. </div>
  47. {else}
  48. {literal}
  49. <script>
  50. function delete_effect(){
  51. $.ajax({
  52. type: "POST",
  53. url: "/components/users/includes/addusreffects.php",
  54. data: "action=del_effect&user_id={/literal}{$usr.id}{literal}",
  55. success: function(msg){
  56. if (msg == 'OK'){
  57. location.reload();
  58. }else{
  59. alert(msg);
  60. }
  61. }
  62. });
  63. }
  64. </script>
  65. {/literal}
  66. <a href="javascript:void(0)" onclick="delete_effect();">Удалить эффект</a>
  67. {/if}
Кто не менял системные файлы из папки users, могут просто залить папку components в корень сайта и выполнить 1 и 7 пункт из инструкции.

Размер минимальной кармы и количество снимаемого рейтинга выставляются в файле /components/users/includes/addusreffects.php
  1. $min_karma = 0; //Здесь укажите минимальное значение кармы для возможности ставить эффекты на аватары
  2. $rate_value = 0; //Здесь укажите стоимость установки эффекта в рейтингах
А вот и сам архив с хаком: Скачать
+3
Максим Шорин Максим Шорин 12 лет назад #
У максисофта есть такой хак в продаже..
+1
Максим Шорин Максим Шорин 12 лет назад #
И еще, не в обиду, а ради здоровой критики - нельзя сделать плагином ?
0
DS Soft DS Soft 12 лет назад #
Ну если вы знаете событие которое привязано к запросу аватара скажите я вроде искал и не нашел, но насколько я в данный момент знаю (может когда поковыряюсь еще что мое мнение изменится) чисто плагином сделать не получиться без правки системных файлов, хотя бы для того чтобы выставить новое событие получение аватарки.
0
DS Soft DS Soft 12 лет назад #
Дайте ссылку на его работу может кто то решит купить я лично не видел его.
0
My-InstantCMS.Ru My-InstantCMS.Ru 12 лет назад #
Молодец, спасибо, долго ломал голову как сделать это для Инстант, но никак не получалась)
0
Дмитрий Дмитрий 12 лет назад #
Спасибо!
0
My-InstantCMS.Ru My-InstantCMS.Ru 12 лет назад #
Незнаю почему но у меня сразу после установки показывает Удалить эффект, хотя я еще не установил, при нажатии нечего не происходить, кто нибудь установил?
0
vitalson9 vitalson9 12 лет назад #
тоже самое но это у меня в мазиле а в хроме вообще караул рамка вокруг авы стала в высоту примерно 800px а ава не изменилась. А надпись удалить эфект вообще не появляется только установить
0
vitalson9 vitalson9 12 лет назад #
да и по поводу рейтинга у меня 30 рейта ставлю 5 за ефект пишит не достаточно рейта
+1
DS Soft DS Soft 12 лет назад #
Опечатка была в файле /components/users/includes/addusreffects.php было так:
Код PHP:
  1. $rate_count = $inDB->get_field("cms_user", "rating='{$inUser->id}'", "rating");
а нужно было так:
Код PHP:
  1. $rate_count = $inDB->get_field("cms_user", "id='{$inUser->id}'", "rating");
исправляем вручную или же качаем по новой архив перезалил.
0
DS Soft DS Soft 12 лет назад #
ну я то вообще предполагал что эффекты пользователи будут дарить друг другу но не ставить сами себе, а проверку на то ставили эффект или нет не выставил чтобы и так не перегружать запросами в БД.
0
My-InstantCMS.Ru My-InstantCMS.Ru 12 лет назад #
Нашел причину:
7. В файле /templates/ВАШ_ШАБЛОН/components/com_users_profile.tpl после строчек:
Код PHP:
  1. <div class="usr_avatar">
  2. {$usr.avatar}
  3. </div>
вставьте строчки:
Вставить код который написал DagStudent но в первом строке убрать ! будет {if $myprofile}
0
My-InstantCMS.Ru My-InstantCMS.Ru 12 лет назад #
Помогите с кодом:
в файле /components/users/includes/usercore.php как сделать так чтоб код определил высоту и ширину аватара а потом передал его в com_users_profile.tpl в переменной {$width} и {$height}
если сделать так
Код PHP:
  1. <embed allowscriptaccess="never" type="application/x-shockwave-flash" src="/components/users/effects/{$eff.url}" wmode="transparent" width="{$width}" height="{$height} ">
эффект будет красиво смотриться
0
My-InstantCMS.Ru My-InstantCMS.Ru 12 лет назад #
<embed allowscriptaccess="never" type="application/x-shockwave-flash" src="/components/users/effects/{$eff.url}" wmode="transparent" width="{$width}" height="{$height} ">
0
DS Soft DS Soft 12 лет назад #
вот же в файле /components/users/includes/usercore.php получет высоту и ширину просто на моем сайте не красиво смотрелась с высотой поэтому выставил высоту 100% а ширина подгружается как в настройках, для маленькой копии ставиться и ширина и высота в этом коде:
Код PHP:
  1. function getUserEffect($user_id, $usr_imageurl, $small){
  2. $inDB = cmsDatabase::getInstance();
  3. $inCore = cmsCore::getInstance();
  4. $cfg = $inCore->loadComponentConfig('users');
  5. if ($small=='small'){
  6. $usr_imageurl = '/images/users/avatars/small/'.$usr_imageurl;
  7. $w = $h = $cfg['smallw'].'px';
  8. }else{
  9. $usr_imageurl = '/images/users/avatars/'.$usr_imageurl;
  10. $w = $cfg['medw'].'px';
  11. $h = "100%";
  12. }
  13. if ($eff_arr = $inDB->get_fields("cms_effects_chels", "to_user='{$user_id}'", "*")){
  14. return '<div id=\'ava\' style=\'background: url('.$usr_imageurl.') no-repeat center center;\' align="center"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://pdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" id="lecteur" width="'.$w.'" height="'.$h.'"><param name="wmode" value="transparent"><param name="movie" value="/components/users/effects/'.$eff_arr['url'].'"><param name="allowScriptAccess" value="never"><embed allowscriptaccess="never" type="application/x-shockwave-flash" src="/components/users/effects/'.$eff_arr['url'].'" wmode="transparent" width="'.$w.'" height="'.$h.'"></object></div>';
  15. }
  16. }
0
My-InstantCMS.Ru My-InstantCMS.Ru 12 лет назад #
Ааа всё спс я думал вывод эффекта на tpl
а как сделать так чтоб кроме аватара на странице профила, больше нигде не показал эффект а то на комментариях, на записах в стене показывает эффект
0
DS Soft DS Soft 12 лет назад #
в файле /components/users/includes/usercore.php вместо кода:
Код PHP:
  1. function getUserEffect($user_id, $usr_imageurl, $small){
  2. $inDB = cmsDatabase::getInstance();
  3. $inCore = cmsCore::getInstance();
  4. $cfg = $inCore->loadComponentConfig('users');
  5. if ($small=='small'){
  6. $usr_imageurl = '/images/users/avatars/small/'.$usr_imageurl;
  7. $w = $h = $cfg['smallw'].'px';
  8. }else{
  9. $usr_imageurl = '/images/users/avatars/'.$usr_imageurl;
  10. $w = $cfg['medw'].'px';
  11. $h = "100%";
  12. }
  13. if ($eff_arr = $inDB->get_fields("cms_effects_chels", "to_user='{$user_id}'", "*")){
  14. return '<div id=\'ava\' style=\'background: url('.$usr_imageurl.') no-repeat center center;\' align="center"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://pdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" id="lecteur" width="'.$w.'" height="'.$h.'"><param name="wmode" value="transparent"><param name="movie" value="/components/users/effects/'.$eff_arr['url'].'"><param name="allowScriptAccess" value="never"><embed allowscriptaccess="never" type="application/x-shockwave-flash" src="/components/users/effects/'.$eff_arr['url'].'" wmode="transparent" width="'.$w.'" height="'.$h.'"></object></div>';
  15. }
  16. }
вот этот:
Код PHP:
  1. function getUserEffect($user_id, $usr_imageurl, $small){
  2. if ($small != 'small'){
  3. $inDB = cmsDatabase::getInstance();
  4. $inCore = cmsCore::getInstance();
  5. $cfg = $inCore->loadComponentConfig('users');
  6. $usr_imageurl = '/images/users/avatars/'.$usr_imageurl;
  7. $w = $cfg['medw'].'px';
  8. $h = "100%";
  9. if ($eff_arr = $inDB->get_fields("cms_effects_chels", "to_user='{$user_id}'", "*")){
  10. return '<div id=\'ava\' style=\'background: url('.$usr_imageurl.') no-repeat center center;\' align="center"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://pdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" id="lecteur" width="'.$w.'" height="'.$h.'"><param name="wmode" value="transparent"><param name="movie" value="/components/users/effects/'.$eff_arr['url'].'"><param name="allowScriptAccess" value="never"><embed allowscriptaccess="never" type="application/x-shockwave-flash" src="/components/users/effects/'.$eff_arr['url'].'" wmode="transparent" width="'.$w.'" height="'.$h.'"></object></div>';
  11. }
  12. }
  13. }
0
Camfrog Camfrog 12 лет назад #
Молодец! 5+
0
Camfrog Camfrog 12 лет назад #
""

Browser Name: Chrome Проблемы шаблоны
и тоже опера
0
Camfrog Camfrog 12 лет назад #
""
0
Camfrog Camfrog 12 лет назад #
Как исправиться Chrome и Opera?
0
DS Soft DS Soft 12 лет назад #
Там у каждого все зависит от стилей на сайте вот я поставил к себе на сайт и нормально и в опере и в мозиле и в хроме: http://dagstudent.ru/users/dagstudentka
0
My-InstantCMS.Ru My-InstantCMS.Ru 12 лет назад #
У меня тоже нормально показывает, проверил на хром мозилла и опера проблем нет
0
reload reload 12 лет назад #
У тебя на сайте по ссылке в последнем хроме аватар съехал к уровню текста "Стена пользователя"
и блок "Ссылка на эту страницу:" с тектовой ссылкой "установить эффект" ниже аватара на сантимов 10!
0
reload reload 12 лет назад #
0
Керя Керя 12 лет назад #
У меня у других пользователей стоит только удалить эффект но им ничего не устанавливалось при нажатии ничего не происходит а уменя стоит установить удалить но тоже ничего не происходит как исправить
0
Керя Керя 12 лет назад #
Теперь эфекты добавляются но пропал аватар т.е. фото аватара в профиле нет пустая рамка
0
Soul Soul 12 лет назад #
проблемки с хаком есть. Но "лиха беда-начало"! Начало положено, а как отладить - придумаем все вместе (надеюсь...)!
0
Керя Керя 12 лет назад #
В хроме только нет авы в мозиле и в осле все есть
0
DS Soft DS Soft 12 лет назад #
Попробуйте в пункте 5 в функции:
function getUserEffect($user_id, $usr_imageurl, $small){
$inDB = cmsDatabase::getInstance();
$inCore = cmsCore::getInstance();
$cfg = $inCore->loadComponentConfig('users');
if ($small=='small'){
$usr_imageurl = '/images/users/avatars/small/'.$usr_imageurl;
$w = $h = $cfg['smallw'].'px';
}else{
$usr_imageurl = '/images/users/avatars/'.$usr_imageurl;
$w = $cfg['medw'].'px';
$h = "100%";
}
if ($eff_arr = $inDB->get_fields("cms_effects_chels", "to_user='{$user_id}'", "*")){
return '<div id="ava" style="background: url('.$usr_imageurl.') no-repeat center center;" align="center"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://pdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" id="lecteur" width="'.$w.'" height="'.$h.'"><param name="wmode" value="transparent"><param name="movie" value="/components/users/effects/'.$eff_arr['url'].'"><param name="allowScriptAccess" value="never"><embed allowscriptaccess="never" type="application/x-shockwave-flash" src="/components/users/effects/'.$eff_arr['url'].'" wmode="transparent" width="'.$w.'" height="'.$h.'"></object></div>';
}
}
вместо $h = "100%"; прописать $h = $cfg['medh'].'px';
В некоторых случаях помогала, постараюсь в ближайщее время обновить хак, и сделать его как можно меньше хаком чтобы легче было обновляться на новые версии Instant CMS, и постараюсь также приделать вместе с флеш эффектами ставить анимации или просто картинки как в одноклассниках. Если кто знает как исправить неправильное отображение в хроме отписываемся я в css не особо силен не знаю сколько на это времени у меня уйдет.
0
pravednik pravednik 12 лет назад #
ерунда какаято, захожу как гость то вижу кнопку изменить или добавить эффект только не добавляет пишет что короче нужно войти в систему, а когда вхожу то только удалить эффект ссылка, жму ее и нифига sad во всех браузерах попробовал, система чистая 1.9
0
DS Soft DS Soft 12 лет назад #
захожу как гость то вижу кнопку изменить или добавить эффект только не добавляет
сегодня завтра обновлю архив, проверку на гостя походу не выставил;
а когда вхожу то только удалить эффект ссылка, жму ее и нифига
я не предполагал уставноку эффекта самому себе а для других в профиле у них будет установить эффект, как раз отпишу оба варианта чтобы ставили для себя и ставили для других.
0
Роман Волков Роман Волков 11 лет назад #
А есть адаптация по 1.10 ?
+1
А. МИхаилович ГОлубь А. МИхаилович ГОлубь 10 лет назад #
под 1.10.3 будет?

Еще от автора

DS Twitter Sender
Компонент DS Twitter Sender для Instant CMS 1.10.3.
Виджет Табло для яндекс браузера
Модуль «Виджет Табло для яндекс браузера» создан для простой генерации манифеста для виджета Табло в Яндекс браузере.
DS Music v1.0.3 FREE
DS Music v1.0.3 FREE (бывшая Instant Music v1.0) для InstantCMS v1.10.3
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.