Класс для добавления опций к сайту
Предисловие к уроку
Работая с CMS WordPress мне очень нравилась идея опций в плагинах, которые можно использовать как в админке, так и на стороне пользователя. В эти опции может помещаться как техническая информация при разработке (данные для подключения к базе, хранить список произвольных полей, хранить опции которые относятся к отдельным типам данных), так и какие-то статические данные которые выводятся на всех страницах (адреса, телефоны, название сайта, слоган). Такие опции очень полезны для вывода контактных данных, которые меняться не часто, но зачастую находятся в разных частях кода и искать их очень неудобно.
От слов к делу
Думаю с вступление закончили и первое что я вам дам это код самого класса.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
<?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.
Работа с классом опций
Сейчас, когда мы рассмотрели все методы можно плавно перейти к работе с нашим классом.
Так как класс у нас работает через базу данных, то для начала нам необходимо ее создать и подключится, а таблицу уже создаст наш класс.
1 2 3 4 5 6 |
$db = mysql_connect('localhost', 'db', 'wp-admin'); if (!$db) { die('Could not connect: ' . mysql_error()); } mysql_select_db( 'db-name', $db ); |
Далее подключаем наш класс и пробуем его использовать:
1 2 3 4 5 6 7 8 9 10 11 12 |
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.