|
|
|
| Здрасти, снова прошу помощи!
Хочу сделать динамически формирующиеся меню.
Допустим есть таблица catalog
CREATE TABLE 'catalog' (
'id' smallint(2) NOT NULL auto_increment,
'name_cat' varchar(32) NOT NULL default '',
'description' text NOT NULL,
'pos' smallint(3) NOT NULL default '0',
'id_parent' smallint(2) NOT NULL default '0',
'image' varchar(64) NOT NULL default '',
'hide' smallint(1) NOT NULL default '0',
PRIMARY KEY ('id')
) TYPE=MyISAM ;
|
и есть следущая функция
<select name=id>
<?
menu("0","0");
function menu($id_catalog, $padding)
{
$sql_1 = mysql_query("SELECT * FROM catalog WHERE id_parent = '$id_catalog' ORDER BY id");
if(!$sql_1) puterror("Error #1");
while($slc = mysql_fetch_array($sql_1))
{
echo "<option value = '".$slc['id']."' style=' padding-left: $padding px;'>".$slc['name_cat']."</option>\n";
menu($slc['id'],$padding);
}
}
?>
</select>
|
Помогите её доделать, так чтобы, меню выстраивалось с отступами! | |
|
|
|
|
|
|
|
для: Artemy
(31.05.2005 в 12:49)
| | Для этого в функции menu следует ввести дополнительный параметр indent, который будет увеличиваться при каждом рекурсивном спуске
<select name=id>
<?
menu("0","0","");
function menu($id_catalog, $padding, $indent)
{
$sql_1 = mysql_query("SELECT * FROM catalog WHERE id_parent = '$id_catalog' ORDER BY id");
if(!$sql_1) puterror("Error #1");
while($slc = mysql_fetch_array($sql_1))
{
echo "<option value = '".$slc['id']."' style=' padding-left: $padding px;'>".$indent.$slc['name_cat']."</option>\n";
menu($slc['id'],$padding);
}
$indent .= " ";
}
?>
</select>
|
| |
|
|
|
|
|
|
|
для: cheops
(31.05.2005 в 13:30)
| | Да, всё правильно! Только у меня вместо $indent $padding!
Дело в том, что эти отступы формируються не правильно!
Надо так
Каталог
Подкаталог
Подкаталог
Подкаталог
Подкаталог
Подкаталог
Подкаталог
Подкаталог
Подкаталог
Подкаталог
Подкаталог
Подкаталог
|
P.S. Начал читать Вашу новую книгу всё замечательно! В разделе создание каталога, нашел такого рода меню, но кода к ней нет, т.е. на диске нет такой страницы, страница в книге 335. | |
|
|
|
|
|
|
|
для: Artemy
(31.05.2005 в 13:45)
| | А... если тогда вот так сделать
<select name=id>
<?
menu("0","0");
function menu($id_catalog, $padding)
{
$sql_1 = mysql_query("SELECT * FROM catalog WHERE id_parent = '$id_catalog' ORDER BY id");
if(!$sql_1) puterror("Error #1");
while($slc = mysql_fetch_array($sql_1))
{
echo "<option value = '".$slc['id']."' style=' padding-left: $padding px;'>".$slc['name_cat']."</option>\n";
menu($slc['id'],$padding);
}
$padding += 3;
}
?>
</select>
|
| |
|
|
|
|
|
|
|
для: cheops
(31.05.2005 в 14:10)
| | Почему-то результат выполнения скрипта следующий:
<select name=id>
<option value = '1' style=' padding-left: 0 px;'>Стабилизаторы напряжения</option>
<option value = '2' style=' padding-left: 0 px;'>Однофазные</option>
<option value = '9' style=' padding-left: 0 px;'>Серии Элтор</option>
<option value = '11' style=' padding-left: 0 px;'>Серии Wusley</option>
<option value = '3' style=' padding-left: 0 px;'>Трёхфазные</option>
<option value = '4' style=' padding-left: 0 px;'>Электростанции</option>
<option value = '5' style=' padding-left: 0 px;'>Портативные</option>
<option value = '6' style=' padding-left: 0 px;'>Стационарные</option>
<option value = '7' style=' padding-left: 0 px;'>Для сварки</option>
<option value = '12' style=' padding-left: 0 px;'>Автотрансформаторы Wusley</option>
<option value = '14' style=' padding-left: 0 px;'>Автотрансформаторы однофазные</option>
<option value = '15' style=' padding-left: 0 px;'>Автотрансформаторы трехфазные</option>
</select>
|
:-(( | |
|
|
|
|
|
|
|
для: Artemy
(31.05.2005 в 14:21)
| | А вы бы не могли бы помимо структуры таблицы приложить ещё и содержимое - чтобы можно было потестить на локальной машине? Просто забивать самостоятельно долго, а у вас уже есть всё готовое? | |
|
|
|
|
|
|
|
для: cheops
(31.05.2005 в 14:36)
| | Не вопрос!
Всё в атаче! | |
|
|
|
|
|
|
|
для: Artemy
(31.05.2005 в 14:41)
| | Можно чего-нибудь в этом духе попробовать, но чего-то нифига не двигается, хотя цифры в padding-left: изменяются
<?php
include "config.php";
?>
<select name=id>
<?
menu("0",-3);
function menu($id_catalog, $padding)
{
$padding += 3;
$sql_1 = mysql_query("SELECT * FROM catalog WHERE id_parent = '$id_catalog' ORDER BY id");
if(!$sql_1) puterror("Error #1");
while($slc = mysql_fetch_array($sql_1))
{
echo "<option value = '".$slc['id']."' style=' padding-left: $padding px;'>".$slc['name_cat']."</option>\n";
menu($slc['id'],$padding);
}
}
?>
</select>
|
| |
|
|
|
|
|
|
|
для: cheops
(31.05.2005 в 15:15)
| | Большое спасибо!
А можно еще один маленький вопрос?
А у Вас при выполнении этого скрипта в броузере формируются отступы?
У меня нет, ни с style=' padding-left: $padding px;, ни style='margin-left: $padding px;! | |
|
|
|
|
|
|
|
для: Artemy
(31.05.2005 в 15:52)
| | Нет, но я обычно к такому варианту прибегаю
<?php
include "config.php";
?>
<select name=id>
<?
menu("0","");
function menu($id_catalog, $padding)
{
$padding .= " ";
$sql_1 = mysql_query("SELECT * FROM catalog WHERE id_parent = '$id_catalog' ORDER BY id");
if(!$sql_1) puterror("Error #1");
while($slc = mysql_fetch_array($sql_1))
{
echo "<option value = '".$slc['id']."' style=' padding-left: 0 px;'>".$padding.$slc['name_cat']."</option>\n";
menu($slc['id'],$padding);
}
}
?>
</select>
|
с ним отступы формируются. | |
|
|
|
|
|
|
|
для: cheops
(31.05.2005 в 16:13)
| | Блин, безспорно такой вариант работает, но отображает криво!
Палка о двух концах!
Безганично благодарен! | |
|
|
|
|
|
|
|
для: Artemy
(31.05.2005 в 16:54)
| | Ну кривизну можно выпрямить :))), это же просто набросок... | |
|
|
|