Структура сайта. Весь сайт на одной странице
Уважаемые посетители сайта, задающие вопросы вроде «А как прикрутить вашу корзину к сайту?» и т.п. Я не делаю готовых решений, я описываю логику реализации, для каждого отдельного сайта нужно будет дописывать те или иные вещи в любом случае, поэтому если вам очень нужно что-либо прикрутить или приделать, я оказываю платные и бесплатные услуги по консультированию и доработке сайтов. Пишите в форму обратной связи вверху страницы, отвечу всем.
В предыдущей статье я описал свои изыскания по структуре сайта и описал некие этапы, которые я думаю все когда-нибудь проходили (у некоторых, правда был этап, который можно назвать «Создание сайтов на Joomla» или другой популярной CMS, который я проходил совсем недавно, и не как создатель сайтов – а как разработчик шаблонов, модулей и компонентов для Joomla, поскольку в этом была необходимость, но сейчас не об этом).
Итак, в конце предыдущей статьи я описал возможность создания сайта на одной странице.
Итак, за все у нас будет отвечать файл index.php. Ссылки на разделы будут выглядеть следующим образом:
http://ваш_домен/index.php?razdel=раздел_1
http://ваш_домен/index.php?razdel=раздел_2
http://ваш_домен/index.php?razdel=раздел_3….
Удобство такой схемы заключается в том, что в страницах раздел_1.php, раздел_2.php и раздел_3.php не нужно думать о подключении конфигурационных файлов. Все их можно подключить в файле index.php. Также для последнего можно оставить настройку основных функций, таких как авторизация и прочее.
include $_SERVER[‘DOCUMENT_ROOT’].’/includes/’. $_GET[‘razdel’];
Вот и все. Когда мы передаем на основную страницу сайта переменную $_GET[‘razdel’], она подключает нужную страницу, отвечающую за данный раздел сайта. Недостатком такого решения является то, что не совсем очевидно как сделать страницы с разной разметкой, но на самом деле эту проблему тоже можно решить, дальше я опишу как это сделать. На этом можно было бы остановиться, и делать сайты сколько угодно и какие угодно. Но, честно признаюсь, предметом для меня одно время была Joomla, и не зря. Ковыряясь в ее исходниках я открыл для себя довольно много нового и интересного. А почему тогда не делать сайты на Joomla, спросите вы. Ответ простой: вы когда-нибудь видели как работает интернет магазин на связке Joomla+virtuemart в котором около 300 категорий товаров и самих товаров несколько тысяч. Вот вот. А мое знакомство с Joomla началось именно с такого сайта, и главной задачей – было увеличение скорости работы. Для человека, который в веб-программировании «третий день как с пальмы слез» — такая задача – тихий ужас, по-началу я даже не знал с какой стороны подойти, но потом пошло-поехало, изменил тут, дописал там, и скорость загрузки страниц увеличилась в три раза.
Но что-то меня занесло. Вернемся к одностраничной структуре сайта. В продолжение темы можно сказать, что никто не заставляет вас запихивать всю логику в страницу index.php. В папку includes можно поместить файлы, отвечающие за вывод главного меню сайта, шапки footerа а других блоков. Здесь главное понять сам принцип организации такого сайта.
— WEB чайник
Уважаемые посетители сайта, задающие вопросы вроде «А как прикрутить вашу корзину к сайту?» и т.п. Я не делаю готовых решений, я описываю логику реализации, для каждого отдельного сайта нужно будет дописывать те или иные вещи в любом случае, поэтому если вам очень нужно что-либо прикрутить или приделать, я оказываю платные и бесплатные услуги по консультированию и доработке сайтов.
Структура сайта – проблема, которая всегда волновала меня больше всего, не скажу что и сейчас я уже решил для себя все трудности. «Совершенства нельзя достичь, но к нему нужно стремиться». И вот решил в нескольких статьях описать путь от самого начала моей веб-жизни, до сегодняшнего момента. Постараюсь описать, что я умею и чему хотелось бы научиться.
Сначала немного истории. Как выглядел мой первый сайт я помню очень хорошо. Делал его в Macromedia Dreamweaver (которым иногда пользуюсь до сих пор, чтобы быстро перевести текст из ворда в html и отредактировать). Структура этого сайта была не то чтоб неудобной для работы, а ужасно неудобной. Все страницы были отдельными файлами с html-разметкой. Т.е. чтобы поправить один пункт меню, или еще какую мелочь, которая была на всех страницах – приходилось их все редактировать. Ну и естественно отсюда следовало то, что иногда я забывал отредактировать какую-либо страницу, получались на разных страницах разные ссылки и т.
Конечно, тогда такое положение дел казалось мне вполне нормальным, но хотелось чего-то большего. Плюсов было намного меньше чем минусов. Например, представляете сколько нужно телодвижений чтобы добавить еще одного производителя, к тому же для каждого из них были свои таблицы в базе данных…
Можно видеть, что в общем разницы между первой и второй структурами сайта нет. Однако, со времени первой я научился сам писать запросы к базе данных, выводить их результаты на странице и еще много чего. Но чего-то все равно не хватало. Примерно через полтора или два года (пока защищал диплом и все такое) до меня все-таки дошло, что структуру можно еще более упростить, подключая не на каждой странице шапку, боковое меню и так называемый footer,а сделать одну страницу index.php, которая будет содержать в себе весь дизайн, а в теле ее будет подключаться уже нужный раздел, но об этом в следующей статье, т.к. реализация такого подхода порождает довольно много проблем.
Как выбрать структуру каталогов проекта PHP?
Это руководство покажет вам некоторые дополнительные и разумные способы структурирования файлов и каталоги в вашем проекте PHP.
PHP очень либеральный и настраиваемый, когда дело доходит до структурирования проекта каталоги. Если вы планируете создать собственное ванильное PHP-приложение, вам нужно будет придумать структуру для вашего проекта. Вам нужен логичный и понятная структура каталогов.
PHP-приложения и фреймворки с открытым исходным кодом имеют свои собственные способы структурирования каталоги и файлы. Если вы используете фреймворк или CMS, у вас уже есть определена структура каталогов. См. ссылки внизу для некоторых распространенных открытых исходных кодов. Примеры.
Сложность и характер проекта влияют на необходимые каталоги. Например, веб-приложение будет иметь дополнительный общедоступный каталог по сравнению с приложение командной строки.
Структурируйте свой проект так, как вы считаете наиболее логичным и полезным.
Пример структуры каталогов
Давайте рассмотрим следующий пример.
корень проекта/ .git/ # Конфигурация Git и исходный каталог assets/ # Нескомпилированный/необработанный CSS, LESS, Sass, JavaScript, изображения bin/ # Скрипты командной строки config/ # Конфигурация приложения node_modules/ # Модули Node. js для управления внешним интерфейсом public/ # Общедоступные файлы на http://example.com/ index.php # Основная точка входа — фронт-контроллер ... src/ # файлы исходного кода PHP Контроллер/ # Контроллеры ... templates/ # Файлы шаблонов тесты/ # Модульные и функциональные тесты translations/ # Файлы перевода en_US.yaml var/ # Временные файлы приложения cache/ # Файлы кеша log/ # Файлы журнала приложения поставщик/# сторонние пакеты и компоненты с Composer .gitignore # Игнорируемые файлы и каталоги в Git (node_modules, var, vendor...) composer.json # файл зависимостей Composer phpunit.xml.dist # Файл конфигурации PHPUnit
Пример выше имеет более длинный список каталогов в корневом каталоге и меньше глубины, чтобы найти определенный файл и найти его быстрее. Вы можете объединить определенные типы файлов вместе или реорганизуйте их по-разному, чтобы они соответствовали вашему проекту потребности. Найдите некоторый баланс для вашего варианта использования между слишком длинным списком элементов и слишком много подпапок для просмотра. По возможности применяйте разделение ответственности.
Общий каталог
Веб-приложениям требуется общедоступный каталог. В приведенном выше примере используется имя общедоступный
. Вы можете легко использовать pub
, web
, public_html
или любое другое имя.
Этот каталог будет доступен для внешнего мира при использовании веб-сервера.
Из соображений безопасности следует помещать только минимальный набор файлов, необходимых для
ваше приложение для работы. Это включает, например, один фронт-контроллер, index.php
и статические файлы внешнего интерфейса (CSS, JavaScript, изображения…).
Конфигурация
Если у вас несколько файлов конфигурации, рекомендуется поместить
конфигурационные файлы в отдельном каталоге. Несколько примеров: config
или и т. д.
или app/config
… Не помещайте файлы конфигурации в
общедоступный каталог.
Composer
Composer помогает упростить и улучшить многие аспекты вашего PHP-приложения. Например, автозагрузка классов PHP, выполнение скриптов, автоматизация установка, управление сторонними зависимостями и многое другое.
Специальный файл composer.json
по умолчанию находится в верхнем корневом каталоге
проект. В этом файле указаны все настройки и зависимости Composer.
определенный.
Composer создает каталог поставщика
в корневом каталоге проекта, который
содержит сторонние зависимости (библиотеки, компоненты, плагины…).
Файлы исходного кода PHP
Когда речь идет о многих проектах классов PHP, добавьте их в каталог с именем src
или приложение
.
Приведенный выше пример включает все файлы PHP в каталоге src
. К ним в основном относятся
классы. Композитор также включает в себя очень интересную функцию — автозагрузку PSR-4.
Добавление autoload
и autoload-dev
части в composer.json
будут
автозагрузка всех классов для вас:
{ "автозагрузка": { "пср-4": { "Приложение\\": "источник/" } }, "автозагрузка-разработчик": { "пср-4": { "Приложение\\Тесты\\": "тесты/" } } }
В современных приложениях PHP структурирование файлов PHP в каталоге src
является частью
объектно-ориентированного программирования и шаблонов проектирования. Каждое пространство имен представлено
с подкаталогом в src
каталог.
Например:
корень проекта/ ... источник/ Controller/ # Классы для управления запросом и ответом путем отображения # шаблоны с логикой от сервисов и/или данных из БД Model/ # Классы для хранения значений из базы данных Utils/ # Службы приложений — бизнес-логика ... ...
Следуйте принципам шаблонов проектирования ООП при добавлении классов в пространства имен.
Испытания
В идеале ваше приложение должно также включать тесты. В приведенном выше примере используется проверяет каталог
.
Передняя часть
В зависимости от сложности проекта рекомендуется разделить переднюю часть файлы (CSS, Sass, LESS, JavaScript, изображения…) и внутренние файлы PHP (исходный код PHP код, шаблоны, конфигурация приложения, модульные тесты…) на два отдельных репозитории.
В приведенном выше примере каталог node_modules
является стандартным каталогом (аналогично
к Композиторскому поставщик
), управляемый системой инструментов Node. js — npm или yarn.
Вместо разделения проекта на два репозитория каталог assets
используется для хранения нескомпилированного необработанного одного или нескольких JavaScript, CSS, SaSS, LESS, изображений
и аналогичные файлы активов, которые компилируются и обрабатываются в общедоступном каталоге
.
В случае, если вам не требуется более сложная и сложная передняя часть, вы можете
поместите эти веб-ресурсы непосредственно в общедоступный каталог
.
Как изменить каталог поставщиков Composer по умолчанию?
По умолчанию Composer создает каталог поставщика
. Изменение имени не
распространенный подход, потому что это стандартное имя, используемое в экосистеме PHP.
Однако переименование можно сделать, установив специальную переменную окружения COMPOSER_VENDOR_DIR
:
COMPOSER_VENDOR_DIR=lib composer требует phpunit/phpunit
или вручную добавив конфигурацию vendor-dir
в композитор. json
:
{ ... "конфигурация": { "вендор-дир": "библиотека" } ... }
Как настроить структуру каталогов при использовании виртуального хостинга?
В случае, если вы будете развертывать свое PHP-приложение на общих хостингах с существующие и предопределенные местоположения каталогов, куда вы можете загружать частные и общедоступные файлы, вам нужно будет настроить структуру каталогов проекта соответственно.
Всегда избегайте размещения чего-либо, кроме общедоступных файлов приложения, в
корневой каталог документа, например public_html
, htdocs
или аналогичный.
Некоторые панели управления могут позволить вам определить корень документа, отличный от по умолчанию:
public_html/ # Корневой каталог документов панели управления по умолчанию your-project/ # Ваш проект с предпочитаемой структурой каталогов ... конфиг/ ... public/ # Установите этот каталог в качестве нового корня документа источник/ . ..
См. также
- Глава «Конфигурация» — подробнее о PHP подходы к настройке приложений.
- Структура CakePHP
- Структура Laravel
- Структура Symfony
- Каркас приложения Zend Framework
Создание файловой структуры компонента
Редактирование проблемы в GitHubLogВ этом разделе мы рассмотрим различные файловые структуры для типов компонентов. Приложение Adobe Commerce или Magento с открытым исходным кодом ищет файлы, составляющие компонент , включая файлы конфигурации , в определенных местах внутри файловой структуры компонента. Следуйте предопределенным файловым структурам для разрабатываемого типа компонента, чтобы убедиться, что он работает должным образом.
Местоположение корневого каталога
Корневой каталог компонента соответствует имени компонента и содержит все его подкаталоги и файлы. В зависимости от того, как вы установили Magento, вы можете поместить корневой каталог вашего компонента в одно из двух мест:
<директория установки Magento>/app
: это рекомендуемое расположение для разработки компонента. Вы можете настроить эту среду, клонировав репозиторий Magento 2 GitHub.- Для модулей используйте приложение
/код
. - Для оформления витрины магазина используйте
app/design/frontend
. - Для тем администратора используйте
app/design/adminhtml
. - Для языковых пакетов используйте
app/i18n
.
- Для модулей используйте приложение
<Каталог установки Magento>/vendor
: Вы найдете это место для установок, которые используютcomposer create-project
для установки метапакета Magento 2 (который загружает код CE или EE).Magento устанавливает сторонние компоненты в каталог
<директория установки Magento>/vendor
. Но мы рекомендуем добавлять ваши компоненты в каталог<директория установки Magento>/app/code
. Если вы добавите свой компонент в каталог<каталог установки Magento>/vendor
, Git проигнорирует его, поскольку Magento добавит каталогпоставщика
в файл<каталог установки Magento>/. gitignore
.
Структура файла модуля
Типичная структура файла модуля может выглядеть следующим образом:
Общие каталоги
Ниже приведены некоторые общие каталоги модулей:
-
Блок
: содержит классы представления PHP как часть вертикальной реализации логики модуля Model View Controller (MVC). -
Контроллер
: содержит классы контроллера PHP как часть вертикальной реализации модульной логики MVC. -
и т. д.
: содержит файлы конфигурации; в частности,module.xml
, который обязателен. -
Модель
: содержит классы модели PHP как часть вертикальной реализации модульной логики MVC. -
Настройка
: содержит классы для структуры базы данных модуля и настройки данных, которые вызываются при установке или обновлении. -
ViewModel
: содержит классы моделей PHP как часть реализации модели-представления-представления (MVVM). Это позволяет разработчикам выгружать функции и бизнес-логику из блочных классов в отдельные классы, которые легче поддерживать, тестировать и повторно использовать.
Дополнительные каталоги
Дополнительные папки могут быть добавлены для настройки и других вспомогательных функций для таких элементов, как подключаемые модули, локализация и файлы макета.
-
Api
: содержит все классы PHP, открытые для API. -
Консоль
: содержит команды CLI. Дополнительные сведения см. в разделе Добавление команд CLI. -
Cron
: содержит определения заданий cron. -
CustomerData
: содержит файлы разделов. -
Helper
: содержит агрегированные функции. -
i18n
: содержит файлы локализации. -
Observer
: содержит файлы для выполнения команд слушателя. -
Плагин
: содержит все необходимые плагины. -
UI
: содержит файлы генерации данных. -
представление
: содержит файлы представлений, включая файлы статического представления, шаблоны дизайна, шаблоны электронной почты и файлы макета.
Структура файла темы
Типичная структура файла темы может выглядеть следующим образом:
├── composer.json ├── и т. д. │ └── view.xml ├── i18n │ └── en_US.csv ├── LICENSE_AFL.txt ├── ЛИЦЕНЗИЯ.txt ├── СМИ │ └── превью.jpg ├── Registration.php └── сеть ├── CSS │ ├── электронная почта.без │ ├── print.less │ ├── источник │ │ ├── _actions-toolbar.less │ │ ├── _breadcrumbs.less │ │ ├── _buttons.less │ │ ├── компоненты │ │ │ └── _modals_extend.less │ │ ├── _icons.less │ │ ├── _layout.less │ │ ├── _theme.less │ │ ├── _tooltips.less │ │ ├── _typography.less │ │ └── _variables.less │ ├── _styles.less │ ├── стили-l. less │ └── стили-m.less ├── изображения │ └── logo.svg └── js ├── navigation-menu.js └── theme.js Скопировано в буфер обмена
1├── composer.json
2├── etc
3│ └── view.xml
4├── i18n
5│ └── en_US.csv
6├── LICENSE_AFL.txt
7├── LICENSE.txt
8├── media
9│ └── preview.jpg
10├── Registration.php
11└── веб-сайт
12 ├─ ─ css
13 │ ├── email.less
14 │ ├── print.less
15 │ ├── источник
16 │ │ ├── _actions-toolbar.less
17 │ │ ├── _breadcrumbs.less
18 │ │ ├── _buttons.less
19 │ │ ├ ── компоненты
20 │ │ │ └── _modals_extend.less
21 │ │ ├─ ─ _icons.less
22 │ │ ├── _layout.less
23 │ │ ├── _theme.less
24 │ │ ├── _tooltips.less
25 │ │ ├── _typography.less
26 │ │ └── _variables.less
27 │ ├── _styles. less
28 │ ├── без стилей
29 │ └── без стилей
30 ├── изображений
31 │ └ ── logo.svg
32 └── js
33 ├── navigation-menu.js
34 └── theme.js
Общие каталоги
Типичные каталоги тем:
900 23 и т. д. : содержит файлы конфигурации, такие как
view.xml
файл, который содержит конфигурации изображений для всех изображений и эскизов.i18n
: Переводные словари, если таковые имеются.media
: Сюда можно поместить изображения предварительного просмотра темы (снимок экрана вашей темы).web
: Дополнительный каталог, который содержит статические файлы, организованные в следующие подкаталоги:-
css/source
: Содержитменьше
файлов конфигурации темы, которые вызывают миксины для глобальных элементов из пользовательского интерфейса библиотека ифайл theme. less
, который переопределяет значения переменных по умолчанию. -
css/source/lib
: Содержит файлы представлений, которые переопределяют файлы библиотеки пользовательского интерфейса, хранящиеся вlib/web/css/source/lib
. -
шрифты
: Папка для размещения различных шрифтов для вашей темы. -
изображения
: Папка статических изображений. -
js
: Папка для ваших файлов JavaScript.
-
Подробнее о структуре папок темы см. в разделе Структура темы.
Структура файла языкового пакета
Типичная структура каталогов для трех языковых пакетов следующая:
├── de_DE │ ├── composer.json │ ├── язык.xml │ ├── LICENSE_AFL.txt │ ├── ЛИЦЕНЗИЯ.txt │ └── Registration.php ├── en_RU │ ├── composer.json │ ├── язык.xml │ ├── LICENSE_AFL.txt │ ├── ЛИЦЕНЗИЯ.txt │ └── Registration.php ├── pt_BR │ ├── composer.json │ ├── язык.xml │ ├── LICENSE_AFL.txt │ ├── ЛИЦЕНЗИЯ.