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

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

23.07.2018, 10:21. Показов 919. Ответов 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
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.07.2018, 10:21
Ответы с готовыми решениями:

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

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

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

11
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
23.07.2018, 11:04
Если я всё правильно понял...

Для таких случаев регистрируется путь к корню. Например, в контейнере приложения.
Когда нужно сформировать путь куда-либо, делается следующее:
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  [ТС]
А можете объяснить поподробнее? Или дать ссылочку.
0
377 / 319 / 73
Регистрация: 15.09.2017
Сообщений: 1,436
24.07.2018, 00:40
Я вам уже давно все объяснил:
Используйте абсолютные ссылки на технические файлы "переднего плана". Также используйте полное имя файла меню при вставке, которую вы запланировали.
Т.к. вы не используете единый программный каркас, в качестве BASEPATH можно использовать $_SERVER['DOCUMENT_ROOT']. "Продолжение" должно начинаться со слеша. Para bellum упустил этот момент, видимо, когда еще писал определение BASEPATH.

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

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

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

Добавлено через 7 минут
Пурыга Никита, написанное мной, естественно, также касается и ссылок на страницы. На главную, само собой, ссылаетесь при помощи /, а не /index.php. Использование index.php в ссылке на главную - это одна из допущенных вами ошибок в плане SEO/юзабилити.
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
24.07.2018, 09:57
Цитата Сообщение от Phantom-84 Посмотреть сообщение
автор темы использует много точек входа, поэтому ему __DIR__ не подходит для них.
Потому я и сказал:
Цитата Сообщение от Para bellum Посмотреть сообщение
... создают файл с основными константами ... потом подключают этот файл где нужно
Цитата Сообщение от Phantom-84 Посмотреть сообщение
Я не про объекты писал.
То же самое касается и других значений в контейнере. На объектах просто пример ярче выглядит.
0
377 / 319 / 73
Регистрация: 15.09.2017
Сообщений: 1,436
24.07.2018, 10:28
Цитата Сообщение от Para bellum Посмотреть сообщение
Потом подключают этот файл где нужно
Чтобы единообразно подключить этот файл где нужно, на него тоже нужно через что-то сослаться.

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

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

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

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

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

Добавлено через 2 минуты
Речь о проблеме единообразия подключения файла, если непонятно.
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
24.07.2018, 11:25
Цитата Сообщение от Phantom-84 Посмотреть сообщение
Речь о проблеме единообразия подключения файла, если непонятно.
Да понял я. Пусть структуру переделывает. Использование $_SERVER['DOCUMENT_ROOT'] не выход.
0
377 / 319 / 73
Регистрация: 15.09.2017
Сообщений: 1,436
24.07.2018, 12:37
Para bellum, пока что я не увидел у него ни такого желания, ни такой возможности. Поэтому на данном этапе вполне себе выход. Автор похоже не так давно пришел к мысли разделять меню между файлами страниц. До серьезных структурных изменений ему еще долго дозревать придется.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.07.2018, 12:37
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru