|
Веб-курсы Что это? Оглавление Основы Основы основ Практика Гостевая книга Простой сайт Структура сайта (MVC) Ядро (Light) Ядро Гостевая на SQL Статические страницы Модуль новостей Система регистрации Теория Дебаггинг Регулярные выражения Введение в ООП Паттерны проектирования Репозитарий BB-code Почтовый класс Пагинатор Всякие полезности Download Полезные утилиты Разное Видеокурсы Последние изменения Вопросы и замечания сюда Реклама Диеты для похудения Фреймворк Kohana. Обучение. Мануал на русском. |
Шаг 2Инициализация GET переменныхИтак, начало у нас положено.Продолжим-с. Теперь у нас стоит задача выставить текущие и глобальные настройки сайта. Основные и незыблемые две - кодировку и уровень ошибок, они прописаны первыми строчками индекса.
Но понадобятся еще и текущие настройки. Их будет много, и чтобы не носиться по всему сайту в поисках вчерашнего дня, все настройки принято держать в одном месте, а именно в конфигурационном файле. Вот и мы не лыком шиты, у нас есть такой в корне - config.php А теперь нам нужно сделать так, чтобы хитрый злой тать и разбойник не только не проник в конфигу, но и даже не узнал, что таковая имеется. Кстати, это касается и всех остальных файлов. Чем меньше информации у хакера, тем сложнее его никчемная, жалкая судьбинушка. Сделать это совсем не сложно. В файл index.php первой строчкой пишем это:
Как это работает. Функция defined() проверяет, установлена ли константа. А так, как она установлена в другом файле (index.php), то отдельно от него она вернет false. А раз у нас там инверсия (восклицательный знак), то блок начнет отрабатывать.Сначала функция header()отправит стандартный заголовок, мол ошибка 404 - нет файла. А потом конструкция exit() остановит скрипт. А в аргумент её мы передадим содержимое нашей 404 страницы, считав предварительно функцией file_get_contents() что и увидит в конце итога юзер. Разумеется, при особом желании можно определить наличие файла по заголовкам, но не все на это способны и еще: чем больше всяких преград, тем нерентабельнее становится взлом. Этими строчками должен начинаться каждый файл PHP (кроме индекса) в системе. Только нужно не запутаться с путями, что бы на выдаче всегда была 404. Вообще, конечно, проще защитить файлы на уровне сервера, положив в директории со скриптами соответствующий .htaccess, но мы пойдем другим путем, потому что скрипт должен как можно меньше зависеть от настроек сервера, да и не всегда это удобно. Допустим, тот же аякс не станет так работать. Еще в config.php добавим три константы. Обратите внимание на префиксы констант. Они нужны, чтобы невзначай не пересечься с предопределенными константами или константами сторонних скриптов, которые мы, может быть, будем интегрировать в систему.
Первая будет отвечать за опцию ЧПУ, вторая для указания полных физических путей, а третья нужна для ссылок. А ссылки - это важно. Потому что на гет-параметрах этих ссылок и будет строиться вся навигация и переключение модулей, так как все внутренние ссылки будут вести только на один файл (точку входа) - index.php Это значит, что нам нужно бережно принять эти параметры и обработать их. У нас уже был такой прецидент, мы инициализировали переменную $page в файле variables.php как раз для переключения модулей. Но это было бы слишком просто для таких заправских веб-мастеров. Поэтому не станем искать легких путей, и сделаем очень интересную вещь. Для начала откройте файл variables.php и твердой рукой удалите все содержимое. Начинаем новую жизнь. На первый взгляд все, что мы сейчас будем делать, может показаться сложным и излишним. Но это потом очень облегчит жизнь и сделает кодинг приятным занятием. Теперь мы будем использовать не просто переменную, а целый массив. Для чего, поймете дальше. А пока файл variables.php будет смотреться так:
Вот она, долгожданная переменная $_GET['route'], о которой мы говорили, рассматривая mod_rewrite Теперь изменим вид ссылок в меню:
а заодно посмотрим, что творится в массивах. Для этого во вьюшках нужно изменить дебаггинг: modules/main/view.php
Ну и не забыть поменять переменную в переключателе страниц главного индекса:
Теперь запускаем и изучаем. Обратите внимание на адресную строку и переменные в массивах. Но в таком ракурсе никаких выгод от наших телодвижений не случилось. Так для из-за чего тогда весь сыр-бор? Дело в том, что нам понадобятся различные переменные, а так же разный вид ссылок. Как с гет-параметрами, так и без оных, а'ля ЧПУ Ну так и продолжим изыскания. Для начала определим минимальный набор переменных, которые нам понадобятся. Это будут 1. page - переменная переключения страниц сайта 2. rem - переменная переключения разделов 3. id - идентификатор 4. num - переменная для постранички. Поместим это все в знакомый массив
Ну а дальше заменим в этом массиве те элементы, которые имеются в массиве $_GET Еще раз меняем содержимое variables.php
А теперь посмотрим, как эта штука работает. Для наглядности еще раз изменим ссылки в меню, добавив туда разделов: menu.tpl
Теперь если запустить сайт без параметров, один домен, то мы увидим пустой массив $_GET и массив $GET (не путать, это разные массивы) с дефолтными (по умолчанию) значениями.
А если поклацать по ссылкам, то станет понятно, для чего дыли нужны эти танцы. В массиве $_GET всего одна переменная.
А вот в массиве $GET (не путать) их уже четыре:
Чтобы понять, как работает этот трехколесный велосипед, нужно уже начинать разбираться во встроенных функциях. Как говорится - учить матчасть. Массив мы уже проходили. Сейчас нам понадобятся функции explode(), trim(), empty() и цикл foreach() Вот алгоритм:
Что дают нам эти телодвижения. 1. Во-первых, переменные, прописанные в массиве $GET, будут всегда определены. 2. Во-вторых мы сможем очень легко их туда добавить. 3. В-третьих. При обычной инициализации, вот так к примеру:
в последующем коде не ясно, откуда эти переменные. А так
4. Ну и самое главное - мы можем теперь одним движением включить или выключить ЧПУ. Как это сделать - в следующем разделе. ____________________________________________________ Лирическое отступление. ЧПУ это конечно круто и красиво. Но во-первых не все хостинги поддерживают это, а во-вторых рерайт сам по себе штука довольно ресурсоемкая. А многим это не нравится. Поэтому мы не будем больше греть голову кому что нужно. Сами включат или выключат в конфиге. Этот кусочек - начало так называемого роутера, то есть переключателя модулей. Возникшие вопросы можно задать здесь. |