Третья статья из цикла "Пишем скрипт Каталог товаров".
Сегодня мы научим Back_Office работать с категориями - создавать, редактировать и удалять.
Мы сделаем скрипт для управления категориями нашего каталога с неограниченной вложенностью.
Начнем с создания таблицы в базе данных:
CREATE TABLE 'category' (
'cat_id' int(11) NOT NULL auto_increment,
'root_cat' int(11) NOT NULL default '0',
'name_cat' varchar(64) NOT NULL default '',
'descr' varchar(255) NOT NULL default '',
PRIMARY KEY ('cat_id')
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;
Поясню назначение полей:
cat_id - ну это я думаю вам понятно - номер категории
root_cat - номер категории-родителя
name_cat - название
descr - описание
Теперь в наш Бэк_Офис нужно добавить ссылку, для управления категориями. Для этого открываем файл
sadmin.php, ищем строку:
echo "<td><a href=\"http://".$_SERVER['HTTP_HOST']."/administrator/\">На главную страницу Админ раздела</a></td>";
и
после неё добавляем:
echo "<td><a href=\"http://".$_SERVER['HTTP_HOST']."/admin/cat/\">Каталог</a></td>";
Теперь необходимо прописать правила для ссылок управления категориями. В конец файла
.htaccess добавляем следующие строки:
### работа с категориями каталога ###
RewriteRule ^admin/cat/?$ sadmin.php?action=cat
RewriteRule ^admin/cat/([0-9]+)/edit_category/?$ sadmin.php?action=cat&op=edit_category&id_cat=$1
RewriteRule ^admin/cat/([0-9]+)/drop_category/?$ sadmin.php?action=cat&op=drop_category&id_cat=$1
RewriteRule ^admin/cat/add_category/?$ sadmin.php?action=cat&op=add_category
После этого создадим директорию для файлов управления скриптом и назовем её стандартно -
admin.
Теперь создаем файл с названием
scat.php со следующим содержанием:
<?
############### УДАЛЕНИЕ КАТЕГОРИЙ ###############
if(@$_GET['op'] == "drop_category")
{
//удаляем категорию
$delete_category = mysql_query("DELETE FROM category
WHERE cat_id = ". $_GET['id_cat']);
//удаляем подкатегории
$delete_subcategory_in_category = mysql_query("DELETE FROM category
WHERE root_cat = ". $_GET['id_cat']);
//если успешно, то...
if ($delete_category) echo "<center><strong>
Категория успешно удалена</strong></center>";
else echo "<center><strong>
Не удалось удалить категорию!</strong></center>";
}
############### КОНЕЦ БЛОКА УДАЛЕНИЯ КАТЕГОРИЙ ###############
############### РЕДАКТИРОВАНИЕ КАТЕГОРИЙ ###############
elseif (@$_GET['op'] == "edit_category")
{
// если существует название
if(@$_POST['name_cat'])
{
// преобразовываем зарезервированные в HTML символы
$name_cat = htmlspecialchars($_POST['name_cat']);
$descr = htmlspecialchars($_POST['descr']);
// экранируем кавычки
if (!get_magic_quotes_gpc())
{
$name_cat = mysql_escape_string($name_cat);
$descr = mysql_escape_string($descr);
}
else
{
$name_cat = str_replace("'","'",$name_cat);
$descr = str_replace("'","'",$descr);
}
// обновляем БД
$query = mysql_query("
UPDATE category
SET root_cat = '".$_POST['id_category']."',
name_cat = '".$name_cat."',
descr = '".$descr."'
WHERE cat_id = '".$_GET['id_cat']."'
");
// если успешно, то...
if ($query) echo "<center><strong>
Обновление данных успешно завершено</strong></center>";
else echo "<center><strong>
Не удалось обновить данные</strong></center>";
}
// иначе выводим форму с данными для редактирования
else
{
// достаем данные из БД
$query = mysql_query("SELECT * FROM category
WHERE cat_id = '".$_GET['id_cat']."'");
// лепим ассоциативный массив
$line = mysql_fetch_assoc($query);
echo "<table cellspacing=2 cellpadding=2 border=0 width=60%><tr><td>
<FORM METHOD=POST
ACTION=\"http://".$_SERVER['HTTP_HOST']."/admin/cat/$id_cat/edit_category/\">
Название:<br /><br />
<input type=text size=130 name=name_cat value=\"".$line['name_cat']."\">
<br /><br />
Описание:
<input type=text size=120 name=descr value=\"".$line['descr']."\">
<br /><br />
Выберите категорию:<br /><br />
<select name=id_category>";
echo "<option value=0>-------- Корневая директория -----
</option>";
// ф-ия обхода дерева категорий
function subcategory($id, $sub)
{
$categories = mysql_query("SELECT * FROM category
WHERE root_cat = $id");
while($category = mysql_fetch_array($categories))
{
for($i = 0; $i < $sub; $i++) echo "";
echo "<option value=".$category['cat_id']."
".( $category['cat_id'] == @$line['root_cat'] ? "
selected " : "" ).">
".$category['name_cat']." ";
subcategory($category['cat_id'], $sub+1);
}
}
$categories = mysql_query("SELECT * FROM category
WHERE root_cat = 0");
while($category = mysql_fetch_array($categories))
{
$sub = 1;
echo "<option value=".$category['cat_id']."
".( $category['cat_id'] == @$line['root_cat'] ? "
selected " : "" ).">
".$category['name_cat']." ";
subcategory($category['cat_id'], $sub);
}
echo "</select><br /><br />
<input type=submit value=Изменить></form></td></tr></table>";
}
}
############### КОНЕЦ БЛОКА РЕДАКТИРОВАНИЯ КАТЕГОРИЙ ###############
############### СОЗДАНИЕ КАТЕГОРИЙ ###############
elseif (@$_GET['op'] == "add_category")
{
// если существует название
if(@$_POST['name_cat'])
{
// преобразовываем зарезервированные в HTML символы
$name_cat = htmlspecialchars($_POST['name_cat']);
$descr = htmlspecialchars($_POST['descr']);
// экранируем кавычки
if (!get_magic_quotes_gpc())
{
$name_cat = mysql_escape_string($name_cat);
$descr = mysql_escape_string($descr);
}
else
{
$name_cat = str_replace("'","'",$name_cat);
$descr = str_replace("'","'",$descr);
}
// вставляем данные в БД
$query = mysql_query("
INSERT category
SET root_cat = '".$_POST['id_category']."',
name_cat = '".$name_cat."',
descr = '".$descr."'
");
// если удачно, то...
if($query) echo "<center><strong>
Категория добавлена</strong></center>";
// если не удачно, то
else echo "<center><strong>
Ошибка при добавлении категории</strong></center>";
}
// иначе выводим форму для заполнения
else
{
echo "<table cellspacing=2 cellpadding=2 border=0 width=70%>
<tr><td>
<FORM METHOD=POST
ACTION=\"http://".$_SERVER['HTTP_HOST']."/admin/cat/add_category/\">
Название: <input type=text size=120 name=name_cat><br /><br />
Описание: <input type=text size=120 name=descr><br /><br />
Выберите категорию: <select name=id_category>";
// ф-ия обхода дерева категорий
echo "<option value=0>----------- Корневая директория -----------
</option>";
function subcategory($id, $sub)
{
$categories = mysql_query("SELECT * FROM category
WHERE root_cat = $id");
while($category = mysql_fetch_array($categories))
{
for($i = 0; $i < $sub; $i++) echo "";
echo "<option value=\"".$category['cat_id']."\">
".$category['name_cat']." ";
subcategory($category['cat_id'], $sub+1);
}
}
$categories = mysql_query("SELECT * FROM category
WHERE root_cat = 0");
while($category = mysql_fetch_array($categories))
{
$sub = 1;
echo "<option value=\"".$category['cat_id']."\">
".$category['name_cat']."<br>";
subcategory($category['cat_id'], $sub);
}
echo "</select><br /><br />
<input type=submit value=Добавить категорию>
</form></td></tr></table>";
}
}
############### КОНЕЦ БЛОКА СОЗДАНИЯ КАТЕГОРИЙ ###############
############### ВЫВОД КАТЕГОРИЙ ###############
else
{
echo "<br /><br /><br />";
echo " <table border=0 width=90% align=center cellspacing=5 cellpadding=0>";
// ф-ия обхода дерева категорий
function subcategory($id, $sub)
{
$categories = mysql_query("SELECT * FROM category
WHERE root_cat = $id");
while($category = mysql_fetch_array($categories))
{
echo "<tr bgcolor=#EEEEEE><td width=100%>";
for($i = 0; $i < $sub; $i++) echo " ";
echo "<strong> -
".$category['name_cat']."</strong></td><td>
<a href=\"http://".$_SERVER['HTTP_HOST']."/admin/cat/".$category['cat_id']."/\">
Товары в данной категории</a></td><td>
<a href=\"http://".$_SERVER['HTTP_HOST']."/admin/cat/".$category['cat_id']."/edit_category/\">
[Редактировать] </a></td>
<td><a href=\"http://".$_SERVER['HTTP_HOST']."/admin/cat/".$category['cat_id']."/drop_category/\">
[Удалить] </a></td></tr>";
subcategory($category['cat_id'], $sub+1);
}
}
$categories = mysql_query("SELECT * FROM category
WHERE root_cat = 0");
while($category = mysql_fetch_array($categories))
{
$sub = 1;
echo "<tr bgcolor=#EFEFEF><td width=100%>
<strong>".$category['name_cat']."</strong></td><td>
<a href=\"http://".$_SERVER['HTTP_HOST']."/admin/cat/".$category['cat_id']."/\">
Товары в данной категории</a></td><td>
<a href=\"http://".$_SERVER['HTTP_HOST']."/admin/cat/".$category['cat_id']."/edit_category/\">
[Редактировать] </a></td><td>
<a href=\"http://".$_SERVER['HTTP_HOST']."/admin/cat/".$category['cat_id']."/drop_category/\">
[Удалить] </a></td></tr>";
subcategory($category['cat_id'], $sub);
}
echo "</table><br /><br /><br /><br /><center>
<a href=\"http://".$_SERVER['HTTP_HOST']."/admin/cat/add_category/\">
Добавить категорию </a> |
<a href=\"http://".$_SERVER['HTTP_HOST']."/admin/cat/add_item/\">
Добавить наименование товара </a></center>";
}
############### КОНЕЦ ВЫВОДА КАТЕГОРИЙ ###############
?>
Теперь Вы можете протестировать работу с категориями.
Следующая статья расскажет нам, как добавить товар в нашу базу данных и как с ним работать.
Кстати код, который получится в итоге этого цикла статей лёг в основу скрипта JOKER_vitrina 1.0 FREE, описание которого и ссылки для скачивания Вы найдете на странице
http://allpublication.ru/blog/p15-novyy_besplatnyy_PHP_skript_katalog_tovarov_JOKER_vitrina_1_0_FREE.html
Warning: Unknown: Your script possibly relies on a session side-effect which existed until PHP 4.2.3. Please be advised that the session extension does not consider global variables as a source of data, unless register_globals is enabled. You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off, respectively in Unknown on line 0
Не подскажете в чем дело?