В данной серии уроков мы научимся писать плагины для движка E107 и заодно рассмотрим некоторые встроенные функции в Е107, например, очень полезные функции для работы с базой данных. Авторы движка постарались, чтобы работа с базой данных была как можно проще. Всего будет 3 урока. (где 3-й урок я так и не нашел...)
Статья полностью содрана отсюда:
http://e107.org.ru/e107_plugins/content/content.php?content.5Урок 1
Напишем небольшой плагин, который будет выводить случайный анекдот из базы данных. Данный плагин очень простой и примитивный, имеет минимум функционала. Нашей задачей будет показать, как все-таки пишутся плагины для E107. Можете поупражняться на досуге и развить этот плагин во что-то более дельное.
Суть вопроса.
Нужно создать скрипт, который бы был плагином для Е107, мог бы инсталлироваться как плагин, управляться из админки, ну и конечно, показываться на сайте. Для темы выберем простенькую задачку: показывать анекдоты на сайте в случайном порядке. Анекдоты будут храниться в базе данных. От вас требуется знание PHP и основ MySQL.
Приступим.
Итак, с тех. заданием немного определились. Пожалуй, самое время подробней рассказать о плагинах. Плагин - это дополнительный модуль (набор PHP-скриптов), расширяющий функционал движка. Плагины бывают разные, нужные и не очень. Тем не менее, даже в стандартной поставке Е107 присутствуют немало плагинов, хотя некоторые думают, что это стандартные средства Е107. Для того чтобы система поняла, что есть какой-то плагин, который нужно использовать, нужно проделать некоторые операции.
В каталоге e107_plugins нужно создать файл с описанием плагина plugin.php с некоторым заранее определенным содержимым и еще как минимум один рабочий файл, который будет поддерживать функционал плагина, проще говоря, обработчик. Хотя обычно плагин состоит из большего числа файлов. Например, файла описания плагина, конфигуратора и обработчика. В этом уроке мы рассмотрим содержимое файла plugin.php.Для удобства работы лучше создать отдельную директорию, куда мы будем складывать все наши файлы. Имя директории пусть будет anekdot.
plugin.php - Описание плагина.
Если взглянуть на разные директории с плагинами, то можно убедиться, что почти во всех присутствует этот файл. И даже больше, этот файл во всех плагинах имеет практически одинаковый формат. Поскольку все переменные, описываемые в плагине, должны быть именно такими, какие они есть. Мы тоже не будет отходить от традиций и воспользуемся некоторым шаблоном.
<?PHP
$eplug_name = "Анекдотик";
$eplug_version = "0.1";
$eplug_author = "Marconi";
$eplug_logo = "button.png";
$eplug_url = "http://e107.org.ru";
$eplug_email = "ezik@1gb.ru"; //не пишете на этот емайл он для спама! LOL
$eplug_description = "Этот плагин показывает анекдоты";
$eplug_compatible = "e107v6";
$eplug_readme = "";
В общем-то, тут все понятно. Это информация о плагине, которая будет отображаться в админке – управление плагинами.
$eplug_folder = "anekdot";
Имя папки, в которой будет лежать плагин. В итоге должен получится путь /e107_plugins/anekdot.
$eplug_menu_name = "";
Оставим пустым, нашему плагину не потребуется.
$eplug_conffile = "anekdot_conf.php";
Имя файла, отвечающего за настройку плагина.
$eplug_icon = $eplug_folder."/images/icon.png";
$eplug_caption = "Настроить анекдотик";
Путь до иконки плагина и название заголовка.
$eplug_prefs = "";
Заранее определенные настройки. Нам не потребуются.
$eplug_table_names = array(
"anekdot"
);
Список и название таблиц базы данных, которые будут использоваться скриптом. Нам нужна всего одна.Следует заметить, что приставки к названию таблиц будут добавлены автоматически. Например, если у вас при установке движка был задан префикc e107_, то в итоге таблица будет называться e107_anekdot.
$eplug_tables = array(
"CREATE TABLE ".MPREFIX."anekdot (
id int(9) NOT NULL auto_increment,
anek text NOT NULL,
PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT CHARSET=UTF8;");
SQL-скрипт, создающий нужную нам таблицу.
$eplug_link = TRUE;
Нужно ли добавлять ссылку в главное меню навигации:
TRUE=да FALSE=нет
$eplug_link_name = "Хочу анекдот";
$eplug_link_url = e_PLUGIN."anekdot/anekdot.php";
Как будет называться ссылка и куда в итоге приведет.
$eplug_done = "Поздравляем, все гладко";
Надпись по завершении установки плагина.
Остальные поля нам не нужны, оставим их как есть, к тому же из их названий легко можно понять, для чего они нужны. Например, эти поля – для апгрейда, но нам он точно не нужен.
$upgrade_add_prefs = "";
$upgrade_remove_prefs = "";
$upgrade_alter_tables = "";
$eplug_upgrade_done = "";
?>
Теперь сохраняем весь наш файл. Поздравляю, начало положено, не так уж и сложно
Урок 2
На этом уроке мы рассмотрим файл конфигурирования нашего плагина, а также встроенные возможности Е107 для работы с базами данных.
На прошлом уроке в файле описания мы задали имя конфигу:
$eplug_conffile = "anekdot_conf.php";
Вот этот файл мы сейчас и будем создавать.
Ну, в общем-то начало стандартное практически для всех окошек в е107:
<?
require_once("../../class2.php");
if(!getperms("P"))
Потом цепляем модуль аутентификации:
require_once(e_ADMIN."auth.php");
дабы простые пользователи не могли рулить настройкой.
Есть и другой вариант. Например, в е107 есть глобальные переменные, одна из них называется ADMIN и установлена в значении TRUE, если пользователь авторизовался и является админом. То есть данную строку можно было заменить на:
if(!ADMIN)
Дальше идет собственно код конфигуратора.
Поскольку добавление строк в базу и рапорт системы о том, что строки добавлены, будут у нас в одном файле, то нужно проверить, с какой целью в данный момент файл вызывается, - чтобы что-то добавить или просто показать форму добавления.
if(IsSet($_POST['updatesettings'])){
Тут мы проверяем, пришло ли нам что-нибудь с запросом страницы и если пришло, значит, нужно добавлять строки в базу.
Теперь самое интересное:
$new_anek = $_POST['new_anek'];
$sql = new db;
$sql -> db_Insert("anekdot"," ‘’,$new_anek");
$message = "Настройки обновили.";
}
Тут необходимо остановиться подробнее.
Авторы сайта сделали ряд функций для работы с базой данных, которые облегчают нам с вами жизнь. Описание функций и их использование написаны в файле mysql_class.php в директории с заголовочными файлами.
Одна из этих функций тут используется: db_Insert, в файле описания mysql_class.php можно найти описание этой функции. Примерно оно выглядит так:
function db_Insert($table, $arg, $debug=FALSE){
/*
# Insert with args
#
# - parameter #1: строка $table, имя таблицы
# - parameter #2: строка $arg, вставляет строку в таблицу
# - return возвращает идентификатор, или ошибку
*/
Давайте посмотрим, насколько авторы облегчили нам жизнь, и какой есть еще вариант работы. Если бы не было этих функций, то пришлось бы писать примерно так (пример почти в самом коротком варианте):
<?
$link = mysql_connect("mysql_host", "mysql_login", "mysql_password") or die ("Нет соединения с хостом");
mysql_select_db ("my_database") or die ("Нет соединения с базой");
$query = "INSERT INTO …..";
$result = mysql_query ($query);
mysql_free_result($result);
mysql_close($link);
Как видим, строк ушло больше, также нужно забивать сюда логин, пароль, полное название таблиц и т.д., а используя функции е107 - только две строки:
$sql = new db;
$sql -> db_Insert("anekdot"," ‘’,$new_anek");
По-моему, заметно удобнее и проще. Рассмотрим более детально db_Insert:
db_Insert(“таблица”, “список значений”)
Если вспомнить скрипт создания таблицы, который мы написали в первом уроке, то мы создали таблицу с двумя полями:
id int(9) NOT NULL auto_increment,
anek text NOT NULL
Поскольку поле id автоувеличивающееся, то его заполнять нам не нужно и остается одно поле anek. Список значений заполняется через запятую.
$sql -> db_Insert("anekdot",” ‘’,$new_anek");
Также следует заметить, что таблица полностью называется е107_anekdot, но в данном случае движок опять же сам за нас добавит недостающую часть имени, т. е. ту, которую вы указали при установке движка.
Идем дальше.
А дальше, собственно, идет форма для добавления анекдотов. Тут все просто и понятно:
$text='<form name="addanek" action="anekdot_conf.php" method="post">';
$text .='<textarea name="new_anek" rows=5 cols=20 wrap="off">';
$text .='анек пишем сюды';
$text .='</textarea><BR>';
$text .='<input type="submit" name="updatesettings" value="Send">';
$text .='</form>';
Тут же появляется updatesettings, при приеме которого мы выше определяли - нужно добавлять строки в базу или нет. Стоит нажать на кнопку в форме, как это значение установится и страница перегрузится.
Ну и стандартное окончание любого админского окошка в е107:
$ns -> tablerender("<div style='text-align:center'>добавление анекдотов</div>", $text);
require_once(e_ADMIN."footer.php");
?>
На следующем уроке мы займемся выборкой анекдотов из базы.
Удачи!
З.Ы. Надеюсь, что хоть кто-нибудь меня понял
В е107 используются переменные которые вы можете использовать в своих скриптах.
USER
Возращает TRUE если пользователь залогинлся.
Использование: if(USER){...
USERID
Возращает уникальный номер юзера
Использование:$unique_id = USERID;
USERNAME
Возращает имя (ник?) пользователя
Использование: $name = USERNAME;
USEREMAIL
Возращает EMAIL пользователя
Использование: $email = USERMAIL;
USERLV
Возращает дату и время последнего визита пользователя (unix timestamp)
Использование:$last_visit = USERLV;
USERCLASS
Возращает класс пользователя (разделитель '.' Точка)
Использование:$classes = USERCLASS;
USER_PREF
Возращает настройки пользователя
Использование:$preferences = USER_PREF;
ADMIN
Возращает TRUE если юзер админ
Использование:if (ADMIN){...
ADMINID
Возращает уникальный номер админа
Использование:$unique_admin_id = ADMINID;
ADMINNAME
Возращает имя (ник?) админа
Использование:$admin_name = ADMINNAME;
ADMINPERMS
Возращает класс админа (разделитель '.' Точка)
Использование:$admin_permissions = ADMINPERMS;
ADMINEMAIL
Возращает EMAIL админа
Использование:$admin_email = ADMINEMAIL;
ADMINPWCHANGE
Возращает дату последней смены пароля админа (unix datestamp)
Использование:$admin_password_change = ADMINPWCHANGE;
e_HTTP
Возращает путь к корневой папке сайта
Использование:$path = e_HTTP."index.php";
e_ADMIN
Возращает путь к папке админа (default: 'admin')
Использование:$path = e_ADMIN."newspost.php";
e_SELF
Возращает текущие имя скрипта
Использование:$this_script = e_SELF;
e_QUERY
Возращает QUERY_STRING текущего URL
Использование:$qs = e_QUERY;
e_BASE
Возращает путь к базовой папке
Использование:$base_dir = e_BASE;
THEME
Возращает путь к папке c темой сайта (например 'themes/e107/')
Использование:$theme_path = THEME;