Награда за определенное кол-во друзей i1.10.4

Выдача автоматически награды за определенное кол-во друзей

 
Посетитель
small user social cms
Сообщений: 41
Всем здравствуйте. Возможно кому-то пригодится инструкция по добавлению в компонент награды функции выдачи награды за
определенное количество друзей.
За основу взял инструкцию http://instantcms.ru/forum/thread4625.html
Но для Instantcms 1.10.4 она определенно немного устарела.
Начнем:
1) Делаем запрос в базу(добавляем поле друзей).
Код PHP:
  1. ALTER TABLE cms_user_autoawards ADD p_friends int(11) AFTER p_karma
2) Открываем файл

admin\components\autoawards\backend.php

Находим код:
Код PHP:
  1. if ($opt == 'submit' || $opt == 'update'){
  2.  
  3. if (!cmsCore::validateForm()) { cmsCore::error404(); }
  4.  
  5. $title = cmsCore::request('title', 'str', $_LANG['AD_AWARD']);
  6. $description = cmsCore::request('description', 'str', '');
  7. $published = cmsCore::request('published', 'int', 0);
  8. $imageurl = preg_replace('/[^a-zA-Z0-9_\.\-]/iu', '', cmsCore::request('imageurl', 'str', ''));
  9. $p_comment = cmsCore::request('p_comment', 'int', 0);
  10. $p_forum = cmsCore::request('p_forum', 'int', 0);
  11. $p_content = cmsCore::request('p_content', 'int', 0);
  12. $p_blog = cmsCore::request('p_blog', 'int', 0);
  13. $p_karma = cmsCore::request('p_karma', 'int', 0);
  14. $p_photo = cmsCore::request('p_photo', 'int', 0);
  15. $p_privphoto = cmsCore::request('p_privphoto', 'int', 0);
Сразу после строки
Код PHP:
  1. $p_privphoto = cmsCore::request('p_privphoto', 'int', 0);
вставляем следующий код:
Код PHP:
  1. $p_friends = cmsCore::request('p_friends', 'int', 0);
Ищем далее такой вот код:
Код PHP:
  1. $sql = "INSERT INTO cms_user_autoawards (title, description, imageurl, p_comment, p_blog, p_forum, p_photo, p_privphoto, p_content, p_karma, published)
  2. VALUES ('$title', '$description', '$imageurl', $p_comment, $p_blog, $p_forum, $p_photo, $p_privphoto, $p_content, $p_karma, $published)";
  3. $inDB->query($sql);
Заменяем его на следующий:
Код PHP:
  1. $sql = "INSERT INTO cms_user_autoawards (title, description, imageurl, p_comment, p_blog, p_forum, p_photo, p_privphoto, p_content, p_karma, p_friends, published)
  2. VALUES ('$title', '$description', '$imageurl', $p_comment, $p_blog, $p_forum, $p_photo, $p_privphoto, $p_content, $p_karma, $p_friends, $published)";
  3. $inDB->query($sql);
Далее ищем код:
Код PHP:
  1. $sql = "UPDATE cms_user_autoawards
  2. SET title='$title',
  3. description='$description',
  4. imageurl='$imageurl',
  5. p_comment=$p_comment,
  6. p_blog=$p_blog,
  7. p_forum=$p_forum,
  8. p_photo=$p_photo,
  9. p_privphoto=$p_privphoto,
  10. p_content=$p_content,
  11. p_karma=$p_karma,
  12. published=$published
  13. WHERE id = '$item_id'";
Заменяем на код:
Код PHP:
  1. $sql = "UPDATE cms_user_autoawards
  2. SET title='$title',
  3. description='$description',
  4. imageurl='$imageurl',
  5. p_comment=$p_comment,
  6. p_blog=$p_blog,
  7. p_forum=$p_forum,
  8. p_photo=$p_photo,
  9. p_privphoto=$p_privphoto,
  10. p_content=$p_content,
  11. p_karma=$p_karma,
  12. p_friends=$p_friends,
  13. published=$published
  14. WHERE id = '$item_id'";
Далее ищем:
Код PHP:
  1. if ($opt=='add'){
  2. cpAddPathway($_LANG['AD_NEW_AWARD']);
  3. echo '<h3>'.$_LANG['AD_NEW_AWARD'].'</h3>';
  4. $mod['p_comment'] = 0;
  5. $mod['p_content'] = 0;
  6. $mod['p_blog'] = 0;
  7. $mod['p_karma'] = 0;
  8. $mod['p_forum'] = 0;
  9. $mod['p_photo'] = 0;
  10. $mod['p_privphoto'] = 0;
Добавляем после строки:
Код PHP:
  1. $mod['p_privphoto'] = 0;
строку:
Код PHP:
  1. $mod['p_friends'] = 0;
Дальше ищем код:
Код PHP:
  1. <tr>
  2. <td><img src="/admin/components/autoawards/images/p_privphoto.gif" width="16" height="16" /></td>
  3. <td><input name="p_privphoto" type="text" id="p_input" size="5" value="<?php echo @$mod['p_privphoto'];?>" /></td>
  4. <td><?php echo $_LANG['AD_PRIVATE_PHOTOS']; ?></td>
  5. </tr>
После него добавляем:
Код PHP:
  1. <tr>
  2. <td><img src="/admin/components/autoawards/images/p_friends.gif" width="16" height="16" /></td>
  3. <td><input name="p_friends" type="text" id="p_input" size="5" value="<?php echo @$mod['p_friends'];?>" /></td>
  4. <td><?php echo $_LANG['AD_FRIENDS_AUTOAW']; ?></td>
  5. </tr>
3) В папку находящуюся по адресу

/admin/components/autoawards/images/

закидываем картинку с названием p_friends.gif(иконка друзья 16*16 изображение человечка
Награда за определенное кол-во друзей i1.10.4
laugh )

4) В файлике по адресу

