Структура сайта. Весь сайт на одной странице
Уважаемые посетители сайта, задающие вопросы вроде «А как прикрутить вашу корзину к сайту?» и т.п. Я не делаю готовых решений, я описываю логику реализации, для каждого отдельного сайта нужно будет дописывать те или иные вещи в любом случае, поэтому если вам очень нужно что-либо прикрутить или приделать, я оказываю платные и бесплатные услуги по консультированию и доработке сайтов. Пишите в форму обратной связи вверху страницы, отвечу всем.
В предыдущей статье я описал свои изыскания по структуре сайта и описал некие этапы, которые я думаю все когда-нибудь проходили (у некоторых, правда был этап, который можно назвать «Создание сайтов на 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 │ ├── ЛИЦЕНЗИЯ.

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
..
Вы можете настроить эту среду, клонировав репозиторий Magento 2 GitHub.
gitignore
Это позволяет разработчикам выгружать функции и бизнес-логику из блочных классов в отдельные классы, которые легче поддерживать, тестировать и повторно использовать.
less
│ └── стили-m.less
├── изображения
│ └── logo.svg
└── js
├── navigation-menu.js
└── theme.js
Скопировано в буфер обмена
less
less 