Форум программистов, компьютерный форум, киберфорум
PHP
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
39 / 9 / 1
Регистрация: 16.02.2018
Сообщений: 251
1

Реализация меню

23.07.2018, 10:21. Показов 653. Ответов 11
Метки нет (Все метки)

К примеру есть документ index.php лежащий в корневой директории сайта. И 2 файла.
Первый /test1/2018/test1.php
Второй /test2/2018/test2.php
И есть файл menu.html включенный в 2 этих файла с помощью функции include 'menu.html' ( для динамического изменения меню на всех страницах ) лежащий в /include/menu.html .

____

Чтобы из файла index.php добраться до test2.php нужно пройти /test1/2018/test1.php, но чтобы дойти до test2.php из файла test1.php нужно пройти совсем другой путь.

Сам вопрос. В файле menu.html можно прописать лишь один путь до любого из файлов. К примеру если я пропишу путь /test1/2018/test1.php то по этому пути я не смогу пробраться к тому же файлу от test2.php. Есть ли выход из этого положения? Может есть что-то кроме include?

_________
Простите если запутано. Я только начал изучать php.

Заранее спасибо.
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.07.2018, 10:21
Ответы с готовыми решениями:

Реализация меню
Господа, подскажите как реализовать подобное: Структура сайта это php файлы(index.php index2.php...

Реализация меню с динамическим контентом
Здравствуйте. Подскажите пожалуйста, как можно организовать меню с динамическим контентом? Если...

Реализация меню средствами php
Есть отдельный файл menu.php, вставляется в каждую страницу инклудом. <ul class="menu"> <li><a...

Реализация меню через class и файлы ini
Здраствуйте я хочу сделать так Класс - нужно сделать небольшой класс для вывода разделов...

11
Эксперт PHP
4886 / 3604 / 1241
Регистрация: 06.01.2011
Сообщений: 10,159
23.07.2018, 11:04 2
Если я всё правильно понял...

Для таких случаев регистрируется путь к корню. Например, в контейнере приложения.
Когда нужно сформировать путь куда-либо, делается следующее:
PHP
1
$path = $this->app['basepath'] . 'тут/уже/путь';
Условно; для примера пойдёт. Где $app -- контейнер, а basepath -- ключ, под которым зарегистрирован путь к корню.

Новички чаще не используют никаких контейнеров и создают файл с основными константами, среди которых можно встретить что-то вроде:
PHP
1
define('BASEPATH', __DIR__);
Потом подключают этот файл где нужно и пишут так:
PHP
1
$path = BASEPATH . 'тут/уже/путь';
0
39 / 9 / 1
Регистрация: 16.02.2018
Сообщений: 251
23.07.2018, 11:07  [ТС] 3
А можете объяснить поподробнее? Или дать ссылочку.
0
299 / 250 / 66
Регистрация: 15.09.2017
Сообщений: 1,150
24.07.2018, 00:40 4
Я вам уже давно все объяснил:
Используйте абсолютные ссылки на технические файлы "переднего плана". Также используйте полное имя файла меню при вставке, которую вы запланировали.
Т.к. вы не используете единый программный каркас, в качестве BASEPATH можно использовать $_SERVER['DOCUMENT_ROOT']. "Продолжение" должно начинаться со слеша. Para bellum упустил этот момент, видимо, когда еще писал определение BASEPATH.

Para bellum, не новички также активно используют константы. Реестр нужен, чтобы можно было переопределять или удалять значения.
0
Эксперт PHP
4886 / 3604 / 1241
Регистрация: 06.01.2011
Сообщений: 10,159
24.07.2018, 06:22 5
Цитата Сообщение от Phantom-84 Посмотреть сообщение
можно использовать $_SERVER['DOCUMENT_ROOT']
Значение устанавливает сервер. Если скрипт через консоль запустить, там пусто будет. Или если PHP как CGI установлен.
Лучше __DIR__.
Цитата Сообщение от Phantom-84 Посмотреть сообщение
Реестр нужен, чтобы можно было переопределять или удалять значения.
Зачем такой реестр? На этапе создания был зарегистрирован объект, скажем, session. Где-то в коде кто-то решил переопределить и всё, приехали.
Все, кто использовал данный объект, получает совсем другой, хорошо ещё, если интерфейс один и тот же оба класса реализовывали.

Взять Pimple: при попытке повторной регистрации (т.е. при перезаписи) бросается исключение. Можно тут посмотреть (81-83 строки):
https://github.com/silexphp/Pi... tainer.php
0
299 / 250 / 66
Регистрация: 15.09.2017
Сообщений: 1,150
24.07.2018, 09:56 6
Para bellum, автор темы использует много точек входа, поэтому ему __DIR__ не подходит для них.

Для объектов и противодействия их "случайному" переопределению в реестре можно разрешить переопределение только через удаление. Я не про объекты писал.

Добавлено через 7 минут
Пурыга Никита, написанное мной, естественно, также касается и ссылок на страницы. На главную, само собой, ссылаетесь при помощи /, а не /index.php. Использование index.php в ссылке на главную - это одна из допущенных вами ошибок в плане SEO/юзабилити.
0
Эксперт PHP
4886 / 3604 / 1241
Регистрация: 06.01.2011
Сообщений: 10,159
24.07.2018, 09:57 7
Цитата Сообщение от Phantom-84 Посмотреть сообщение
автор темы использует много точек входа, поэтому ему __DIR__ не подходит для них.
Потому я и сказал:
Цитата Сообщение от Para bellum Посмотреть сообщение
... создают файл с основными константами ... потом подключают этот файл где нужно
Цитата Сообщение от Phantom-84 Посмотреть сообщение
Я не про объекты писал.
То же самое касается и других значений в контейнере. На объектах просто пример ярче выглядит.
0
299 / 250 / 66
Регистрация: 15.09.2017
Сообщений: 1,150
24.07.2018, 10:28 8
Цитата Сообщение от Para bellum Посмотреть сообщение
Потом подключают этот файл где нужно
Чтобы единообразно подключить этот файл где нужно, на него тоже нужно через что-то сослаться.

поэтому ему __DIR__ не подходит для них
Использование include_path для указания местоположения файла с определениями констант, естественно, не учитываю.

Добавлено через 18 минут
Цитата Сообщение от Para bellum Посмотреть сообщение
То же самое касается и других значений в контейнере.
Для "скаляров" есть константы. Реестр с описанным мной поведением выполняет свою основную задачу. Обеспечивает глобальную область видимости. Позволяет "не пересекаться" с глобальными переменными.
0
Эксперт PHP
4886 / 3604 / 1241
Регистрация: 06.01.2011
Сообщений: 10,159
24.07.2018, 10:45 9
Цитата Сообщение от Phantom-84 Посмотреть сообщение
Чтобы единообразно подключить этот файл где нужно, на него тоже нужно через что-то сослаться.
Я когда это прочитал
Цитата Сообщение от Phantom-84 Посмотреть сообщение
автор темы использует много точек входа, поэтому ему __DIR__ не подходит для них.
понял так, что Вы говорите об этом: точка входа может быть в папке/подпапке/подпапке и в __DIR__ будет путь не корневой, от того она не годится.
Потому я и повторил, что некоторые регистрируют одну константу и используют её.

А уж подключение файла -- это уже другая проблема. С множеством точек входа всегда проблемы.
0
299 / 250 / 66
Регистрация: 15.09.2017
Сообщений: 1,150
24.07.2018, 11:16 10
Вы не сможете единообразно через __DIR__:
- ни определить константу непосредственно в каждой точке входа с одним и тем же значением;
- ни подключить файл с определением такой константы.

Использование include_path, как уже выше писал, а также абсолютных путей в чистом виде не учитываю.

Добавлено через 5 минут
Цитата Сообщение от Para bellum Посмотреть сообщение
А уж подключение файла -- это уже другая проблема.
Отчего же. Это одна из проблем, которую решает автор. Ему отдельная константа совершенно не нужна, если ему все равно придется решать проблему, ради которой он отчасти и должен был использовать константу.

Добавлено через 2 минуты
Речь о проблеме единообразия подключения файла, если непонятно.
0
Эксперт PHP
4886 / 3604 / 1241
Регистрация: 06.01.2011
Сообщений: 10,159
24.07.2018, 11:25 11
Цитата Сообщение от Phantom-84 Посмотреть сообщение
Речь о проблеме единообразия подключения файла, если непонятно.
Да понял я. Пусть структуру переделывает. Использование $_SERVER['DOCUMENT_ROOT'] не выход.
0
299 / 250 / 66
Регистрация: 15.09.2017
Сообщений: 1,150
24.07.2018, 12:37 12
Para bellum, пока что я не увидел у него ни такого желания, ни такой возможности. Поэтому на данном этапе вполне себе выход. Автор похоже не так давно пришел к мысли разделять меню между файлами страниц. До серьезных структурных изменений ему еще долго дозревать придется.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.07.2018, 12:37

Реализация меню
Привет! Есть такой сайт. Подскажите как реализовать на php меню слева, которое дергало бы данные...

Реализация двухуровневого меню на php&MYSQL
Есть две таблицы: categories и sub_categories Нужно выводить это в двухуровневое меню, вот в...

Реализация меню. Массив элементов меню
Приветствую. Решил хранить элементы меню в массиве. Вот только элементы - это разные структуры. То...

Реализация меню
Господа, доброго времени суток! такая у меня ситуация: есть xml файл с содержимым: <?xml...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.