/languages/ru/admin/components/autoawards.php

добавляем код:
Код PHP:
  1. $_LANG['AD_FRIENDS_AUTOAW'] ='друзей на сайте';
Теперь правим файл

core\classes\user.class.php

Ищем код:
Код PHP:
  1. if (!$awards){ return false; }
  2.  
  3. $p_content = $inDB->rows_count('cms_content', "user_id='$user_id' AND published = 1");
  4. $p_comment = $inDB->rows_count('cms_comments', "user_id='$user_id' AND published = 1");
  5. $p_blog = $inDB->rows_count('cms_blog_posts', "user_id='$user_id' AND published = 1");
  6. $p_forum = $inDB->rows_count('cms_forum_posts', "user_id='$user_id'");
  7. $p_photo = $inDB->rows_count('cms_photo_files', "user_id='$user_id' AND published = 1");
  8. $p_privphoto = $inDB->rows_count('cms_user_photos', "user_id='$user_id'");
  9. $p_karma = $inDB->get_field('cms_user_profiles', "user_id='$user_id'", 'karma');
  10.  
Дописываем строку:
Код PHP:
  1. $p_friends = $inDB->rows_count('cms_user_friends', "(from_id = '$user_id' OR to_id = '$user_id') AND is_accepted =1");
Далее ищем код:
Код PHP:
  1. $granted = ($award['p_content'] <= $p_content) &&
  2. ($award['p_comment'] <= $p_comment) &&
  3. ($award['p_blog'] <= $p_blog) &&
  4. ($award['p_forum'] <= $p_forum) &&
  5. ($award['p_photo'] <= $p_photo) &&
  6. ($award['p_privphoto'] <= $p_privphoto) &&
  7. ($award['p_karma'] <= $p_karma);
Заменяем его на:
Код PHP:
  1. $granted = ($award['p_content'] <= $p_content) &&
  2. ($award['p_comment'] <= $p_comment) &&
  3. ($award['p_blog'] <= $p_blog) &&
  4. ($award['p_forum'] <= $p_forum) &&
  5. ($award['p_photo'] <= $p_photo) &&
  6. ($award['p_privphoto'] <= $p_privphoto) &&
  7. ($award['p_karma'] <= $p_karma) &&
  8. ($award['p_friends'] <= $p_friends);
