15.12.2009

Библиотека для wordpress

Решил переделать страницу с книгами на своём сайте, воспользовавшись доступом к MySQL, который всё равно используется в wordpress. Суть переделки довольно проста — создать функцию, которая, найдя в теле страницы определённый тег, заменяла бы его некоей информацией, полученной из базы данных wordpress. В базе, в свою очередь, может быть что угодно, в моём случае — описания и ссылки на файлы книг, представленных в «Библиотеке». Сложного в написании такой функции ничего нет, по таком принципу кстати работают многие плагины, например вставляющие видео или музыку на страницу.


Человек без RSS – что машина без колёс.

Принцип действия функции вставки данных на страницу

При вызове функции она в цикле обходит список атрибутов тега, затем по каждому атрибуту делает запрос к базе 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-блоге хранилища файлов с удобным выводом данных по ним (бинарные данные можно хранить и непосредственно в базе при желании) или каких-то схожих задач.

Экспериментируйте и творите, удачи! :)


Если времени в обрез – подпишись на RSS!

Здесь можно оставить свои комментарии. Выпуск подготовленплагином wordpress для subscribe.ru

Ссылки по теме:



0 коммент.:

Отправить комментарий

Спасибо за комментарий!