Всем доброго времени суток! Спасибо что посещаете мой блог даже если он очень редко обновляется . Сегодня появилась свободная минутка, и я решил посветить ее написанию посту, а то мы так и не закончим глобальный цикл "Создать блог с нуля". В прошлых постах мы вывели в настройки одни из самых важных полей для управления скриптом, сегодня же мы выведем еще два поля. Если быть точнее то не поля а списка.
Данные две настройки позволят управлять режимами блога, а именно включать или выключать ЧПУ и модерацию комментариев.
Прежде чем приступать к реализации данных новых настроек, нам необходимо создать ячейку в таблице page для хранения этих настроек. Настройки будут хранится вот в таком виде:
0|1
Каждое число будет отвечать за определенную настройку. Если числом является ноль то это будет обозначать, что настройка отключена.. Если же числом является единица - то наоборот, включена.
Знак вертикального слеша позволит в последствии поделить данную строчку на массив и назначить значение к определенной переменной. Если вспомнить то за включение ЧПУ режима отвечает переменная chpu, а за включение модерации комментариев - переменная whitelist.
Сейчас эти переменные назначены вручную, наша задача сделать их привязанным к ячейке в базе данных.
Для того чтобы новоприбывший не покинул данную страницу с мыслю "Что это за несвязанный бред" я должен сказать пару слов о том, чем мы тут занимаемся. Данный материал посвящен глобальному циклу статей "Создать блог с нуля". Цикл повествует о создание простейшего движка на php, с помощью котором можно будет вести свой блог. Результат Вы можете видеть воочию, я пишу Вам именно из панели разрабатываемой мною CMS.
Весь материал касающегося разработки данной системы лежит вот по этой ссылке, если Вы заинтересовались, то Вам туда
Если Вам интересна данная тема, то обязательно подпишитесь на RSS ленту блога через ридер, или же по почте. Так Вы не пропустите новые заметки моего блога.
Давайте откроем phpmyadmin и создадим новую ячейку в таблице. Сразу после поля meta_k в таблице page, создаем новую ячейку
Назвал я новую ячейку configblog
Теперь выделяем строчку в таблице page и жмем на кнопку "Изменить"
Вставляем в новую ячейку вот такое значение - 0|0
Сохраняем все это дело... Теперь у нас имеется необходимая ячейка, с необходимом значением в ней.
Для этого нам понадобится функция которая будет выводить результат из базы данных, после чего данный результат мы разобьем на массив и распихаем элементы массива по необходимым нам переменным.
Такая функция понадобится и в пользовательской части нашего движка и в админ панели, ведь некоторые возможности админ панели (например работа функций по генерации карты сайта и rss ленты) зависимы от переменной chpu.
Давайте в пользовательской части блога, в папке moduls, создадим файл с названием returnconfig.php (не забываем следить за кодировкой) и вставим в него вот такую функцию:
function returnconfig()//Функция вывода настроек блога
{
$result_page = mysql_query("SELECT configblog FROM page WHERE id='1'");
$myrow_page = mysql_fetch_array($result_page);
return $myrow_page['configblog'];
}
Функция проще некуда. Мы просто запрашиваем настройки и выводим их.
Теперь в главном пользовательском файле index.php вместо ручного объявления переменных chpu и whitelist вставляем вот такой код:
//НАСТРОЙКИ БЛОГА
include("moduls/returnconfig.php");
$rconfig = returnconfig();
$rconfig = explode("|", $rconfig);
$chpu = $rconfig[0];//настройка включение выключение ЧПУ (1 - вкл; 0 - выкл)
$whitelist = $rconfig[1];//настройка включения выключения белого списка
//НАСТРОЙКИ БЛОГА
У меня данный кусочек кода идет сразу после подключение к базе данных. Объяснять тут в принципе нечего. Результат работы функции returnconfig() делится на массив с помощью функции explode() после чего элементы массива распихиваются по необходимым нам переменным.
Как то вот так привязываются настройки к базе данных
Теперь создадим файл returnconfig.php в папке moduls, в админ панели нашего блога и пропишем в новый файл вот такую функцию:
function returnconfig()//Функция вывода настроек блога
{
$result_page = mysql_query("SELECT configblog FROM page WHERE id='1'");
$myrow_page = mysql_fetch_array($result_page);
$configblog = explode("|",$myrow_page['configblog']);
return $configblog[0];
}
Отличие с предыдущей аналогичной функцией в том, что для админ панели нам необходимо значение лишь одной переменной, переменной chpu.
В главном файле админ панели - index.php в место ручного определение переменной chpu вставляем вот такой код:
//НАСТРОЙКИ БЛОГА
include("moduls/returnconfig.php");
$chpu = returnconfig();//настройка включение выключение ЧПУ (1 - вкл; 0 - выкл)
//НАСТРОЙКИ БЛОГА
Думаю тут все понятно
Первый этап готов, нам удалось привязать переменные содержащие настройки к колонке таблицы page в нашей базе данных.
Теперь настало время, в пункте настроек нашего блога, добавить редактор (те два новых списка) с помощью которого мы сможем менять значение настроек в базе данных, а значит и влиять на работу всей системы в целом...
Для того чтобы приступить к редактированию модуля настроек, нам необходимо вывести два новых код-слова в шаблоне
Открываем админ шаблон configblog.html и приводим шаблон к такому виду:
<form action="index.php?page=configblog" method="post" name="form">
<table width="700px" cellpadding="5" cellspacing="0" border="0" align="center">
<tr>
<td style="border-bottom:1px solid #dcdcdc;font-weight:bold;" valign="top" align="left">Общие настройки</td>
<td style="border-bottom:1px solid #dcdcdc;"></td>
</tr>
<tr>
<td style="border-bottom:1px solid #dcdcdc;" valign="top" align="left">Заголовок блога</td>
<td style="border-bottom:1px solid #dcdcdc;" valign="top" align="right">
<input style="width:200px;font-weight:100;font-size:11px;" name="cfgtitleBLOG" type="text" value="[_title]">
</td>
</tr>
<tr>
<td style="border-bottom:1px solid #dcdcdc;" valign="top" align="left">Описание блога</td>
<td style="border-bottom:1px solid #dcdcdc;" valign="top" align="right">
<input style="width:200px;font-weight:100;font-size:11px;" name="cfgmetaDBLOG" type="text" value="[_metaD]">
</td>
</tr>
<tr>
<td style="border-bottom:1px solid #dcdcdc;" valign="top" align="left">Ключевые слова блога</td>
<td style="border-bottom:1px solid #dcdcdc;" valign="top" align="right">
<input style="width:200px;font-weight:100;font-size:11px;" name="cfgmetaKBLOG" type="text" value="[_metaK]">
</td>
</tr>
<tr>
<td style="border-bottom:1px solid #dcdcdc;font-weight:bold;" valign="top" align="left">Настройки администратора</td>
<td style="border-bottom:1px solid #dcdcdc;"></td>
</tr>
<tr>
<td style="border-bottom:1px solid #dcdcdc;" valign="top" align="left">Логин</td>
<td style="border-bottom:1px solid #dcdcdc;" valign="top" align="right">
<input style="width:200px;font-weight:100;font-size:11px;" name="cfgloginBLOG" type="text" value="[_login]">
</td>
</tr>
<tr>
<td style="border-bottom:1px solid #dcdcdc;" valign="top" align="left">Пароль (новый)</td>
<td style="border-bottom:1px solid #dcdcdc;" valign="top" align="right">
<input style="width:200px;font-weight:100;font-size:11px;" name="cfgpassDBLOG" type="password" value="">
</td>
</tr>
<tr>
<td style="border-bottom:1px solid #dcdcdc;font-weight:bold;" valign="top" align="left">Режимы работы блога</td>
<td style="border-bottom:1px solid #dcdcdc;"></td>
</tr>
<tr>
<td style="border-bottom:1px solid #dcdcdc;" valign="top" align="left">Премодерация комм.</td>
<td style="border-bottom:1px solid #dcdcdc;" valign="top" align="right">
<select style="font-family:Verdana;font-weight:100;font-size:11px;" name="viewwl">
[_cfgvwl]
</select>
</td>
</tr>
<tr>
<td style="border-bottom:1px solid #dcdcdc;" valign="top" align="left">Человеко-Понятный Урл</td>
<td style="border-bottom:1px solid #dcdcdc;" valign="top" align="right">
<select style="font-family:Verdana;font-weight:100;font-size:11px;" name="viewchpu">
[_cfgvchp]
</select>
</td>
</tr>
<tr>
<td valign="top" colspan="2" align="center">
<br/><br/><input type="submit" value="Сохранить настройки">
</td>
</tr>
</table>
</form>
<br/><br/>
Как видите в таблице появилась два новых пункта:
Обратите внимание на атрибуты name для этих списков, а так же на код-слова, все эти значения взяты из головы
Теперь кода шаблон готов можно приступить к редактированию модуля configblog.php. Что нам нужно в данный модуль добавить? Вам необходимо вспомнить как мы реализовывали настройки для постов. Во время реализации у нас на руках появилась функция queCFG(). Данная функция позволяла создавать теги option из вариантов которые мы ей передавали через параметры. Нам будет полезна данная функция поэтому копируем ее в самый низ нашего модуля configblog.php
function queCFG($sel,$queTXT,$queINT)//Функция генерации ответов
{
$wh = count($queTXT);//Узнаем сколько вариантов ответа
for($i=0;$i<$wh;$i++)//запускаем цикл формирования
{
//определяем какой вариант сейчас выбран
if($sel == $queINT[$i])$result .= "<option value='".$queINT[$i]."' selected>".$queTXT[$i]."</option>";//нашли выбранный вариант и приписали selected в тег option
else $result .= "<option value='".$queINT[$i]."'>".$queTXT[$i]."</option>";//остальные варианты будут без атрибута selected
}
return $result;//выводим с генерированный html код
}
Теперь у нас есть инструмент по работе со списками, и нам не составит труда с генерировать, для новых пунктов настроек, html код списков
Теперь пришло время отредактировать функцию configblog(). Имея функцию queCFG() нам не составит труда создать список настроек и вклеить его в шаблон. Вот полный код функции configblog()
function configblog()//Функция вывода списка настроек блога
{
$result_page = mysql_query("SELECT * FROM page WHERE id='1'");//выводим все поля из таблицы page
$myrow_page = mysql_fetch_array($result_page);
$result_user = mysql_query("SELECT login FROM user WHERE id='1'");//вытаскиваем логин админа из базы данных
$myrow_user = mysql_fetch_array($result_user);
$sm_read = file("templates/configblog.html");//...подключаем шаблон
$sm_read = implode("",$sm_read);//функция file() возвращаем массив, поэтому склеиваем его
$configMODULS = explode("|",$myrow_page['configblog']);//Выводим настройки
//-----ЧПУ----
$vchpQUEtxt = array("Отключен","Включен");//Вариант для человека
$vchpQUEint = array(0,1);//Вариант для скрипта
$vchp = queCFG($configMODULS[0],$vchpQUEtxt,$vchpQUEint);//формируем option для пункта "ЧПУ"
//-----ЧПУ----
//-----премодерация комментариев----
$vwlQUEtxt = array("Отключена","Включена");//Вариант для человека
$vwlQUEint = array(0,1);//Вариант для скрипта
$vwl = queCFG($configMODULS[1],$vwlQUEtxt,$vwlQUEint);//формируем option для пункта "премодерация комментариев"
//-----премодерация комментариев----
//Замена код-слов
$sm_read = str_replace("[_cfgvwl]",$vwl,$sm_read);
$sm_read = str_replace("[_cfgvchp]",$vchp,$sm_read);
$sm_read = str_replace("[_title]",$myrow_page['title'],$sm_read);//заголовок
$sm_read = str_replace("[_metaD]",$myrow_page['meta_d'],$sm_read);//описание
$sm_read = str_replace("[_metaK]",$myrow_page['meta_k'],$sm_read);//ключевые слова
$sm_read = str_replace("[_login]",$myrow_user['login'],$sm_read);//логин
return $sm_read;//Выводим с генерированный html код
}
Из нового, у нас тут объявление массива configMODULS. Данный массив будет содержать все настройки из колонки configblog таблицы page.
Далее мы генерируем списки для ЧПУ и для премодерация комментариев. Формируем массивы и отправляем их функции queCFG() в результате получаем необходимый нам html код.
Данный html код вставляется в шаблон вместо код-слов [_cfgvwl] и [_cfgvchp]. Таким образом при запуске модуля настроек через админ панель мы увидим вот такой результат:
Так как мы, в таблицу page, в колонку configblog вставили от такое значение:
0|0
То мы увидим, что оба режима в данный момент отключены. Осталось дело за малым, наладить работу кнопки "Сохранить настройки" именно по этому пришло время отредактировать обработчик
Вот новый код обработчика:
//ОБРАБОТЧИК
//определяем переменные
if(isset($_POST['cfgtitleBLOG']))$cfgtitleBLOG = $_POST['cfgtitleBLOG'];
if(isset($_POST['cfgmetaDBLOG']))$cfgmetaDBLOG = $_POST['cfgmetaDBLOG'];
if(isset($_POST['cfgmetaKBLOG']))$cfgmetaKBLOG = $_POST['cfgmetaKBLOG'];
if(isset($_POST['cfgloginBLOG']))$cfgloginBLOG = $_POST['cfgloginBLOG'];
if(isset($_POST['cfgpassDBLOG']))$cfgpassDBLOG = $_POST['cfgpassDBLOG'];
if(isset($_POST['viewwl']))$viewwl = $_POST['viewwl'];
if(isset($_POST['viewchpu']))$viewchpu = $_POST['viewchpu'];
//обращение к БД
if(isset($viewwl) AND isset($viewchpu) AND isset($cfgloginBLOG) AND $cfgloginBLOG != "" AND isset($cfgpassDBLOG) AND isset($cfgtitleBLOG) AND isset($cfgmetaDBLOG) AND isset($cfgmetaKBLOG))//если переменная форма была заполнена и отправленна
{
//Код сбора значений настроек в строчку типа - 0|0|1|0|0|1
$newCFGpage = $viewchpu."|".$viewwl;
//КОД ОБНОВЛЕНИЕ НАСТРОЕК
$newCONFIGpage = mysql_query ("UPDATE page SET title='$cfgtitleBLOG', meta_d='$cfgmetaDBLOG', meta_k='$cfgmetaKBLOG', configblog='$newCFGpage' WHERE id='1'");//обнавляем настройки
//КОД ОБНОВЛЕНИЕ НАСТРОЕК
//КОД ОБНОВЛЕНИЕ ЛОГИНА И ПАРОЛЯ
if($cfgpassDBLOG != "")//Если поле пароль не пустое
{
$newpass = md5($cfgpassDBLOG);//шифруем новый пароль
$sql = "UPDATE user SET login='$cfgloginBLOG',pass='$newpass' WHERE id='1'";//создаем запрос на обновления логина и пароля
}
else $sql = "UPDATE user SET login='$cfgloginBLOG' WHERE id='1'";//если пароль пустой, то обновляем только логин.
//данный запрос на обновление может показаться лишним (в общем то так оно и есть),
//но лучше обновить нежели выводить из базы данных логин и пытаться
//определить поменялся ли он (сравнивать значение в базе данных
//с значением присланным из формы).
$newCONFIGuser = mysql_query ($sql);//обнавляем поля логина и/или пароля
//КОД ОБНОВЛЕНИЕ ЛОГИНА И ПАРОЛЯ
header("location: index.php?page=configblog");//Переносим пользователя на страницу с списком настроек
exit;
}
//ОБРАБОТЧИК
Первое что я добавил, это определение переменных viewwl и viewchpu. Как вы могли догадаться это именно те значение списка, которые присылаются через форму настроек.
if(isset($_POST['viewwl']))$viewwl = $_POST['viewwl'];
if(isset($_POST['viewchpu']))$viewchpu = $_POST['viewchpu'];
После я вбил проверку существования этих переменных в условия запуска обработчика. Это делать не обязательно, но я все таки сделал
if(isset($viewwl) AND isset($viewchpu) AND isset($cfgloginBLOG) AND $cfgloginBLOG != "" AND isset($cfgpassDBLOG) AND isset($cfgtitleBLOG) AND isset($cfgmetaDBLOG) AND isset($cfgmetaKBLOG))//если переменная форма была заполнена и отправленна
{
...
}
Далее я добавил формирования переменной которая будет записана в колонку configblog нашей таблицы page.
//Код сбора значений настроек в строчку типа - 0|0|1|0|0|1
$newCFGpage = $viewchpu."|".$viewwl;
Ну и на по следок я отредактировал код обновление настроек:
//КОД ОБНОВЛЕНИЕ НАСТРОЕК
$newCONFIGpage = mysql_query ("UPDATE page SET title='$cfgtitleBLOG', meta_d='$cfgmetaDBLOG', meta_k='$cfgmetaKBLOG', configblog='$newCFGpage' WHERE id='1'");//обнавляем настройки
//КОД ОБНОВЛЕНИЕ НАСТРОЕК
Добавил в запрос на обновление новую ячейку и значение для этой ячейки.
Теперь при нажатие на кнопку "Сохранить настройки" вы заносите в ячейку configblog таблицы page новое значение. Данное значение меняет главные переменные что в последствие приводит к смене режима работы движка.
В заключение хочу привести пару скриншотов которые покажут результат смены режима ЧПУ с выкл на вкл.
Вот так выглядят ссылки при выключенном ЧПУ:
А вот так выглядит блог если включить режим ЧПУ:
Удобно меня режим блога в один щелчок мыши, не правда ли?
Всего Вам наилучшего! На сегодня все!
Исходник |
__________
P.S.: Вы хотите работать в интернете, но не знаете как в нем можно заработать? Представляю Вам статью - работа в интернете без вложений. Данный материал поможет определится, под силам ли Вам такая работа. И если да, то на данном сайте Вы найдете исчерпывающую информацию о популярных методах заработка.