Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Создание меню
 
 автор: Artemy   (31.05.2005 в 12:49)   письмо автору
 
 

Здрасти, снова прошу помощи!
Хочу сделать динамически формирующиеся меню.
Допустим есть таблица 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_1puterror("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 в 13:30)   письмо автору
 
   для: 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_1puterror("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>

   
 
 автор: Artemy   (31.05.2005 в 13:45)   письмо автору
 
   для: cheops   (31.05.2005 в 13:30)
 

Да, всё правильно! Только у меня вместо $indent $padding!
Дело в том, что эти отступы формируються не правильно!
Надо так
 
Каталог
   Подкаталог
      Подкаталог
         Подкаталог
         Подкаталог
      Подкаталог
      Подкаталог
   Подкаталог
      Подкаталог
      Подкаталог
   Подкаталог
   Подкаталог



P.S. Начал читать Вашу новую книгу всё замечательно! В разделе создание каталога, нашел такого рода меню, но кода к ней нет, т.е. на диске нет такой страницы, страница в книге 335.

   
 
 автор: cheops   (31.05.2005 в 14:10)   письмо автору
 
   для: 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_1puterror("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>

   
 
 автор: Artemy   (31.05.2005 в 14:21)   письмо автору
 
   для: 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>

:-((

   
 
 автор: cheops   (31.05.2005 в 14:36)   письмо автору
 
   для: Artemy   (31.05.2005 в 14:21)
 

А вы бы не могли бы помимо структуры таблицы приложить ещё и содержимое - чтобы можно было потестить на локальной машине? Просто забивать самостоятельно долго, а у вас уже есть всё готовое?

   
 
 автор: Artemy   (31.05.2005 в 14:41)   письмо автору
 
   для: cheops   (31.05.2005 в 14:36)
 

Не вопрос!
Всё в атаче!

   
 
 автор: cheops   (31.05.2005 в 15:15)   письмо автору
 
   для: 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_1puterror("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 в 15:52)   письмо автору
 
   для: cheops   (31.05.2005 в 15:15)
 

Большое спасибо!
А можно еще один маленький вопрос?
А у Вас при выполнении этого скрипта в броузере формируются отступы?
У меня нет, ни с style=' padding-left: $padding px;, ни style='margin-left: $padding px;!

   
 
 автор: cheops   (31.05.2005 в 16:13)   письмо автору
 
   для: Artemy   (31.05.2005 в 15:52)
 

Нет, но я обычно к такому варианту прибегаю
<?php 
include "config.php";
?>
<select name=id> 
<? 
menu
("0",""); 
function 
menu($id_catalog$padding

   
$padding .= "&nbsp;&nbsp;&nbsp;"
   
$sql_1 mysql_query("SELECT * FROM catalog WHERE id_parent = '$id_catalog' ORDER BY id"); 
   if(!
$sql_1puterror("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>

с ним отступы формируются.

   
 
 автор: Artemy   (31.05.2005 в 16:54)   письмо автору
 
   для: cheops   (31.05.2005 в 16:13)
 

Блин, безспорно такой вариант работает, но отображает криво!
Палка о двух концах!

Безганично благодарен!

   
 
 автор: cheops   (31.05.2005 в 19:47)   письмо автору
 
   для: Artemy   (31.05.2005 в 16:54)
 

Ну кривизну можно выпрямить :))), это же просто набросок...

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования