Від автора: у цьому уроці ми почнемо змінювати код галереї для того, щоб вона використовувала в своїй роботі базу даних. З БД галерея стане більш функціональною, зокрема, в БД ми можемо зберігати короткі описи до кожної картинці, які виводяться на звороті картинки. Отже, давайте почнемо.
Насамперед, нам потрібно створити БД. Поки що нам вистачить однієї таблиці, в якій будуть зберігатися номер галереї, до якої відноситься картинка, назва файлу зображення та опис картинки. Запит для створення таблиці буде наступним:
CREATE TABLE IF NOT EXISTS `images` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`img` varchar(255) NOT NULL,
`description` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
KEY `gallery_id` (`gallery_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=11 ;
Далі потрібно заповнити таблицю даними. У додаткових матеріалах ви знайдете файл дампа images.sql, який створить потрібну таблицю з даними.
Йдемо далі. Оскільки в БД у нас є поле з номером галереї картинки, отже, ми повинні в додатку якось отримувати номер запитаної галереї і показувати саме її зображення. Отримувати номер ми будемо з GET-параметри gallery.
В індексному файлі після підключення файлу функцій отримаємо номер галереї:
$gallery = isset($_GET[‘gallery’]) ? (int)$_GET[‘gallery’] : 1;
if($gallery < 1) $gallery = 1;
Тут все просто. Якщо GET-параметр є, тоді візьмемо його, інакше вважаємо, що потрібно показувати картинки галереї №1. Зараз url у нас буде виглядати приблизно так: http://localhost/gallery/?gallery=2. Так ми запитуємо картинки другий галереї. Однак, можна спробувати скоротити url, використовуючи можливості модуля mod_rewrite. Давайте спробуємо зробити ЧПУ адресу виду http://localhost/gallery/2, який буде запитувати картинки другий галереї.
Відкриємо файл .htaccess і додамо в нього наступні рядки:
RewriteEngine On
RewriteRule ^(\d+) index.php?gallery=$1 [QSA]
Перший рядок містить потрібний нам модуль. Друга рядок являє собою правило переписування посилання. Прапор QSA необхідний для роботи пагинации.
Тепер при зверненні з ЧПУ адресою ми будемо бачити потрібну нам сторінку. Ну і якщо ми використовуємо ЧПУ, нам потрібно в функцію пагинации у файлі pagination.php передавати третій параметр, який дасть зрозуміти функції, що робота йде з ЧПУ:
$pagination = pagination($page, $count_pages, $modrew = 1);
Тепер залишилося привести всі посилання в додатку до абсолютного формату, щоб не було проблем з підключенням скриптів, стилів і т. д. Для цього створимо файл config.php, який підключимо перед файлом функцій. Оголосимо у файлі кілька констант і підключимося відразу до БД:
define(“SITE”, “http://localhost/gallery/”);
define(“DBHOST”, “localhost”);
define(“DBUSER”, “root”);
define(“DBPASS”, “”);
define(“DBNAME”, “gallery”);
$db = @mysqli_connect(DBHOST, DBUSER, DBPASS, DBNAME) or die(“Немає підключення до БД”);
mysqli_set_charset($db, “utf8”) or die(“Не встановлена кодування з’єднання”);
У константі SITE ми зберігаємо шлях до програми. Ця константа нам і знадобиться для переписування посилань з відносних на абсолютні. Використовуємо константу в індексному файлі для всіх посилань приблизно так:
Тепер давайте отримаємо з БД картинки запитаної галереї. Для цього в індексному файлі закомментіруем виклик функції get_images() і будемо отримувати результат роботи функції get_images_db():
$images = get_images_db($gallery);
Опишемо функцію у файлі функцій:
/**
* отримання зображень з БД
**/
function get_images_db($gallery){
global $db;
$query = “SELECT id, img, description images FROM WHERE gallery_id = $gallery ORDER BY id ASC”;
$res = mysqli_query($db, $query);
$images = array();
while($row = mysqli_fetch_assoc($res)){
$images[$row[‘id’]] = $row;
}
return $images;
}
В індексному файлі можемо надрукувати масив $images, щоб переконатися, що ми отримуємо картинки потрібної галереї:
print_r($images);
На цьому ми завершимо поточний урок. Удачі і до нових зустрічей!