2012-02-13 3 views
0

Я создаю приложение стиля php cms для отслеживания символов участников, проекты идут хорошо, но мне интересно, есть ли более эффективный способ кодирования моей навигационной панели.Панель навигации, относительные ссылки

бар входит в много различных страниц, поэтому относительные ссылки в качестве стандарта не будет работать по понятным причинам, как я получаю вокруг этого является

if (strstr($_SERVER['SCRIPT_FILENAME'], "admin/char/")) { 
$home = "../../index.php"; 
$logout = "../user/logout.php"; 
} else if (strstr($_SERVER['SCRIPT_FILENAME'], "admin/user/")) { 

т.д.

поэтому у меня есть каждая комбинация пути, который может быть набрана, и это решение работает, и довольно хорошо, но поскольку я копирую вставку кода и внося изменения, шансы на то, что я чего-то не хватает, увеличены, и с большим количеством ссылок этот шанс увеличивается.

Мне интересно, есть ли лучший способ добиться того же результата с меньшим количеством кода?

Любые советы были бы весьма полезными.

+0

У любого другого есть другие способы сделать это? –

+0

Я сохраняю переменную, которая знает на странице, на каком уровне она есть, поэтому легко вернуть относительные ссылки на базу. – hakre

ответ

1

Возможно, вы захотите создать общий файл конфигурации (включая все ваши скрипты), где вы определяете константу (например, BASE_URL = 'http: // localhost/your_site /').

Затем измените все свои ссылки с значениями ABSOLUTE, используя константу BASE_URL, определенную в файле конфигурации.

В конце концов вы будете иметь что-то вроде:

$home = BASE_URL . 'index.php'; 

, который всегда будет действительная ссылкой.

При развертывании вам необходимо будет изменить файл конфигурации и установить BASE_URL в качестве вашего нового домена (например, www.mysite.com).

+0

Да, дело в том, что это открытый код для других администраторов веб-сайтов, поэтому фактический URL-адрес хоста будет отличаться. –

+0

У вас будут разные ссылки на меню в зависимости от роли пользователя, но это не будет иметь никакого отношения к BASE_URL, который остается постоянным. Если меню для администратора отличается, то у вас должен быть другой блок, основанный на типе пользователя, а не на 'SCRIPT_FILENAME', и эти ссылки все равно будут запускать/использовать тот же' BASE_URL': 'BASE_URL.'admin/logout. php'' –

+0

Вы не указали при развертывании Мне нужно было бы изменить базовый url, подразумевающий ручное изменение, я бы потребовал что-то, что будет работать в любом домене, автоматически без администратора, требующего ввести этот адрес. –

0

предыдущий совет, хотя и не совсем отвечающий на мой вопрос, дал мне идею использовать переменную с именем $ BASE_URL. отсюда я использую sytax, например.

if (strstr($_SERVER['SCRIPT_FILENAME'], "admin/index.php")) { 
$BASE_URL = substr($_SERVER['SCRIPT_FILENAME'], 0, -15) 
} else if (strstr($_SERVER['SCRIPT_FILENAME'], "index.php")) { 
$BASE_URL = substr($_SERVER['SCRIPT_FILENAME'], 0, -9) 
} 

Я повторил это для нескольких путей, в то время как он действительно занимает изрядное немного места, все, что я должен делать, когда ссылки ломаются от одной страницы, это добавить, что страницы адрес и соответствующую длину, что значительно Полегче.

Я включил этот код в свой файл header.php, что сделало эту переменную доступной на всем сайте.