С этим файлом закончили.

5) Открываем следующий файл по адресу

\components\users\frontend.php

Ищем код:
Код PHP:
  1. $inDB->query("UPDATE cms_user_friends SET is_accepted = 1 WHERE id = '{$is_need_accept_id}'");
  2. //регистрируем событие
  3. cmsActions::log('add_friend', array(
  4. 'object' => $inUser->nickname,
  5. 'user_id' => $usr['id'],
  6. 'object_url' => cmsUser::getProfileURL($inUser->login),
  7. 'object_id' => $is_need_accept_id,
  8. 'target' => '',
  9. 'target_url' => '',
  10. 'target_id' => 0,
  11. 'description' => ''
  12. ));
Сразу после него добавляем:
Код PHP:
  1. //проверяем и выдаем награду если нужно
  2. cmsUser::checkAwards($inUser->id);
  3. cmsUser::checkAwards($id);
6) Далее открываем файл по адресу

/templates/_default_/components/com_users_awards_site.tpl

Находим код:
Код PHP:
  1. {if $aw.p_privphoto}
  2. <tr>
  3. <td><img src="/images/autoawards/p_privphoto.gif" width="16" height="16" /></td>
  4. <td>
  5. {$aw.p_privphoto}
  6. {$LANG.PHOTOS_IN_PRIVATE_ALBUM}</td>
  7. </tr>
  8. {/if}
После добавляем код:
Код PHP:
  1. {if $aw.p_friends}
  2. <tr>
  3. <td><img src="/images/autoawards/p_friends.gif" width="16" height="16" /></td>
  4. <td>
  5. {$aw.p_friends}
  6. {$LANG.FRIENDS_AUTOAW}</td>
  7. </tr>
  8. {/if}
  9.  
7) Далее в папку

/images/autoawards/

закидываем картинку друзей(по логике с человечком но у каждого свое) под именем p_friends.gif 16*16
8) Далее в файле
Код PHP:
  1. /languages/ru/components/users.php
Добавляем код:
Код PHP:
  1. $_LANG['FRIENDS_AUTOAW'] ='друзей на сайте';
