FreeKeys CMS – специальный движок позволяющий создать сайт для раздачи ключей, предметов и прочего. С версии 1.5 движок ориентирован не только под раздачу ключей для игр, но и для других программ, предметов. В базе данных уже присутствуют несколько игр для демонстрации.
- Пользователь регистрируется.
- Зарабатывает баллы размещая свою реферальную ссылку и приглашая друзей.
- Покупает на собранные баллы предметы.
- Предметы (покупка, создание, редактирование и.т.п)
- Категории (создание, редактирование и.т.п)
- Задания (проверка задний, создание, редактирование и.т.п)
- Регистрация, авторизация, профиль, сообщения
- Привязка ВКонатакте и Facebook аккаунта
- Русский и английский язык админ-панели (можно добавить свои языки и также перевести default шаблон)
- Поддержка плагинов
- v1.5.004 (29.07.2015) - Исправлены ошибки связанные с категориями и заданиями.
- v1.5.003 (08.07.2015) - Исправлена проблема с засчитыванием переходов после регистрации.
- v1.5.002 (07.07.2015) - Исправлена проблема с засчитыванием переходов.
- v1.5.001 (05.07.2015) - В админ-панель добавлена страница с сообщениями.
Установка
Настройки
Шаблоны
Задания
Ключи
Локализация
Интерфейсы
Плагины
- Скачайте архив и распакуйте его в нужно место.
- Установите для папки
cache
права на запись (CHMOD 777
). - Установите для
config.json
права на запись (CHMOD 777
). - Файл
MySQL.sql
из архива импортируйте в свою базу данных. - Настройте
config.json
, указав там данные для входа в базу данных и ссылку на сайт.
- Логин:
admin
- Пароль:
1111
- Создайте свое приложение типа Standalone-приложение.
- В настройках приложения укажите свой адрес сайта (например:
http://nextable.ru/
) . - ID приложения и защищенный ключ из настроек приложения скопируйте в настройки сайта.
- Зайдите на https://developers.facebook.com/apps , нажмите
Create a New App
, в полеDisplay Name
укажите имя приложения, выберите любую категорию и создайте приложение. - Зайдите в
Settings
, нажмитеAdd Platform
и выберитеWebsite
. - В поле
App Domains
введите адрес своего сайта (например:http://nextable.ru/
). - ID приложения и защищенный ключ из настроек скопируйте в настройки сайта.
Все основные настройки содержаться в файле config.json
.
Информация о формате JSON: https://ru.wikipedia.org/wiki/JSON
db_name
– имя базы данныхdb_user
– пользователь базы данныхdb_password
– пароль для входа в базу данныхdb_host
- хостdb_prefix
– префикс таблиц
auth_vk
– разрешить или запретить авторизацию через ВКонтакте (true, false
)auth_vk_app_id
– ID приложения для авторизацииauth_vk_app_secret
– секретный ключ приложения
auth_facebook
- разрешить или запретить авторизацию через Facebook (true, false
)auth_facebook_app_id
– ID приложения для авторизацииauth_facebook_app_secret
– секретный ключ приложения
items_reg_points
– количество поинтов выдаваемых при регистрацииitems_ref_limit
– количество засчитываемых пользователей перешедших по ссылке за 1 часitems_ref_cost
– стоимость перехода по ссылкеitems_ref_reg_cost
– стоимость регистрации по ссылке
home_url
– адрес сайта без знака слеша/
на конце (например:http://nextable.ru
)list_plugins
– список плагиновlang
- язык (напримерru_RU
илиen_EN
)timezone
- часовой поясauth_online
– время онлайн в секундах
С версии 1.5 используется обработчик шаблонов Twig.
Перед созданием/редактированием шаблона ознакомитесь с Twig:
- http://twig.sensiolabs.org/doc/templates.html (на английском)
- http://x-twig.ru/for_template_designers/ (на русском)
Все шаблоны находятся в папке themes
.
404.twig
– страница ошибки 404banner_1.twig
– левый баннерbanner_2.twig
– правый баннерbase.twig
- базовый шаблонedit_profile.twig
– страница редактирования профиляerror.twig
– страница фатальной ошибкиindex.twig
– главная страницаitem.twig
– описание предметаitems.twig
– список предметовkey.twig
– страница получения ключаmain.php
– главный файл. Отвечает за отображения сайта (что и на каких страницах выводить).messages.twig
– список сообщенийprofile.twig
– профиль пользователяref.twig
– реферальная страницаregister.twig
– страница регистрацииtasks.twig
– список заданий
Проверяет сделал ли пользователь репост или поставил лайк.
post
— запись на стене пользователя или группы;comment
— комментарий к записи на стене;photo
— фотография;audio
— аудиозапись;video
— видеозапись;note
— заметка;photo_comment
— комментарий к фотографии;video_comment
— комментарий к видеозаписи;topic_comment
— комментарий в обсуждении;sitepage
— страница сайта, на котором установлен виджет «Мне нравится».
Идентификатор владельца Like-объекта: id пользователя, id сообщества (со знаком «минус») или id приложения. Если параметр type равен sitepage, то в качестве owner_id необходимо передавать id приложения. Если параметр не задан, то считается, что он равен либо идентификатору текущего пользователя, либо идентификатору текущего приложения (если type равен sitepage).
Идентификатор Like-объекта. Если type равен sitepage, то параметр item_id может содержать значение параметра page_id, используемый при инициализации виджета «Мне нравится».
Указывает, следует ли вернуть всех пользователей, добавивших объект в список "Мне нравится" или только тех, которые рассказали о нем друзьям. Параметр может принимать следующие значения:
likes
— возвращать информацию обо всех пользователях;copies
— возвращать информацию только о пользователях, рассказавших об объекте друзьям. По умолчанию возвращается информация обо всех пользователях.
{"type": "post", "owner_id": "1", "item_id": "45651", "filter": "likes"}
Дополнительная информация: http://vk.com/dev/likes.getList
Проверяет является ли пользователь участником сообщества.
group_id
- идентификатор или короткое имя сообщества
{"group_id": 57569441}
Дополнительная информация: http://vk.com/dev/groups.isMember
- Ключ
- Инструкция
- Дополнительная информация
- Количество
- Проинформировать администратора (да/нет)
- Указан ключ и количество. Пользователь получает ключ так же как и в FreeKeys 1.3
- Указана инструкция. Пользователь в данном случае следует Вашим указаниям. Например, зайти на сайт
мой_сайт.ру
и ввести свой id. - Указана инструкция или доп. информация и информирование администратора. В этом случае пользователь ожидает пока администратор обработает запрос и вышлет ему ключ .
Для перевода определенного плагина/шаблона требуется в его папке создать файл locale/(язык)/LC_MESSAGES/lang.mo
.
set_lang_name(имя_ плагина)
– получает перевод плагина__(текст, имя_ плагина)
– переводит текст
Если требуется перевести шаблон, то вместоимя_ плагина
указываемtpl
_n()
– синоним стандартной функцииngettext()
_s(текст, параметр1, параметр2, …)
– переводит текст и потом форматирует его через функциюsprintf()
__('Unknown error.');
_s('Account or IP banned until %s.', date('H:i:s, d.m.Y'));
Для редактирования *.po файлов можете использовать Poedit.
http://твой_сайт/modules/locale/parse.php?type=`(module или theme)&name=
(название плагина или шаблона)&action=
(update или оставляем параметр пустым)&lang=
(язык если нужно обновить)`
http://твой_сайт/modules/locale/parse.php?type=theme&name=admin – создает файл перевода для шаблона "admin"
http://твой_сайт/modules/locale/parse.php?type=module&name=auth&action=update&lang=ru_RU – обновляет/дополняет новыми значениями русский перевод плагина «auth»
С помощью интерфейсов можно вызывать функции и методы в шаблоне, через POST запросы и т.д.
- Категория/название плагина
- Название функции
- Массив параметров
auth
- авторизацияlogin
- входlogout
- выходregister
- регистрацияsave_profile
- сохранение профиляmessage
- сообщенияadd
- добавляет сообщениеget_messages
- получает сообщенияitems
- предметы и всё что связано с нимиadd
- добавляет предметsave
- сохраняет предметdelete
- удаляет предметget
- возвращает предметget_items
- возвращает список предметовref
- обрабатывает рефералаshortener
- укорачивает ссылкуadd_category
- добавляет категориюsave_category
- сохраняет категориюdelete_category
- удаляет категориюget_category
- возвращает категориюget_categories
- возвращает список категорийadd_key
- добавляет ключsave_key
- сохраняет ключdelete_key
- удаляет ключget_key
- возвращает ключget_keys
- возвращает список ключейget_sum_keys
- возвращает количество ключей у предметаtake_key
- проверяет выполненность всех заданий и возвращает в случае успеха ключadd_task
- добавляет заданиеsave_task
- сохраняет заданиеdelete_task
- удаляет заданиеget_task
- возвращает заданиеget_tasks
- возвращает список заданийadd_group_tasks
- добавляет группу заданийsave_group_tasks
- сохраняет группу заданийdelete_group_tasks
- удаляет группу заданийget_group_tasks
- возвращает группу заданийget_groups_tasks
- возвращает список групп
$me->run_interface('auth', 'logout');
<input class="form-control" name="interface[items][save_task][0][type]" value="vk_is" type="text">
<button name="interface[items][save_task][0][run]" type="submit" class="btn btn-success btn-lg">Save</button>
Для выполнения интерфейса нужно указать
interface[items][save_task][0][run]
Как видно после interface[items][save_task]
идет [0]
. Это используется для того чтобы можно было вызывать несколько раз один и тот же интерфейс.
<input class="form-control" name="interface[items][save_task][0][type]" value="vk_is" type="text">
<button name="interface[items][save_task][0][run]" type="submit" class="btn btn-success btn-lg">Save</button>
<input class="form-control" name="interface[items][save_task][1][type]" value="vk_is" type="text">
<button name="interface[items][save_task][1][run]" type="submit" class="btn btn-success btn-lg">Save</button>
- В папке
plugins
создается новую папку с название модуля (например:my_module
). - Теперь заходим в созданную папку (
plugins/my_module
) и создаем php файл с названием модуля (my_module.php
). - Заходим в файл
config.json
и вlist_plugins
добавляем название нового модуля.
$me->config(название_переменной, default_значение)
- получение настроек- Список настроек
auth
- авторизирован ли пользователь (true/false
)level
- уровень пользователяuser
- массив с данными о пользователе- И все остальные настройки из
config.json
$me->set_config(название_переменной, значение)
- устанавливает настройкиcaptcha(id, код)
- сравнивает полученный код с оригинальнымFile::get_contents(url)
- cиноним функцииfile_get_contents()
Log::add(text, tag)
- добавлет сообщение в логLog::get(key, where)
- получает логLog::getCount(key, arg)
- получает количество логовMail::send(arg)
- отправляет соощение на emailSmartDB::get()
- синоним$db->get()
только в конце форматирует результатSmartDB::getOne()
- синоним$db->getOne()
только в конце форматирует результатUser::ban(время_бана)
- блокировка пользователя на определенный периодUser::isBan()
- проверка заблокирован пользователь или нетUserMeta::add(arg)
- добавляет дополнительную информацию для пользователяUserMeta::get(key, id', ip)
- получает информациюUserMeta::delete(id)
- удаляетMessage
- смотрите интерфейсы$db
- смотрите https://github.com/joshcam/PHP-MySQLi-Database-Class$tpl->add_function($name, $func = '')
- добавляет функцию в шаблон$tpl->add_filter($func, $name = '')
- добавляет фильтер в шаблон$tpl->add_variable($tag, $value)
- добавляет переменную в шаблон
auth_register
- вызывается при регистрации (можно изменить "user" из настроек)auth_end_init
- конец авторизации
Вопросы, предложения и найденные ошибки пишите на http://nextable.ru/.
Released under the MIT License:
http://opensource.org/licenses/mit-license.php
MysqliDb.php:
https://github.com/joshcam/PHP-MySQLi-Database-Class/blob/master/LICENSE
Twig:
https://github.com/twigphp/Twig/blob/1.x/LICENSE
Created by expert_m