|
|
|
| http://www.ntv.ru/corp/about/
Имею в виду логику работы.
Чтобы пункты страниц брались из БД.
Буду очень признателен за ответ!
Борис. | |
|
|
|
|
|
|
|
для: Boris
(25.01.2007 в 15:25)
| | ???
Неужели нет ни у кого?! | |
|
|
|
|
|
|
|
для: Boris
(25.01.2007 в 15:25)
| | В БД забиваются URL'ы и выдираются оттуда обычным SELECT запросом. | |
|
|
|
|
|
|
|
для: minas
(26.01.2007 в 08:57)
| | :) это я знаю. Но логика какая? Какие поля должна иметь таблица этой БД? | |
|
|
|
|
|
|
|
для: Boris
(26.01.2007 в 09:12)
| | чО всем пофиг на мой вопрос? | |
|
|
|
|
|
|
|
для: Boris
(26.01.2007 в 13:02)
| | Может его просто никто не понимает? | |
|
|
|
|
|
|
|
для: Loki
(26.01.2007 в 13:31)
| | :)
Попробую по-другому объснить, только скажите понятно я изложил или нет.
Хочу меню чтобы оно работало следующим образом:
1). Выводятся главные пункты в столбик:
О компании
Производство
Товары
Контакты
|
2). Я щелкаю например на "Товары", если в этой категории есть зависимые пункты, то они выводятся меджу "Товары" и "Контакты":
О компании
Производство
Товары
-пылесосы
-унитазы
Контакты
|
3). Если я щелкаю на "пылесосы", то, при наличии соответствующих пунктов, для которых "пылесосы" - пункт-родитель, выводятся они:
О компании
Производство
Товары
-пылесосы
-комета
-тайфун
-унитазы
Контакты
|
И так далее...
4). Щелкаю снова на "Товары", все сворачивается и выглядит как в 2).
Меню формируется средствами PHP из базы Mysql.
Админ сайта должен иметь возможность добавлять пункты меню, заполняя форму с полями:
"Новый пункт" и "Страница-родитель"
Страница-родитель выбирается из раскрывающегося списка, ну как тут на форуме происходит выбор форума.
Вопросы
1). Сколько и какие должны быть поля у таблицы для хранения этой информации в БД?
(ну типа: id_page, name, id_parent_page ....)
Может одной таблицы мало будет?
2). Какай алгоритм скрипта, который все это меню выводит
(ну типа:
- делаем выборку id_page, где id_parent_page равно 0.
-выводим name в цикле wile
-....)
Это же не уникальный случай, можек кто подобное делал? :-|
Ну не могу я сам догадатья уже третий день!
Простите за мои эмоции. | |
|
|
|
|
|
|
|
для: Boris
(25.01.2007 в 15:25)
| | Просто. Категории и под категории.
Допустим основная категория имеет какойто id и parent = 0, а подкатегория parent = 1 где 1 id основной категории или чейто подкатегории.
вот и вся логика. | |
|
|
|
|
|
|
|
для: vbps
(26.01.2007 в 14:29)
| | Я так и делаю, а у меня получается, что "дети" выводятся везде!
Вот функция, а результат во вложении.
<? include ('config.php');
function tree($ids)
{
$query = "SELECT * FROM menu WHERE id_parent_page = ".$ids." ORDER BY id_page ASC";
$result = mysql_query($query);
echo "<ul>";
//Цикл, пока не исчерпается массив
while ( $print = mysql_fetch_array($result))
{
//Выбираем сраницу с id_page,
//выводим ее ссылку
$ide = $print['id_page'];
echo "<li>";
echo "<a href=?id_page=".$ide.">".$print['name']."</a>";
// Если установлено значение id_page...
if(isset($_GET['id_page']))
{
//echo $_GET['id_page'];
$a = $_GET['id_page'];
$query2 = "SELECT * FROM menu WHERE id_parent_page = ".$a." ORDER BY id_page ASC";
$result2 = mysql_query($query2);
while ( $print2 = mysql_fetch_array($result2))
{
$b = $print2['id_page'];
echo "<li>";
echo "<a href=?id_page=".$b.">".$print2['name']."</a>";
}
}
echo "</ul>";
}
}
tree(0, 0);
?>
|
| |
|
|
|
|
|
|
|
для: Boris
(26.01.2007 в 14:56)
| | Мне уже пора, но завтра я обязательно продолжу!
Вы спрашивайте, я просто столько листов исписал, даже не знаю как еще обьяснить что я делал и что пулучаось. | |
|
|
|
|
|
|
|
для: Boris
(26.01.2007 в 14:56)
| | Может я туплю, но зачем:
WHERE id_parent_page = ".$ids."
|
переходя в подкатегорию не будет видно основных категорий.
что бы видеть только основные
затем уже перебираеш выбраные подкатегории как по коду ниже. | |
|
|
|
|
|
|
|
для: vbps
(26.01.2007 в 16:05)
| | Может тебе подойдет такое решение.
Структура таблицы:
группа id_page = 0
подгруппа id_page = id_article(группы)
CREATE TABLE `names` (
`id_article` int(10) unsigned NOT NULL auto_increment,
`name` tinytext NOT NULL,
`pos` mediumint(9) NOT NULL default '0',
`hide` enum('show','hide') NOT NULL default 'show',
`id_page` tinyint(3) unsigned NOT NULL default '0',
PRIMARY KEY (`id_article`),
KEY `id_page` (`id_page`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
Функции меню:
function categoryIndexInArray(&$list, $id)
{
$j = 0;
while ($j<count($list) && $list[$j]['id_article']!=$id) $j++;
if ($j == count($list)) return 0;
else return $j;
}
function calculatePath(&$categories, $id_page)
{
$path = array();
$i = $id_page;
if ($i) do
{
$c = categoryIndexInArray($categories,$i);
$path[] = $categories[$c]['id_article'];
$i = $categories[$c]['id_page'];
} while ($i);
$path[]=0;
$path = array_reverse($path);
return $path;
}
function processCategories(&$list, $level, $path, $sel,$out)
{
for ($i=0; $i<count($list); $i++)
{
if ($list[$i]['id_page'] == $path[$level])
{
$out .= "<tr><td>";
for ($j=0; $j<$level; $j++) $class= ' style="padding-left:5px; color:#9c3c27">';
if ($list[$i]['id_article'] == $sel)
{
if(!isset($class)) $class= 'style="padding-left:0px; color:#9c3c27">» ';
$out .= "<p $class<nobr>".$list[$i]['name']."</nobr></p>";
$out .= '</td></tr>';
}
else {
$out .="";
if ($level) $out .="<p style='padding-left:5px;'><a href='http://".$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']."?id_article=".$list[$i]['id_article']."' class='lightstandard'>".$list[$i]['name']."</a></p></td></tr>";
else $out .= "<a href='http://".$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']."?id_article=".$list[$i]['id_article']."'>".$list[$i]['name']."</a></td></tr>";
}
}
if ($level+1<count($path) && $list[$i][0] == $path[$level+1])
$out = processCategories($list,$level+1,$path,$sel,$out);
}
return $out;
}
function echo_menu($id_page,$cats,$path){
if (!isset($id_page)) $id_page = 0;
echo processCategories($cats,0,$path,&$id_page,"");
}
|
На странице:
собираю в массив
$query ="SELECT * FROM names where id_article<>0 AND hide='show' ORDER BY pos ";
$res = mysql_query($query);
for ($cats=array(); $row=mysql_fetch_array($res); $cats[]=$row);
$path = calculatePath($cats, $_GET['id_article']);
$t = categoryIndexInArray($cats, $_GET['id_article']);
|
В блоке меню вывожу:
echo_menu(@$_GET['id_article'],$cats,$path);
|
| |
|
|
|
|
|
|
|
для: куч1963
(27.01.2007 в 04:45)
| | О! Спасибо! Это совсем чуть-чуть не совсем что надо :))), но я все равно такого не придумал!
Только что пришел до компа и первым делом сюда. В коде пока не разбирался, но таблицу создал - все работает!
Еще раз спасибо. | |
|
|
|