Бібліотека для Wordpress. Як зробити своє файлохраніліще
Вирішив переробити сторінку з книгами на вашому сайті, скориставшись доступом до MySQL, який все одно використовується в wordpress. Суть переробки досить проста - створити функцію, яка, знайшовши в тілі сторінки певний тег, заміняла б його якоїсь інформацією, отриманою з бази даних wordpress. У базі, у свою чергу, може бути що завгодно, у моєму випадку - описи та посилання на файли книг, представлених у «Бібліотеці». Складного в написанні такої функції нічого немає, по такому принципу до речі працюють багато плагіни, наприклад вставляють відео або музику на сторінку.
Принцип дії функції вставки даних на сторінку
При виконанні функції вона в циклі обходить список атрибутів тега, потім по кожному атрибуту робить запит до бази MySQL, отриману вибірку розбирає і виводить дані на сторінку у вигляді таблиці. Дані заносяться в базу руками, але бажають, скориставшись керівництвом " Як написати плагін для Wordpress ", можуть зробити сторінку для завантаження інформації до бази wordpress через браузер.
Створення нової таблиці в базі даних Wordpress
Підготуємо поле для подальшої діяльності - створимо в MySQL-базі wordpress'а нову таблицю (свою я назвав biblio) наступного вигляду:
| id | section | isbn | name | authors | description | book_url | book_cover_url |
Найпростіший спосіб створити таблицю - це виконати запит CREATE TABLE до бази даних:
CREATE TABLE `wp_biblio` ( `Id` INT NOT NULL AUTO_INCREMENT, `Section` VARCHAR (30) NOT NULL default'', `Isbn` VARCHAR (70) NOT NULL default'', `Name` VARCHAR (100) NOT NULL, `Authors` VARCHAR (50) NOT NULL default'', `Description` TEXT NOT NULL default'', `Book_url` VARCHAR (255) NOT NULL default'', `Book_cover_url` VARCHAR (255) NOT NULL default'', UNIQUE KEY id (id) ) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Для бажаючих краще розібратися в параметрах запиту в « Бібліотеці »представлена відмінна книга SQL. Повне керівництво (2-е видання).
Wordpress-функція виведення даних на сторінку
Тепер настав час зайнятися безпосередньо написанням функції для wordpress, яка отримає даних з бази і виведе їх на сторінку в зазначеному місці. У мене зазначенням місця для вставки даних служить тег виду [biblio="attr1, ATTR2, AttrN"] . Атрибути тега (слова, укладені в лапки) послужать назвами розділів бібліотеки (форматування атрибутів зберігається, тобто якщо вказати perl і php наприклад, то й розділи бібліотеки будуть названі малими літерами) і вони ж будуть служити для поділу категорій книг при запиті до базі даних.
function my_biblio_former ($ content) ( global $ wpdb; $ Biblio_table = $ wpdb-> prefix. "Biblio"; # встановлюємо дескриптор таблиці з книгами $ Pattern = "/ \ [biblio = \ "(.+?) \" \] / is "; # шаблон розбору тегу [biblio =" атрібут1, атрібутN "] if (preg_match ($ pattern, $ content, $ book_sect) & & is_page ('Бібліотека')) (# ЩОРАЗУ, як тег зустрічається на вказаній сторінці - він обробляється $ Sections = preg_split ("/ [\ s ,]+/", $ book_sect ['1 ']); # формується масив з атрибутів тега $ New_content = '<table width="100%" border="1" frame="void" rules="rows" cellspacing="0" cellpadding="2">'; foreach ($ sections as $ b_section) (# почали процес масиву атрибутів тега $ Sql = "SELECT * FROM $ biblio_table WHERE` section `= '$ b_section'"; # вибірка з бази для поточного атрибута $ Books = $ wpdb-> get_results ($ sql, ARRAY_A); # результати вибірки отримуємо у вигляді хеша $ New_content .= '<tr align="center"> <td> <h2>'. $ B_section. '</ H2> </ td> </ tr>'; foreach ($ books as $ book) (# обробка результатів вибірки з бази $ New_content .= '<tr align="center">'; # для кожної книги створюємо в таблиці новий рядок $ New_content .= '<td align="center"> <img src = "'. $ Book ['book_cover_url']. '" Alt = "'. $ Book ['name']. ' завантажити "> </ td> '; # в першому стовпці знаходиться обкладинка книги $ New_content .= '<td align="center"> <strong> <a href="'. $book['book_url'] .'">'. $ Book ['name']. '</ A> </ strong> <br /> <strong> ISBN: </ strong>'. $ Book ['isbn']. '<br /> <em>'. $ Book ['authors']. '</ Em> <br />'. $ Book ['description']. '</ Td>'; # у другому стовпці - ІСБН, автор (и), опис $ New_content .= '</ tr>'; ) # Кінець обробки вибірки ) # Кінець обробки атрибутів $ New_content .= '</ table>'; $ Content = preg_replace ($ pattern, $ new_content, $ content); return $ content; ) # Кінець обробки тегу [biblio]
Код функції я постарався досить повно прокоментувати, а докладно про запити до бази даних MySQL з Wordpress я знову ж таки розповідав у своєму керівництві з написання плагіна до Wordpress (див. частину п'яту - Пишемо плагін для Wordpress. Функціональна складова. ).
Написану функцію потрібно додати у файл functions.php своєї теми оформлення wordpress (наприклад, скориставшись вбудованим редактором з адміністративної панелі: Зовнішній вигляд -> Редактор).
Не забуваємо також встановити фільтр (про фільтри я розповідав раніше ) для виклику фнкціі:
add_filter('the_content', 'my_biblio_former', 1);
Висновок - перевірка роботи функції висновку даних з бази
От і все, функція готова і працює, прикладом чого є сторінка « Бібліотека »мого блогу, що представляє з себе один єдині тег [biblio="Perl, PHP, SQL"] , при цьому розділи бібліотеки виводяться в тому порядку, в якому вони перераховані в атрибутах тега.
Розглянуту в цій замітці функцію легко пристосувати для організації в Wordpress-блозі сховища файлів з зручним висновком даних по них (бінарні дані можна зберігати і безпосередньо в базі при бажанні) або якихось схожих завдань.
Експериментуйте, а робіть, удачі! ![]()

Останні коментарі