| | Вечер добрый, уважаемые. Вот опять у меня трабл, и прямо даже низнаю что делать :( Суть вопроса:
есть у меня меню, полностью на пхп, с подразделами неограниченными. Вобщем меню хорошее. Правда писал не я, а челвоек, который помогал. Пробелма такая- задействовал mod_revrite, дабы красиво было, но овт беда- если в адресе, допустим site.ru/about , то все пучком, а если подставить слеш- site.ru/about/, то менюшка ловит /about/ и подставляет к нему линк. Получается, что пройдя по site.ru/about/ из меню в contactб получается site.ru/about/contact, что, понятное дело неправильно и ненужно. Мне-же надо вот как- в менюшке все разделы выводятся как site.ru/razdel/ , а в обработке слеш убирался и значение (в данном случае razdel) искалось в базе. Помогите кто чем сможет, плиз, я начинающий и подобное мозголомство мне не позубам :(
Быть может, неочень понятно, вот тут оно лежит- fm-studio.ru , посмотрите пожалуйста
это класс меню в функциях:
class menu
{
var $title,$link;
function menu($title,$link)
{
$this->title=$title;
$this->link=$link;
}
}
function print_menu()
{
global $menu_id,$site_url,$menu,$menu_tree,$parents;
$parent=count($menu_tree)>0 ? $menu_tree[0] : "";
$main=array_keys($parents,"");
for($i=0;$i<count($main);$i++)
{
$id=$main[$i];
$link=$menu[$id]->link;
$title=$menu[$id]->title;
if($id==$parent)
{
?><li><a href="<?=$link?>" <?if($id==$menu_id){?>id="active_item"<?}?> title="<?=$title?>"><?=$title?></a></li><?
print_tree();
}
else
{?><li><a href="<?=$link?>" title="<?=$title?>"><?=$title?></a></li><?}
}
}
function print_tree()
{
global $menu_id,$menu,$menu_tree,$parents;
$level=1;
if(count($menu_tree)>1)
{
for ($j=1;$j<count($menu_tree);$j++)
{
$id=$menu_tree[$j];
$title=$menu[$id]->title;
$link=$menu[$id]->link;
?><li><?
?><a href="<?=$link?>" <?if($id==$menu_id){?>id="active_item"<?}?> title="<?=$title?>"><?=$title?></a><?
$level++;
?></li><?
}
}
$child=array_keys($parents,$menu_tree[count($menu_tree)-1]);
for($j=0;$j<count($child);$j++)
{
?><li><?
$id=$child[$j];
$title=$menu[$id]->title;
$link=$menu[$id]->link;
?><a href="<?=$link?>" <?if($id==$menu_id){?>id="active_item"<?}?> title="<?=$title?>"><?=$title?></a><?
?></li><?
}
}
function load_menu($parent)
{
global $menu,$menu_link,$go_link,$default_link,$menu_id,$parents,$menu_selected;
$query="SELECT 'id','title','link' FROM 'menu' WHERE 'parent'='$parent' AND 'visible'='yes' ORDER BY 'prior' DESC";
$result=mysql_query($query);
if(mysql_num_rows($result)>0)
{
while ($row=mysql_fetch_array($result))
{
$id=$row['id'];
$title=$row['title'];
$link=str_replace("\/","",$row['link']);
if($link=="")
$link=str_replace($menu_link,"",$link);
if($menu_selected==$link)
$menu_id=$id;
$link=$link;
$menu[$id]=new menu($title,$link);
$parents[$id]=$parent;
load_menu($id);
}
}
}
function form_tree()
{
global $menu_id,$menu_tree;
if($menu_id!="")
{
global $parents;
if(key_exists($menu_id,$parents))
{
if(in_array($menu_id,$parents))
$menu_tree[]=$menu_id;
Get_parent($menu_id);
$menu_tree=array_reverse($menu_tree);
if(count($menu_tree)==0)
$menu_tree[]=$menu_id;
}
else
$menu_id="";
}
}
|
Это из конфигурационного файла:
$menu=array();
$parents=array();
$menu_link="index.php?go=";
$default_link="welcome";
$menu_selected=str_replace('\/',"",$_GET['go']) ? $_GET['go'] : basename($_SERVER['PHP_SELF']);
$menu_id="";
$menu_tree=array();
load_menu("");
form_tree();
}
else
{
header("Location: 404.php");
}
|
Это index.php:
if (isset($_GET['go'])) {
$go = str_replace('/',"",$_GET['go']);
//$go=str_replace("/","",$go);
} else {
$go = 'welcome';
}
if($go==""){$go="welcome";}
$query="SELECT 'meta_title','text_title','content' FROM 'menu' WHERE 'link'='$go' AND 'visible'='yes'";
$result=mysql_query($query);
if(mysql_num_rows($result)>0)
{
while ($row=mysql_fetch_array($result))
{
$text=$row['content'];
$page_title=$row['text_title'];
$page->add_title($row['meta_title']);
}
}
else
{
header("Location: 404.php");
}
|
Это .htaccess:
ErrorDocument 401 /401.php
ErrorDocument 403 /403.php
ErrorDocument 404 /404.php
ErrorDocument 500 /500.php
RewriteEngine On
RewriteRule ^([a-z0-9\_\/]+)?$ index.php?go=$1 [L]
|
| |