Класс для добавления опций к сайту
Предисловие к уроку
Работая с CMS WordPress мне очень нравилась идея опций в плагинах, которые можно использовать как в админке, так и на стороне пользователя. В эти опции может помещаться как техническая информация при разработке (данные для подключения к базе, хранить список произвольных полей, хранить опции которые относятся к отдельным типам данных), так и какие-то статические данные которые выводятся на всех страницах (адреса, телефоны, название сайта, слоган). Такие опции очень полезны для вывода контактных данных, которые меняться не часто, но зачастую находятся в разных частях кода и искать их очень неудобно.
От слов к делу
Думаю с вступление закончили и первое что я вам дам это код самого класса.
<?php
class optionsClass {
var $option;
var $value;
var $autoload;
var $new_value;
var $prefix;
var $db;
var $error;
function __construct($db, $prefix){ // создает таблицу в базе даных с нужным префиксом, сразу после подключения класса
if(!$db || !$prefix){
$this->error[] = 'Не хватает параметров';
exit;
}
$this->db = $db;
$this->prefix = $prefix;
$createTable = '
CREATE TABLE `'.$prefix.'_options` (
`option_id` bigint(20) unsigned zerofill NOT NULL AUTO_INCREMENT,
`option_name` varchar(64) DEFAULT NULL,
`option_value` longtext,
`autoload` varchar(20) DEFAULT NULL,
PRIMARY KEY (`option_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
';
$query = 'select * from `'.$prefix.'_options`';
$result = mysql_query($query , $this->db);
if($result === false){
$result = mysql_query($createTable , $this->db);
}
}
function get_option( $option, $default='' ){ // достаем опции из базы
$query = "select option_value from ".$this->prefix."_options WHERE option_name='".$option."'";
$result = mysql_query($query , $this->db);
$row = mysql_fetch_array($result);
if($row['option_value']){ return $row['option_value']; }else{ $this->error[] = 'Опция не найдена'; return false; }
}
function add_option($option, $value, $autoload='yes'){
if($this->is_name_options($option) == false){ // Добавляем опции
$query = "INSERT INTO ".$this->prefix."_options (option_name, option_value, autoload) VALUES ('".$option."', '".$value."', '".$autoload."')";
$result = mysql_query($query , $this->db);
if(!$result){
$this->error[] = 'Не удалось добавиь опцию в базу данных';
}else{
$this->error[] = 'Опция ("'.$option.'" => "'.$value.'") добавлена в базу данных в базу данных';
}
}else{
$this->error[] = 'Имя не уникально';
return false;
}
}
function is_name_options($option_name){ // проверяем наицие опции в базе
if(isset($option_name)){
$query = "select * from ".$this->prefix."_options WHERE option_name='".$option_name."'";
$result = mysql_query($query , $this->db);
$row = mysql_fetch_array($result);
if($row){ return true; }else{ return false; }
}else{
$this->error[] = 'Опция не задана';
}
}
function update_option($option, $value){ // Обновляем опции
if($this->is_name_options($option)){
$query = "update ".$this->prefix."_options SET option_value='".$value."' WHERE option_name='".$option."'";
$result = mysql_query($query , $this->db);
if($result){ $this->error[] = 'Опция '.$option.' обновлена'; }else{ $this->error[] = 'Опция '.$option.' не обновлена'; }
}else{
$this->error[] = 'Нет такой опции ['.$option.'] в базе';
}
}
function delete_option($option){ // удаляем опции
if($this->is_name_options($option)){
//echo $option; exit;
$query = "delete from ".$this->prefix."_options WHERE option_name='".$option."'";
//echo $query ;
$result = mysql_query($query , $this->db);
if($result){ $this->error[] = 'Опция '.$option.' удалена'; }else{ $this->error[] = 'Опция '.$option.' не удалена'; }
}else{
$this->error[] = 'Нет такой опции ['.$option.'] в базе';
}
}
function load_alloptions(){ // вывести на экран все опции
$query = "select option_name, option_value from ".$this->prefix."_options";
$result = mysql_query($query , $this->db);
while($row = mysql_fetch_array($result)){
echo '[ '.$row['option_name'].' ] => [ '.$row['option_value'].' ]<br />';
}
}
function log(){ // лог операций и ошибок
if($this->error){
echo '<pre>';
print_r($this->error);
echo '</pre>';
}
}
}
?>Вот такой непростой класс, давайте рассмотрим все его методы по порядку.
Конструктор класса — проверяет, есть ли в базе данных таблица опций, если ее нет, то самостоятельно создает эту таблицу. Конструктор принимает переменную подключения к базе данных $db и переменную префикс таблиц $prefix. Если нет переменных $db или $prefix, то в свойство $error записывается сообщение об ошибке и программа останавливается.
Метод get_option() необходим для вывода одной опции которая уже есть в базе. Тут делается обычная выборка, думаю, если вы работаете с ООП, то об этом можно уже не говорить.
Метод add_option($option, $value) необходим для добавления новых опций в базу, если опция с указанным именем уже существует, то в свойство $this->error добавляется сообщение, которое разработчик может вывести для себя или для посетителей сайта при помощи метода log().
Метод is_name_options() помогает проверить, есть ли опция с предложенным именем в таблице опций.
Метод update_option() обновляет данные в уже существующих опциях. Принимает 2 обязательных параметра $option и $value (имя опции и значение).
Метод класса delete_option() необходим для удаления ненужных опций, если такая существует в базе данных. Опция проверяется и если была найдена, то удаляется из базы по имени.
Метод load_alloptions() предназначен для вывода на экран всех опций, эта функция нужна исключительно для просмотра опций разработчиком.
О методе log() мы уже говорили, этот метод предназначен для вывода всех сообщений, которые попали в массив свойства $this->error.
Работа с классом опций
Сейчас, когда мы рассмотрели все методы можно плавно перейти к работе с нашим классом.
Так как класс у нас работает через базу данных, то для начала нам необходимо ее создать и подключится, а таблицу уже создаст наш класс.
$db = mysql_connect('localhost', 'db', 'wp-admin');
if (!$db) {
die('Could not connect: ' . mysql_error());
}
mysql_select_db( 'db-name', $db );Далее подключаем наш класс и пробуем его использовать:
include './optionsClass.php';
$prefix = 'cl';
$obj = new optionsClass($db, $prefix);
$obj->add_option('optionsName',12);
//$obj->update_option('optionsName',13);
//$obj->delete_option('optionsName');
$obj->load_alloptions();
$opt = $obj->get_option('optionsName');
echo $opt;
$obj->log();
mysql_close($db);Поиграйте с методами класса и попробуйте с помощью методов добавлять новые опции, выводить их на экран, обновлять данные в опции, удалять опции. Обязательно попробуйте выводить сообщения при помощи метода log().
Вот и весь общий обзор класса, дальше думаю разберетесь. Для работы с примером необходимо ввести новые данные для подключения к базе. Сам класс я выкладываю в файле, чтобы у вас не было ошибок при копировании, но обязательно разберитесь в его работе до использования.
Если нашли неточности, пишите нам в комментариях и мы постараемся их исправить.
/*

- Базовый курс по веб-дизайну;
- Верстка сайтов;
- Общий курс по CMS WordPress и продолжение курса по разработке шаблонов;
- Разработка сайтов на PHP.