Ну вот вроде и все, автоматическая выдача награды за определенное кол-во друзей(кол-во выставляется в админке) реализована.
PS: Для Instantcms 1.10.4
Редактировалось: 1 раз (Последний: 11 мая 2015 в 23:49)
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 1979
Дружище web4ik, зачем вы добавляете дополнительное поле в таблицу cms_user_autoawards, если в таблице cms_user_friends уже лежит вся инфа по друзьям?
NOP
Реклама
cms
Посетитель
small user social cms
Сообщений: 41
Странник:
Дружище web4ik, зачем вы добавляете дополнительное поле в таблицу cms_user_autoawards, если в таблице cms_user_friends уже лежит вся инфа по друзьям?
День добрый, в таблицу добавляется дополнительное поле для настройки компонента, добавляется данное поле для того чтобы выставлять кол-во друзей по достижению которого выдавалась бы награда.
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 1979
Это делается в конфиге компонента. Конечно, вы автор хака и так тоже работает. Но все-таки следует придерживаться стандартов Инстанта. Потому что другие программеры, после применения вашего хака, голову свернут, разыскивая где что.
Редактировалось: 1 раз (Последний: 12 мая 2015 в 12:03)
NOP
Посетитель
small user social cms
Сообщений: 41
Я делал по аналогии с приведенной выше ссылкой.
http://instantcms.ru/forum/thread4625.html
Как я понял это поле и отвечает за, то что мы в него записываем(из админки инстанта) кол-во друзей по достижению которого выдавалась бы награда.
Я могу и ошибаться, поправьте меня, если не прав, поправлю пост.
Модератор
small user social cms
МедальПочетный донор проектаКубок зрительских симпатийАвторитет форума
Сообщений: 1422
web4ik:
поправьте меня, если не прав
Даа, Странник, будьте так любезны popcorn
Нормальный хостинг, сервера быстрые - пользуюсь сам.
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 1979
Одно из следствий закона Мерфи: неудачный пример становится новым бранчем, и приводит к холливарам "как делать кошерно" )))
NOP
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 1979
Я вижу, уже локанафт попкорном запасся. Облом, дружище локанафт, я в холливарах стараюсь не участвовать. Я свое мнение сказал, а новичок пусть дальше своей головой думает. Мое мнение НЕ является окончательным, абсолютным и не подлежащим обжалованию.
NOP
Модератор
small user social cms
МедальПочетный донор проектаКубок зрительских симпатийАвторитет форума
Сообщений: 1422
Странник, сказав А, говори и Б, зачем линять то сразу joke
Нормальный хостинг, сервера быстрые - пользуюсь сам.
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 1979
Потому что, дорогой друг локанафт, ты известный холливарщик и любитель переходить на личности. Обрати внимание, у тебя нет никаких высказываний но поводу заметки ТС, зато ты пытаешься заставить писать меня бесполезные посты, отнимающие мое время. Гуд бай, май лав, твоя любовь ко мне останется безответной.
NOP
Модератор
small user social cms
МедальПочетный донор проектаКубок зрительских симпатийАвторитет форума
Сообщений: 1422
Странник, нет нет, ты сказал, что web4ik всё сделал совсем неправильно и поле ненужное добавил.
Даже код никакой не приводи, словами объясни, как сделать иначе - правильнее.
Нормальный хостинг, сервера быстрые - пользуюсь сам.
Посетитель
small user social cms
Сообщений: 41
Странник:
Дружище web4ik, зачем вы добавляете дополнительное поле в таблицу cms_user_autoawards, если в таблице cms_user_friends уже лежит вся инфа по друзьям?
Я понимаю что тут лежит информация о кол-ве друзей у пользователей. Но запись происходит из компонента именно его настройки в данную базу данных cms_user_autoawards, причем не только настройка юзверей.
Вобщем если будет желание объясни что не так можешь и в л.с. Просто тут сделано даже не по аналогии с предыдущей версией а по аналогии с уже написанным компонентом.
Модератор
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 1675
Это один из «старейших» компонентов системы, поэтому всё так, как и описывает ТС, а, именно, через «танцы с бубном»…
Просто он достаточно редко используется в реальных проектах и в основном не особо «популярен»…
«Главное “настрой”! И всё настроиться…» © ) Их знают все! А вы?
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 1979
web4ik, естественно, вы можете делать так, как считаете нужным, то есть хранить настройки компонента в отдельном поле. Однако это явно избыточно, поскольку у Инстанта существует таблица cms_components с полем config, где в упакованном виде хранятся все конфиги компонента. То есть для добавления нового значения нет смысла курочить базу. Достаточно отредактировать админку - добавить туда еще один инпут по аналогии с существующими. Те, компоненты, которые регулируются, имеют в бакэнде строчку
Код PHP:
  1. $inCore->saveComponentConfig('имя компонента', $cfg);
Вам достаточно передать перед этой строкой значение нового параметра, например
Код PHP:
  1. $cfg['new_param'] = cmsCore::request('new_param', 'int', 0);
и дело сделано.

Любой компонент в своем фронтэнде обычно получает значение своего конфига в виде массива строчкой вроде
Код PHP:
  1. $cfg = $model->config;
. Вы легко получите значение своего параметра строкой
Код PHP:
  1. $new_param = $cfg['new_param'];
.
NOP
Модератор
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 1675
Я еще раз повторюсь, это старый компонент, он только для админки и в БД (cms_components) он не имеет и не хранит конфига
Странник, не надо утверждать под влиянием собственных впечатлений, вы сами призывали оперировать фактами…
«Главное “настрой”! И всё настроиться…» © ) Их знают все! А вы?
В начало страницы
Предыдущая темаСледующая тема Перейти на форум:
Быстрый ответ
Чтобы писать на форуме, зарегистрируйтесь или авторизуйтесь.