Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.79/19: Рейтинг темы: голосов - 19, средняя оценка - 4.79
0 / 0 / 0
Регистрация: 06.02.2010
Сообщений: 110
1

Дерево категорий и вывод статей

11.09.2015, 14:16. Просмотров 3436. Ответов 88
Метки нет (Все метки)

Ребята, здравствуйте! Очень нужна помощь!!!
Пытаюсь сделать дерево категорий.
есть 2 таблицы categories_colloring с id, id_parent, name и таблица articles_colloring c полями id,title,url_img,parent_id,date,view.

Почитав и порывшись в инете появился такой код. Но не могу понять, как выводить на отдельных страницах эти данные. Допустим на одной странице index.php - все категории с parent_id=0

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 <?
 $result2 = mysql_query("SELECT * FROM categories_colloring where parent_id=0",$db);
if (!$result2)
{
echo "<p><strong>Код ошибки:</strong></p>";
exit(mysql_error());
}
if (mysql_num_rows($result2) > 0)
{
$myrow2 = mysql_fetch_array($result2);
do 
{
printf ("<p class='point'>
<a class='nav_link' href='view_cat.php?cat=%s'>%s</a></p>",$myrow2["id"],$myrow2["name"]);
}
while ($myrow2 = mysql_fetch_array($result2));
}
else
{
echo "<p>Информация по запросу не может быть извлечена в таблице нет записей.</p>";
exit();
}
 ?>
далее в view_cat.php я пытаюсь вывести подкатегории выбранной категории, но не получается(что уже говорить про конкретный вывод самой статьи со страницы подкатегории).

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
$result = mysql_query ("SELECT `id`, `parent_id`, `name` FROM `categories_colloring`"); 
 
$cats = array();
  while($cat =  mysql_fetch_assoc($result))
        $cats[$cat['parent_id']][] =  $cat;
 
function create_tree ($cats,$parent_id){
  if(is_array($cats) and  isset($cats[$parent_id])){
    $tree = '<ul>';
    foreach($cats[$parent_id] as $cat){
       $tree .= "<li><a href='colloring.php?catid=".$cat['id']."'>".$cat['name']."</a>";
       $tree .=  create_tree ($cats,$cat['id']);
       $tree .= '</li>';         
    }
    $tree .= '</ul>';
  } 
  else return null;          
return $tree;        
} 
 
echo create_tree ($cats, 0);
?>
очень прошу помочь!

Добавлено через 26 минут
сейчас даже на странице view_cat.php?cat=1 (при переходе с colloring_index.php) выдает не только категорию 1, а и все остальные, а также подкатегории(((
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.09.2015, 14:16
Ответы с готовыми решениями:

Вывод категорий/подкатегорий статей и создание url
Привет. Существует таблица &quot;article_category&quot;, в ней следующая структура: id | name | slug |...

Выборка нескольких статей из всех категорий
Добрый день, уважаемые форумчане! Задача у меян следующая: вывести на одной странице по пять...

Подгрузка всех категорий из статей
Вот такая модель у меня: public class Article { public int Id { get; set; } ...

Ошибка при создании категорий для статей.
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in...

88
2172 / 2102 / 509
Регистрация: 27.05.2011
Сообщений: 7,230
11.09.2015, 15:09 2
Цитата Сообщение от hitball Посмотреть сообщение
подкатегории выбранной категории
Тогда зачем вы все достаете?
PHP
1
$result = mysql_query ("SELECT `id`, `name` FROM `categories_colloring` where  `parent_id` = '". $cat_id ."'");
1
0 / 0 / 0
Регистрация: 06.02.2010
Сообщений: 110
11.09.2015, 15:49  [ТС] 3
ко мне только на ты!!!
я туда добавила? сейчас просто белый лист(
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php 
$result = mysql_query ("SELECT `id`, `name` FROM `categories_colloring` where  `parent_id` = '". $cat_id ."'");
 
$cats = array();
  while($cat =  mysql_fetch_assoc($result))
        $cats[$cat['parent_id']][] =  $cat;
 
function create_tree ($cats,$parent_id){
  if(is_array($cats) and  isset($cats[$parent_id])){
    $tree = '<ul>';
    foreach($cats[$parent_id] as $cat){
       $tree .= "<li><a href='colloring.php?catid=".$cat['id']."'>".$cat['name']."</a>";
       $tree .=  create_tree ($cats,$cat['id']);
       $tree .= '</li>';         
    }
    $tree .= '</ul>';
  } 
  else return null;          
return $tree;        
} 
 
echo create_tree ($cats, 0);
?>
0
2172 / 2102 / 509
Регистрация: 27.05.2011
Сообщений: 7,230
11.09.2015, 15:56 4
Ну $cat_id еще создать нужно. Если у вас линк colloring.php?catid= , то следовательно
PHP
1
$cat_id = isset( $_GET['catid'] ) ? intval( $_GET['catid'] ) : 0;
Добавлено через 1 минуту
P.S. и parent_id мы уже не достаем, мы его и так знаем $cat_id
0
0 / 0 / 0
Регистрация: 06.02.2010
Сообщений: 110
11.09.2015, 16:01  [ТС] 5
Это по этому кусочку,да? ура!!! я уже что-то понимаю)))
PHP
1
`parent_id` = '". $cat_id ."'");
а вот эту строку
PHP
1
$cat_id = isset( $_GET['catid'] ) ? intval( $_GET['catid'] ) : 0;
нужно добавлять на линию 3? у меня все равно белый лист тогда(
0
2172 / 2102 / 509
Регистрация: 27.05.2011
Сообщений: 7,230
11.09.2015, 16:16 6
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php 
 
$cat_id = isset( $_GET['catid'] ) ? intval( $_GET['catid'] ) : 0;
$result = mysql_query ("SELECT `id`, `name` FROM `categories_colloring` where  `parent_id` = '". $cat_id ."'");
 
$cats = array();
while($cat =  mysql_fetch_assoc($result)){
        $cats[] =  $cat;
}
?>
<? if (!empty($cats) ) : ?>
<ul>
    <? foreach( $cats as $cat ) : ?>
        <li>
            <a href='colloring.php?catid="<?= $cat['id'] ?>"'><?= $cat['name'] ?></a>;
        </li>
    <? endforeach; ?>
</ul>
<? endif; ?>
1
0 / 0 / 0
Регистрация: 06.02.2010
Сообщений: 110
11.09.2015, 21:35  [ТС] 7
что-то никак у меня не получается(
сейчас выводится просто список категорий.
при нажатии на каждой выводятся все статьи из бд. а я мечтаю, чтобы после списка категории (по щелчку на них) выводились подкатегории конкретной категории, а уже по щелчку на ссылку подкатегории выводились статьи из этой подкатегории. возможно нужно что-то менять еще и на странице вывода подкатегорий?

Добавлено через 2 часа 26 минут
crautcher, удалила двойные кавычки здесь и вроде бы вышло!!!!!
PHP
1
"<?= $cat['id'] ?>"
сейчас еще подобавляю данных в бд в разные таблицы, чтобы проверить!
спасибо вам огромное за отличную поддержку на форуме!!!

Добавлено через 4 минуты
рано я обрадовалась, получилось вывести сначала категории, потом подкатегории, а вот статьи относящиеся к этой подкатегории не выводятся, выдает все статьи из бд по всем категриям. возможно я что-то в бд неправильно сделала в частности в таблице со статьями articles_colloring. здесь необходимо ставить для связки с таблицей категории parent_id верно?

Добавлено через 20 минут
думаю ошибка все таки на этой странице collorig.php, на которую выводятся статья из подкатегории. ведь здесь ни разу не указан parent_id
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
<?php 
include ("bd.php");
 if (isset($_GET['cat'])) {$cat = $_GET['cat'];}
 if (!isset($cat)) {$cat = 1;}
 
 $result = mysql_query ("SELECT * FROM categories_colloring WHERE id='$cat'",$db);
 
if (!$result) 
{
echo "<p><strong>Код ошибки:</strong></p>";
exit (mysql_error());
}
if (mysql_num_rows($result) > 0)
{
$myrow = mysql_fetch_array($result);
}
else
{
echo "<p>Информация по запросу не может быть извлечена. В таблице нет записей.</p>";
exit();
} ?>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
</head>
<body>
 
<ul>   
<? 
$result77 = mysql_query ("SELECT str FROM options",$db);
$myrow77 = mysql_fetch_array ($result77);
$num  = isset($myrow77["str"])  ? $myrow77["str"]  : 10;
$near = isset($myrow77["near"]) ? $myrow77["near"] :  3;
@$page = $_GET['page'];
$result00 = mysql_query("SELECT COUNT(*) FROM articles_colloring");
$temp = mysql_fetch_array($result00);
$post = $temp[0];
$total = (($post - 1)/$num) + 1;
$total = intval($total);
$page = intval($page);
if(empty($page) or $page < 0) $page = 1;
  if($page > $total) $page = $total;
$pageline = '<strong>Страницы:&nbsp;&nbsp;';
$pp = $page-1;
$pn = $page+1;
if($page - $near > 1) $pageline .= " <a href= $srcfile?cat=$cat&page=1>1</a> ...";
for($i = $page-$near; $i <= $page+$near; $i++)
if($i >=1 && $i <= $total)
{
 if($i == $page)   $pageline .= "<b>$i</b>";
// elseif($i == $pp) $pageline .= " <a href= $srcfile?cat=$cat&page=$i > << </a> ";
// elseif($i == $pn) $pageline .= " <a href= $srcfile?cat=$cat&page=$i > >> </a> ";
 else  $pageline .= " <a href= $srcfile?cat=$cat&page=$i > $i </a> ";
}
if($page + $near < $total) $pageline .= "... <a href= $srcfile?cat=$cat&page=$total >$total</a> ";
$pageline .= '</strong>';
$pageline = $total ? "<div class=\"pstrnav\">$pageline</div>" : "";
echo $pageline;
$start = $page * $num - $num;
     $result = mysql_query("
     SELECT
         id,title,date,
         DATE_FORMAT(date, '%d.%m.%Y') AS eurodate,url_img
     FROM articles_colloring
     
     ORDER BY date DESC
     LIMIT " . ((int)$start) . " , ". ((int)$num) ."
  ",$db);
if (!$result)
{
echo "<p><strong>Код ошибки:</strong></p>";
exit (mysql_error());
}
while($myrow = mysql_fetch_array($result))
{
 
printf ("
<li>
 
<div class='read_li2'>
 
<a class='h4' href='view_colloring.php?id=%s' target='_blank'>
 
<div class='read_img2'><img class='mini_lenta2' align='left' src='../%s'></div></a>
<br><br><br><br><br><br><br><br><br><br>
 
<a class='h4' href='view_colloring.php?id=%s' target='_blank'>
<p style='text-align:center;'>%s</p>
</a>
</div>
</li>
", $myrow["id"], $myrow["url_img"], $myrow["id"],$myrow["title"] );
}
 
?>
 
</div>
</div>
</body>
</html>
0
1661 / 1330 / 615
Регистрация: 17.11.2012
Сообщений: 5,903
12.09.2015, 20:29 8
Цитата Сообщение от hitball Посмотреть сообщение
таблицей категории parent_id верно?
в таблице со статьями нужен столбец типа id_cat(id категории)
0
0 / 0 / 0
Регистрация: 06.02.2010
Сообщений: 110
12.09.2015, 22:48  [ТС] 9
у меня в таблице со статьями есть столбец дубликат из таблицы категорий parent_id то есть он аналогичный в обоих таблицах.
0
1661 / 1330 / 615
Регистрация: 17.11.2012
Сообщений: 5,903
13.09.2015, 18:46 10
parent_id в таблице категорий, содержит id родительской категории. а в таблице со статьями нужен id категории(id в таблице категорий)
1
0 / 0 / 0
Регистрация: 06.02.2010
Сообщений: 110
13.09.2015, 20:24  [ТС] 11
fanatikus, сейчас попробую!!!!

Добавлено через 1 час 33 минуты
поменяла значения в таблице со статьями по id из таблицы категорий и дала этому столбцу новое название. при выводе ничего не изменилось. видно что-таки с выводом неправильно на самой странице. код я выше на 4 сообщения приводила
0
1661 / 1330 / 615
Регистрация: 17.11.2012
Сообщений: 5,903
13.09.2015, 21:11 12
Цитата Сообщение от hitball Посмотреть сообщение
PHP
1
$result = mysql_query(" SELECT id,title,date, DATE_FORMAT(date, '%d.%m.%Y') AS eurodate,url_img FROM articles_colloring ORDER BY date DESC LIMIT " . ((int)$start) . " , ". ((int)$num) ." ",$db);
конечно выводятся все статьи. нужно добавить условие where cat_id(или как там у вас называется столбец с id категории) ='".$cat.'"
0
0 / 0 / 0
Регистрация: 06.02.2010
Сообщений: 110
13.09.2015, 21:43  [ТС] 13
если вот так, то не помогает(((
PHP
1
2
3
4
5
6
7
    SELECT
         id,title,date,
         DATE_FORMAT(date, '%d.%m.%Y') AS eurodate,url_img
     FROM articles_colloring 
     where `cat_id`=`".$cat."` 
     ORDER BY date DESC
     LIMIT " . ((int)$start) . " , ". ((int)$num) ."
0
1661 / 1330 / 615
Регистрация: 17.11.2012
Сообщений: 5,903
13.09.2015, 21:54 14
Цитата Сообщение от hitball Посмотреть сообщение
то не помогает
что, все равно все статьи выводит?
0
0 / 0 / 0
Регистрация: 06.02.2010
Сообщений: 110
14.09.2015, 10:51  [ТС] 15
да!!! где-то я накрутила(

Добавлено через 12 часов 29 минут
еще раз все перепроверила и базу тоже.
при переходе на статью с подкатегории путь создается правильный ...colloring.php?catid=6
но выводятся все статьи . сейчас страница вывода colloring.php выглядит так. вроде бы ведь все правильно?
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
<?php 
include ("bd.php");
 if (isset($_GET['cat'])) {$cat = $_GET['cat'];}
 if (!isset($cat)) {$cat = 1;}
 $result = mysql_query ("SELECT * FROM categories_colloring WHERE id='$cat'",$db);
if (!$result) 
{
echo "<p><strong>Код ошибки:</strong></p>";
exit (mysql_error());
}
if (mysql_num_rows($result) > 0)
{
$myrow = mysql_fetch_array($result);
}
else
{
echo "<p>Информация по запросу не может быть извлечена. В таблице нет записей.</p>";
exit();
} ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
</head>
<body>
<ul>   
<? 
$result77 = mysql_query ("SELECT str FROM options",$db);
$myrow77 = mysql_fetch_array ($result77);
$num  = isset($myrow77["str"])  ? $myrow77["str"]  : 10;
$near = isset($myrow77["near"]) ? $myrow77["near"] :  3;
@$page = $_GET['page'];
$result00 = mysql_query("SELECT COUNT(*) FROM articles_colloring");
$temp = mysql_fetch_array($result00);
$post = $temp[0];
$total = (($post - 1)/$num) + 1;
$total = intval($total);
$page = intval($page);
if(empty($page) or $page < 0) $page = 1;
  if($page > $total) $page = $total;
$pageline = '<strong>Страницы:&nbsp;&nbsp;';
$pp = $page-1;
$pn = $page+1;
if($page - $near > 1) $pageline .= " <a href= $srcfile?cat=$cat&page=1>1</a> ...";
for($i = $page-$near; $i <= $page+$near; $i++)
if($i >=1 && $i <= $total)
{
 if($i == $page)   $pageline .= "<b>$i</b>";
// elseif($i == $pp) $pageline .= " <a href= $srcfile?cat=$cat&page=$i > << </a> ";
// elseif($i == $pn) $pageline .= " <a href= $srcfile?cat=$cat&page=$i > >> </a> ";
 else  $pageline .= " <a href= $srcfile?cat=$cat&page=$i > $i </a> ";
}
if($page + $near < $total) $pageline .= "... <a href= $srcfile?cat=$cat&page=$total >$total</a> ";
$pageline .= '</strong>';
$pageline = $total ? "<div class=\"pstrnav\">$pageline</div>" : "";
echo $pageline;
$start = $page * $num - $num;
     $result = mysql_query("
     SELECT
         id,title,cat_id,url_img,date,
         DATE_FORMAT(date, '%d.%m.%Y') AS eurodate,
     FROM `articles_colloring` 
     where `cat_id` = '". $cat ."'
     ORDER BY date DESC
     LIMIT " . ((int)$start) . " , ". ((int)$num) ." 
     
  ",$db);
if (!$result)
{
echo "<p><strong>Код ошибки:</strong></p>";
exit (mysql_error());
}
while($myrow = mysql_fetch_array($result))
{
 
printf ("
<li>
 
<div class='read_li2'>
 
<a class='h4' href='view_colloring.php?id=%s' target='_blank'>
 
<div class='read_img2'><img class='mini_lenta2' align='left' src='../%s'></div></a>
<br><br><br><br><br><br><br><br><br><br>
 
<a class='h4' href='view_colloring.php?id=%s' target='_blank'>
<p style='text-align:center;'>%s</p>
</a>
</div>
</li>
", $myrow["id"], $myrow["url_img"], $myrow["id"],$myrow["title"] );
}
 
?>
 
 
 
 
</div>
</div>
</body>
</html>
0
1661 / 1330 / 615
Регистрация: 17.11.2012
Сообщений: 5,903
14.09.2015, 14:26 16
Цитата Сообщение от hitball Посмотреть сообщение
при переходе на статью с подкатегории путь создается правильный ...colloring.php?catid=6
и в скрипте
PHP
1
if (isset($_GET['cat'])) {$cat = $_GET['cat'];}
catid != cat
0
0 / 0 / 0
Регистрация: 06.02.2010
Сообщений: 110
14.09.2015, 14:41  [ТС] 17
fanatikus, как именно здесь это вписать нужно? ведь этот кусок кода относится к таблице categories_colloring и в ней строки cat_id не существует
0
1661 / 1330 / 615
Регистрация: 17.11.2012
Сообщений: 5,903
14.09.2015, 15:00 18
у тебя ссылка на страницу со статьями категории как выглядит? так -colloring.php?catid=6?
0
0 / 0 / 0
Регистрация: 06.02.2010
Сообщений: 110
14.09.2015, 15:00  [ТС] 19
верно
0
2172 / 2102 / 509
Регистрация: 27.05.2011
Сообщений: 7,230
14.09.2015, 15:01 20
В адресной строке у вас cat или catid? Так как вы смотрите на
PHP
1
$_GET['cat']
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.09.2015, 15:01

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Дерево категорий
Добрый день. Структура таблицы id| parent_id| name 1| 0| раздел1 2| 1| ...

Конечные ID из дерево категорий
Добрый день. Такая небольшая проблема возникла. У меня есть многоуровневая дерево...

Иерархичное дерево категорий
Дано иерархичное дерево категорий. Нужно зделать функцию которая будет выводить дерево в таком...

Иерархическое дерево категорий
Дано иерархичное дерево категорий. Нужно зделать функцию которая будет выводить дерево в таком...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.