Osclass предоставляет мощную систему для создания собственных плагинов, которые могут расширять функционал вашей доски объявлений. В этой статье я подробно расскажу, как разработать плагин для Osclass с нуля.
- Подготовка к разработке
- Создание базовой структуры плагина
- Файл info.php
- Основной файл плагина (index.php)
- Установочный файл (install.php)
- Файл удаления (uninstall.php)
- Страница настроек (configure.php)
- Основные концепции разработки плагинов
- 1. Работа с хуками (Hooks)
- 2. Работа с базой данных
- 3. Добавление собственных страниц
- Пример плагина: «Продвижение объявлений»
- Реализация функций плагина
- Тестирование и отладка плагина
- Публикация плагина
- Заключение
Подготовка к разработке
-
Требования
-
Установленная Osclass (рекомендуется последняя версия)
-
Базовые знания PHP, SQL и понимание MVC-архитектуры
-
Доступ к файловой системе и базе данных
-
-
Структура плагинов Osclass
-
Плагины располагаются в
/oc-content/plugins/
-
Каждый плагин имеет свою папку с уникальным именем
-
Создание базовой структуры плагина
-
Создайте папку для вашего плагина, например:
/oc-content/plugins/my_plugin/
-
Основные файлы плагина:
-
index.php
— главный файл плагина -
info.php
— информация о плагине -
install.php
— скрипт установки -
uninstall.php
— скрипт удаления -
configure.php
— страница настроек (опционально)
-
Файл info.php
Этот файл содержит мета-информацию о вашем плагине:
<?php
return array(
'plugin_name' => 'My Custom Plugin',
'plugin_version' => '1.0',
'plugin_description' => 'Описание функционала вашего плагина',
'plugin_author' => 'Ваше имя',
'plugin_author_url' => 'https://вашсайт.ru',
'plugin_support_url' => 'https://вашсайт.ru/support',
'plugin_update_url' => 'https://вашсайт.ru/update-check',
'plugin_category' => 'category' // Например: administration, listings, security
);
?>
Основной файл плагина (index.php)
<?php
/*
* Plugin Name: My Custom Plugin
* Plugin URI: https://вашсайт.ru/plugins/my_plugin
* Description: Расширение функционала Osclass
* Version: 1.0
* Author: Ваше имя
* Author URI: https://вашсайт.ru
*/
// Защита от прямого доступа
if (!defined('OC_ADMIN')) {
exit('Direct access is not allowed.');
}
// Регистрация хуков
function my_plugin_init() {
// Пример регистрации хука
osc_add_hook('init', 'my_plugin_function');
osc_add_hook('posted_item', 'my_plugin_item_posted');
// Регистрация страницы настроек
osc_add_hook('admin_menu_init', 'my_plugin_admin_menu');
}
// Пример функции плагина
function my_plugin_function() {
// Ваш код здесь
}
// Обработчик события публикации объявления
function my_plugin_item_posted($item) {
// Логика после публикации объявления
$itemId = $item['pk_i_id'];
// Например, запись в лог или отправка уведомления
}
// Добавление пункта меню в админку
function my_plugin_admin_menu() {
osc_add_admin_submenu_page(
'plugins',
'Настройки My Plugin',
osc_route_admin_url('my-plugin-admin'),
'my_plugin_settings'
);
}
// Инициализация плагина
my_plugin_init();
?>
Установочный файл (install.php)
<?php
function my_plugin_install() {
// Создание необходимых таблиц в БД
$query = <<<SQL
CREATE TABLE IF NOT EXISTS %st_my_plugin_data (
id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
item_id INT(10) UNSIGNED NOT NULL,
custom_field VARCHAR(255) NULL,
created DATETIME NOT NULL,
PRIMARY KEY (id),
INDEX (item_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
SQL;
$conn = DBConnectionClass::newInstance();
$db = $conn->getOsclassDb();
$comm = new DBCommandClass($db);
$comm->query(sprintf($query, DB_TABLE_PREFIX));
// Добавление конфигурационных параметров
osc_set_preference('my_plugin_enabled', '1', 'my_plugin', 'BOOLEAN');
osc_set_preference('my_plugin_option', 'default_value', 'my_plugin', 'STRING');
return true;
}
?>
Файл удаления (uninstall.php)
<?php
function my_plugin_uninstall() {
// Удаление таблиц из БД
$conn = DBConnectionClass::newInstance();
$db = $conn->getOsclassDb();
$comm = new DBCommandClass($db);
$comm->query(sprintf('DROP TABLE %st_my_plugin_data', DB_TABLE_PREFIX));
// Удаление конфигурационных параметров
Preference::newInstance()->delete(array('s_section' => 'my_plugin'));
return true;
}
?>
Страница настроек (configure.php)
<?php
function my_plugin_configure() {
// Обработка формы
if (Params::getParam('plugin_action') == 'done') {
osc_set_preference('my_plugin_option', Params::getParam('my_plugin_option'), 'my_plugin', 'STRING');
osc_add_flash_ok_message(__('Настройки сохранены', 'my_plugin'), 'admin');
osc_redirect_to(osc_route_admin_url('my-plugin-admin'));
}
// Отображение формы
?>
<div class="form-horizontal">
<h2 class="render-title">Настройки My Plugin</h2>
<form action="<?php echo osc_route_admin_url('my-plugin-admin'); ?>" method="post">
<input type="hidden" name="plugin_action" value="done" />
<div class="form-row">
<div class="form-label">Опция плагина</div>
<div class="form-controls">
<input type="text" class="xlarge" name="my_plugin_option"
value="<?php echo osc_get_preference('my_plugin_option', 'my_plugin'); ?>" />
</div>
</div>
<div class="form-actions">
<input type="submit" value="Сохранить" class="btn btn-submit" />
</div>
</form>
</div>
<?php
}
?>
Основные концепции разработки плагинов
1. Работа с хуками (Hooks)
Osclass предоставляет систему хуков для интеграции вашего плагина:
// Добавление хука
osc_add_hook('hook_name', 'your_function_name');
// Примеры популярных хуков:
osc_add_hook('init', 'my_init_function'); // При инициализации системы
osc_add_hook('pre_item_post', 'my_pre_post_function'); // Перед публикацией объявления
osc_add_hook('posted_item', 'my_posted_function'); // После публикации объявления
osc_add_hook('item_search', 'my_search_function'); // При поиске объявлений
osc_add_hook('admin_menu_init', 'my_admin_menu_function'); // Для добавления пунктов в админ-меню
2. Работа с базой данных
Пример работы с БД в плагине:
// Вставка данных
function my_plugin_insert_data($itemId, $value) {
$conn = DBConnectionClass::newInstance();
$db = $conn->getOsclassDb();
$comm = new DBCommandClass($db);
$comm->insert(DB_TABLE_PREFIX.'t_my_plugin_data', array(
'item_id' => $itemId,
'custom_field' => $value,
'created' => date('Y-m-d H:i:s')
));
return $db->insertedId();
}
// Выборка данных
function my_plugin_get_data($itemId) {
$conn = DBConnectionClass::newInstance();
$db = $conn->getOsclassDb();
$comm = new DBCommandClass($db);
$comm->select('*');
$comm->from(DB_TABLE_PREFIX.'t_my_plugin_data');
$comm->where('item_id', $itemId);
$result = $comm->get();
return $result->result();
}
3. Добавление собственных страниц
Вы можете создавать новые страницы в админке или фронтенде:
// Для фронтенда
function my_plugin_routes() {
osc_add_route('my-plugin-page', 'my-plugin', 'my-plugin', 'my_plugin_page_handler');
}
function my_plugin_page_handler() {
// Ваш код для отображения страницы
require_once 'my_plugin_page.php';
}
// Для админки
function my_plugin_admin_menu() {
osc_add_admin_submenu_page(
'plugins',
'My Plugin Page',
osc_route_admin_url('my-plugin-admin'),
'my_plugin_admin_page',
'administrator'
);
}
function my_plugin_admin_page() {
// Код админ-страницы
require_once 'my_plugin_admin_page.php';
}
Пример плагина: «Продвижение объявлений»
Давайте создадим простой плагин, который позволяет отмечать объявления как «Продвигаемые»:
-
install.php — создаем таблицу для хранения продвигаемых объявлений
-
index.php — добавляем хуки и функции для работы с плагином
-
configure.php — страница настроек плагина
Реализация функций плагина
// В index.php
function promoted_items_init() {
osc_add_hook('init', 'promoted_items_check');
osc_add_hook('item_detail', 'promoted_items_display_badge');
osc_add_hook('admin_menu_init', 'promoted_items_admin_menu');
}
// Проверка продвигаемых объявлений
function promoted_items_check() {
$promoted = promoted_items_get_all();
View::newInstance()->_exportVariableToView('promoted_items', $promoted);
}
// Отображение бейджа на продвигаемых объявлениях
function promoted_items_display_badge() {
$itemId = osc_item_id();
if (promoted_items_is_promoted($itemId)) {
echo '<div class="promoted-badge">Продвигается</div>';
}
}
// Добавление пункта в админ-меню
function promoted_items_admin_menu() {
osc_add_admin_submenu_page(
'items',
'Продвигаемые объявления',
osc_route_admin_url('promoted-items-admin'),
'promoted_items_admin_page'
);
}
Тестирование и отладка плагина
-
Включите режим отладки в Osclass (в файле
config.php
): -
Используйте логирование для отладки:
osc_log('My Plugin', 'Debug message', 'debug');
-
Проверьте совместимость с разными версиями Osclass
Публикация плагина
-
Упакуйте плагин в zip-архив (только папку плагина, без родительских директорий)
-
Опубликуйте на на нашем сайте
-
Либо используйте для своих проектов
Заключение
Разработка плагинов для Osclass открывает широкие возможности для кастомизации вашей доски объявлений. Начните с простых плагинов, постепенно усложняя функционал. Изучайте стандартные плагины Osclass и документацию для более глубокого понимания системы.
Помните о безопасности:
-
Всегда проверяйте входные данные
-
Используйте подготовленные запросы для работы с БД
-
Ограничивайте права доступа где это возможно
Удачной разработки!