Новости | 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 ---Внутреннее устройство классов, под-классов, объектов и архитектура их взаимодействия,