четверг, 31 октября 2013 г.

Как создать свою страничку и плагин для CMS WordPress


Зачем это может понадобиться? Далеко не весь функционал представленный в базовом наборе готовой CMS удовлетворяет нашим требованиям. Зачастую можно подобрать соответствующий плагин на платной или бесплатной основе. Но как показывает практика, иногда бывают очень тонкие моменты, где готовый плагин чересчур пафосный и емкий по функционалу, а задача стоит  более-менее простая.

Используя элементарные знания по html, php, mysql можно изготовить нужный функционал на коленках.

Исходные данные:
Деятельность которую описывает сайт - Столовая
CMS - Wordpress 
У нас есть главная страница с уже наполненной информацией, где описываются какие блюда могут быть и по какой цене.
У нас есть блог, где ведутся записи, что новенького у нас происходит
Нам нужна страничка, где мы будем публиковать сегодняшнее меню всегда в стандартной форме.

mydomain.net - наш корневой домен
/mydomain/www - папка на сервере, где хранится содержимое сайта


Чтобы не нарушать целостности сайта, мы  должны сделать минимум изменений в шаблон и постараться использовать только штатные методы.
Итак, первым делом создадим страничку заготовку, которая будет использоваться, как интерфейс между нашим клиентом и данными используя общий дизайн сайта.



Переходим в на сайте в Dashboard - систему администрирования сайта (попросту говоря админку)
http://mydomain.net/wp-admin/ , выбираем раздел странички и пункт создать новую страницу.

Назовем ее - "Сегодня в меню". Наша страничка будет показывать что у нас сегодня в меню на обед.
В содержимое можно написать для начала только одно - служебный код "[menu_today]"

Сохранив и опубликовав нашу страничку, мы можем удостовериться, что при ее открытии и просмотре мы видим лишь одно "[menu_today]".


Теперь наша задача написать код-обработчик
Для этого нам нужно ознакомиться с плагинами WordPress.

Для этого создадим простейшую заготовку, которая обработает наше кодовое слово.

В папке /mydomain/www/wp-content/plugins/ - создадим папку с созвучным названием нашего плагина - menu_today
В папке /mydomain/www/wp-content/plugins/menu_today - создадим  пустой файл - menu_today.php с таким содержанием:

<?php
/**
 * @Wordpress plugin Menu today
 * @Version 1.0
 */
/*
 Plugin Name: Menu today
 Plugin URI: http://testplugin.com
 Description: Это наш первый плагин для WordPress
 Armstrong: Сегодня в меню
 Author: Его величество Автор
 Version: 1.0
 Author URI: http://myblog.com
*/

if ( !function_exists( 'add_shortcode' ) ) {
echo 'Hi there!  I\'m just a plugin, not much I can do when called directly.';
  exit;
}

function menu_today_shortcode()

{
$exists=get_option( "menu_exists", ''); 
if (!$exists) {
add_option("menu_breakfast", '');
add_option("menu_lunch", '');
add_option("menu_dinner", '');
add_option("menu_exists", '1');
}

if (isset($_GET['newmenu'])){
update_option("menu_breakfast", $_POST['breakfast']);
update_option("menu_lunch",  $_POST['lunch']);
update_option("menu_dinner",  $_POST['dinner']);
}

$breakfast=get_option("menu_breakfast", '');
$lunch=get_option("menu_lunch", '');
$dinner=get_option("menu_dinner", '');

$form="<form action=?newmenu method=post>
<fieldset>
Breakfast: <input name=\"breakfast\" value=\"".$breakfast."\"><br/>
Lunch: <input name=\"lunch\" value=\"".$lunch."\"><br/>
Dinner: <input name=\"dinner\" value=\"".$dinner."\"><br/>
<input type=submit>
</fieldset> 
</form>
";
 return $form;
}
 

add_shortcode('menu_today','menu_today_shortcode');
?>


После создания файла, заходим  в настройки плагинов и активуируем наш плагин

Запускаем нашу страничку и проверяем как сохраняются данные даже после перехода на другие страницы и назад.


Тепер разберем основные пункты этого файла.
Для работы плагина обязательно нужно заполнить служебные комментарии в начале файла

/**
 * @Wordpress plugin Menu today
 * @Version 1.0
 */
