| Новости | FAQ | Авторы | Документация | В действии | Библиотека |
| Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
andylars 09.07.2017 13:22 / 09.07.2017 13:38
Искушенные веб-разработчики, в том или ином виде, приходят к схеме, в которой обрабатывают запрошенные урлы своим кодом, а не раскладывают код по физическим папкам на веб-сервере.Примерная структура папок
----------------------------------
/engine <- какая-то папка, где весь код/движок сайта на Парсере (файлы *.p)
/data <- какие-то служебные данные для кода Парсера (например, *.dat)
/css <- статические файлы
/i
/js
/..
.htaccess <- конфиг для веб-сервера Apache
(точнее перекрытие директив основного конфига Апача)
актуально для шаред-хостинга, где нет возможности прописать
"включение Парсера" в основном конфиге веб-сервера.
auto.p <- корневой (в корне веб-документов) который выполняет роль, например
конфига для всего сайта, задание каких-то глоб.переменных и проч.
_index.html <- единственный .html файл, для "точки запуска".
если нам нужно давать статические файлы, как документы с
html с вёрсткой, то удобнее использовать для них расширение .htm,
чтобы не пропускать через Парсер, например.
Примерное содержание файлов:
-------------------------------
--- .htaccess ---
# назначаем обработчик для html
AddHandler parsed-html html
Action parsed-html /cgi-bin/parser3/parser3.cgi
# запрет на доступ к служебным файлам, и коду на Парсер
<Files ~ "\.(p|dat|dir|pag)$">
Order allow,deny
Deny from all
</Files>
# все запросы в урле
# которые не соответствуют реально существующему файлу на диске
# перенаправлять на _index.html
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /_index.html [QSA,L]
---/.htaccess ---
# DISCLAIMER: код ниже - не руководство к действию, а умозрительный пример
--- auto.p ---
# Тут может быть что-то типа конфига с глобальными переменными
$SITE_DOMAIN_DEFAULT[mysite.com]
$SITE_SOME_PARAM[...]
#...
# подключение каких-то классов
# хотя удобнее использовать @autouse или перечислить пути для классов
# в конфиге парсера
^use[/engine/...]
---/auto.p ---
--- _index.html ---
# то, как выглядит точка запуска зависит уже от внутренней (объектной) архитектуры
# для старта достаточного использовать единственный метод main, класса MAIN,
# все остальное разложено по пользовательским классам (движка) и их методам
# например, как-то так:
@main[]
# создаем объект класса ("процесс сайта на движке")
$runtime[^Engine::create[]]
$result[^runtime.render[]]
---/_index.html ---
--- engine/Engine.p ---
# класс как основное тело процесса движка
@CLASS
Engine
@create[]
# создадим какое-то уже пред-подготовленное параметрическое окружение
# для передачи их дальше в подклассы
$Environ[
$.url[] ^rem{# здесь уже может быть разобранный на части url) }
$.form[] ^rem{# здесь уже структурированные данные из форм }
$.cookie[
$.session[]
]
$.some_var[]
]
# инициируем основные архитектурные подклассы, путем создания объектов
# и положим им в параметр ссылку на наш (внешний по отношению к ним)
# экземпляр Engine ($self - зарезервированное имя системной переменной),
# чтобы подклассы смогли "общаться", как со своим родительским классом (Engine)
# так и через него - друг с другом
$EModel[^Model::create[$self]] ^rem{# создаем объект всей модели данных }
$EController[^Controller::create[$self]] ^rem{# создаем объект контроллера }
$EView[^View::create[$self]] ^rem{# создаем объект рендера результатов }
@render[]
...
--- /engine/Engine.p ---
--- engine/EModel.p ---
# класс модели (голых данных и логики)
@CLASS
EModel
@create[_parent_class]
$Engine[$_parent_class] ^rem{# теперь мы можем дотянуться до родительского класса }
$Data[ ^rem{# какая то конечная структура/модель данных }
$.user[
$.id[^auth[$Engine.Environ.cookie.session]]
]
$.sitemap[
$.[/about][
$.title[
$.ru[О компании]
$.en[About Company]
]
]
]
# ...
$.some[]
]
@auth[]
...
--- /engine/EModel.p ---Внутреннее устройство классов, под-классов, объектов и архитектура их взаимодействия,