Клас для додавання опцій до сайту
Передмова до уроку
Працюючи з 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($варіант, $value) необхідний для додавання нових опцій до бази, якщо опція із зазначеним ім'ям вже існує, то у властивість $це->помилка додається повідомлення, яке розробник може вивести для себе або відвідувачів сайту за допомогою методу журнал().
метод is_name_options() допомагає перевірити, чи є опція із запропонованим ім'ям у таблиці опцій.
метод update_option() оновлює дані у вже існуючих опціях. Приймає 2 обов'язкових параметрів $варіант і $value (ім'я опції та значення).
Метод класу delete_option() необхідний видалення непотрібних опцій, якщо така існує у базі даних. Опція перевіряється і якщо було знайдено, то видаляється з бази на ім'я.
метод load_alloptions() призначений для виведення на екран усіх опцій, ця функція потрібна виключно для перегляду опцій розробником.
Про метод журнал() ми вже говорили, цей метод призначений для виведення всіх повідомлень, які потрапили в масив властивості $це->помилка.
Робота з класом опцій
Зараз, коли ми розглянули всі методи, можна плавно перейти до роботи з нашим класом.
Оскільки клас у нас працює через базу даних, то для початку нам необхідно її створити та підключиться, а таблицю вже створить наш клас.
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); |
Пограйте з методами класу та спробуйте за допомогою методів додавати нові опції, виводити їх на екран, оновлювати дані в опції, видаляти опції. Обов'язково спробуйте виводити повідомлення за допомогою методу журнал().
Ось і весь загальний огляд класу, далі думаю розберетеся. Для роботи з прикладом необхідно ввести нові дані для підключення до бази. Сам клас я викладаю у файлі, щоб у вас не було помилок при копіюванні, але обов'язково розберіться в роботі до використання.
Якщо виявили неточності, пишіть нам у коментарях і ми постараємося їх виправити.
/*
- Базовий курс з веб-дизайну;
- Верстка сайтів;
- Загальний курс CMS WordPress та продовження курсу з розробки шаблонів;
- Розробка сайтів на PHP.