/*
 Plugin Name: Menu today - имя плагина
 Plugin URI: http://testplugin.com - наш сайт где поддержка
 Description: Это наш первый плагин для WordPress - описание
 Armstrong: Сегодня в меню
 Author: Его величество Автор
 Version: 1.0
 Author URI: http://myblog.com
*/


Маленькая защита от запуска файла напрямую
if ( !function_exists( 'add_shortcode' ) ) {
echo 'Hi there!  I\'m just a plugin, not much I can do when called directly.';
    exit;
}


Дальше - ключевой момент в конце файла - добавляем обработчик нашего служебного кода

add_shortcode('menu_today','menu_today_shortcode');
Когда на страничке встретится текст [menu_today] - движок заменит его результатом выполнения функции menu_today_shortcode

Этого достаточно для выполнения простого функционала.
Именно эта функция и является основным механизмом по генерированию содержимого нашей странички.

Проверяем есть в настройках элементы для хранения нашей информации, если нет - создаем их
$exists=get_option( "menu_exists", ''); 
if (!$exists) {
add_option("menu_breakfast", '');
add_option("menu_lunch", '');
add_option("menu_dinner", '');
add_option("menu_exists", '1');
}

По умолчанию отображаем форму для ввода данных, предварительно считав данные из базы данных

$breakfast=get_option("menu_breakfast", '');
$lunch=get_option("menu_lunch", '');
$dinner=get_option("menu_dinner", '');

$form="<form action=?newmenu method=post>
<fieldset>
Breakfast: <input name=\"breakfast\" value=\"".$breakfast."\"><br/>
Lunch: <input name=\"lunch\" value=\"".$lunch."\"><br/>
Dinner: <input name=\"dinner\" value=\"".$dinner."\"><br/>
<input type=submit>
</fieldset> 
</form>
";
Для передачи данных будет использоваться метод POST, а чтобы определить что нам данные передались - достаточно проверить существует ли переменная в запросе GET - newmenu, которая инициализируется формой в поле action при нажатии на кнопку "Submit Query".
Если нам передавались данные из формы, то сохраняем их в базе данных:

if (isset($_GET['newmenu'])){
update_option("menu_breakfast", $_POST['breakfast']);
update_option("menu_lanch",  $_POST['lanch']);
update_option("menu_dinner",  $_POST['dinner']);
}

Это не может быть рабочим примером, но это очень наглядная демонстрация - насколько просто решается задача по расширению функционала нашего сайта на основе CMS - Wordpress.
В рабочем варианте необходимо предусмотреть дополнительные обработки, такие как:
  1. Использование базы данных вместо системных настроек с помощью глобального объекта $wpdb.
  2. Инициализация таблиц в базе данных для хранения наших данных,  при активации плагина и удаление таблиц при деактивации.
  3. Проверка передаваемых данных от пользователя с помощью функции $wpdb->prepare();
  4. Проверка уровня доступа с помощью функции current_user_can().
  5. Добавить защиту аутентичности форм с помощью функции wp_nonce_field().
  6. А также добавить основные обработчики (add_action(), add_filter()) по мере необходимости.
  7. Добавить меню администрирования плагина с помощью функции add_action('admin_menu','my_add_admin_menu'), где my_add_admin_menu - имя функции которая обслуживает настройки нашего плагина.
Нужно заметить, что генерировать весь код html - абсолютно не обязательно!!! Нам нужно обработать только те элементы, которые заменяет служебный код [menu_today]. А оформить страничку можно прямо в редакторе страничек, что сильно упрощает процесс верстки.
Можно добавить иллюстрации, фон, даже вторичный текст вплоть до полезной информации о приеме пищи. Это и есть преимущества при использовании CMS как шаблона сайта, а Вам нужно написать только тот код, который будет ответствен за обработку данных. Чем сэкономит время и ресурсы на разработку интерфейса и разработку управления пользователями и комментариями.

Одним из рекомендаций может быть разделение форм списков и форм редактирования/ввода данных. То есть, если нам нужно создать список товаров - мы делаем страничку "Список товаров" со служебным словом [products_list], тогда для просмотра свойств товара - мы делаем страничку "Описание товара" со служебным словом [product_describe].
Кроме того, этот функционал нужно расположить в разных файлах, что обеспечит и порядок и читабельность.

Комментариев нет:

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