Генератор расписания уроков онлайн. Проблема полной автоматизации при составлении школьного расписания. Настройка штрафов за нарушение требований СанПиН
Ну что, на прошлом уроке мы фактически закончили писать ядро нашего сайта, и с этого момента я предлагаю завязать с велосипедостроением и припасть к достижениям мирового сообщества.
А именно - начать использовать менеджер зависимостей для PHP - Composer . Он позволит нам легко устанавливать разные полезные вещи на сайт, обновлять их и даже удалять. Если вы уже работали с менеджером пакетов GNU/Linux - то вам всё это будет очень знакомо.
В качестве разминки, удалим Fenom
из директории core и установим через Composer. Для этого нужно в корне сайта создать файл composer.json
и прописать в нём требуемые пакеты (подробнее можно прочитать на Хабре):
{
"require": {
"php":">=5.3.0",
"fenom/fenom": "2.*"
}
}
Теперь нужно только скачать composer.phar и запустить его в корне сайта:
php composer.phar install
На modhost.pro и качать ничего не нужно - просто запускаем composer в директории:
composer install
И волшебным образом у нас появляется директория /vendor/ с установленным Fenom. Что же с ним делать дальше?
Принцип работы
Давайте немного остановимся, и я объясню, как именно функционирует Composer, если вы еще не знаете.Composer - это менеджер пакетов, который работает с ними согласно правил в composer.json . То, что мы там напишем, и будет устанавливаться.
При установке пакетов Composer пробегается по их правилам и генерирует самый важный файл - /vendor/autoload.php
, который загружает все скачанные классы. Нам, выходит, нужно только подключить этот файл в своём проекте, и с этих пор мы можем запускать свои классы без require
:
$Fenom = new Fenom::factory($tplDir, $compileDir);
То есть, система уже знает, где физически находится Fenom и нам не нужно делать reuire_once("путь к fenom"). Также нам не нужно держать сам Fenom в своём проекте, достаточно хранить там наш composer.json
.
Еще раз, для закрепления:
- Пишем composer.json
- Устанавливаем пакеты через composer.phar
- Подключаем в проект /vendor/autoload.php
- Используем любые установленные классы через new Class()
php composer.phar update Всё очень просто и удобно. Стоит только раз использовать такую схему работы и велосипедить дальше уже просто невозможно!
Подключаем Fenom
Для работы с установленными пакетами нам нужно просто добавить autoload.php в наш класс Core :function __construct(array $config = array()) { $this->config = array_merge(array("controllersPath" => dirname(__FILE__) . "/Controllers/", "templatesPath" => dirname(__FILE__) . "/Templates/", "cachePath" => dirname(__FILE__) . "/Cache/", "fenomOptions" => array("auto_reload" => true, "force_verify" => true,),), $config); // Например, вот тут require_once dirname(dirname(__FILE__)) . "/vendor/autoload.php"; } Из метода getFenom() теперь можно выбросить проверку и подключение файлов, а также загрузку его классов. Итоговый метод выглядит так:
public function getFenom() { if (!$this->fenom) { try { if (!file_exists($this->config["cachePath"])) { mkdir($this->config["cachePath"]); } $this->fenom = Fenom::factory($this->config["templatesPath"], $this->config["cachePath"], $this->config["fenomOptions"]); } catch (Exception $e) { $this->log($e->getMessage()); return false; } } return $this->fenom; } Просто вызываем Fenom::factrory - и он сам загрузится. Вот коммит с изменениями - смотрите, сколько кода мы убрали сразу из своего проекта!
Зачем нам таскать с собой Fenom и обновлять его вручную, если давно придуман Composer, который об этом позаботится гораздо лучше? Всё, что нам нужно - положить в корень проекта composer.json .
Давайте теперь отрефакторим и наш собственный проект, чтобы он также подключался в autoload.php.
При этом, физически файлы должны быть разложены в таких же директориях, чтобы загрузчик знал где их искать. Как именно это работает расписано в официальных стандартах, но я вам советую проглядеть .
Отсюда следует два вывода: Composer можно использовать только в PHP 5.3+, и наш проект нужно переписать так, чтобы он использовал пространства имён.
Первым делом, нужно определить имя для нашего проекта. Пусть будет Brevis - от латинского «короткий». Теперь наша директория /core/ - это пространство имён Brevis. Значит:
- Класс Core становится \Brevis\Core и находится в core\Core.php
- Класс Controller становится \Brevis\Controller и находится в core\Controller.php
- Класс Controlles_Home становится \Brevis\Controllers\Home и находится в core\Controllers\Home.php
- Класс Controlles_Test становится \Brevis\Controllers\Test и находится в core\Controllers\Test.php
Теперь в начале каждого класса пишем используемое пространство имён. У основных классов это:
PhpStorm сразу начинает подсвечивать нам все использования Exception и Fenom как неправильные, потому что они вызываются внутри пространства имён, но без указания полного имени. Тут 2 варианта исправления:
- Пробежаться по всему коду и добавить к именам этих классов \, чтобы было \Exception и \Fenom
- Не страдать фигнёй, а использовать псевдонимы - возможность указать короткое имя для класса
Теперь переименовываем контроллеры и указываем в них псевдонимы:
Перемещаем autoload.php из класса \Brevis\Core в index.php, потому что пространство имён Brevis у нас скоро и само будет работать через автозагрузку и лишние require ему не нужны.
Index.php теперь выглядит вот так:
require_once dirname(__FILE__) . "/vendor/autoload.php";
$Core = new \Brevis\Core();
$req = !empty($_REQUEST["q"])
? trim($_REQUEST["q"])
: "";
$Core->handleRequest($req);
Метод \Brevis\Core::handleRequest() переписываем, убирая всякие проверки файлов. Нам нужно проверять только наличие класса, используя get_class()
:
public function handleRequest($uri) {
$request = explode("/", $uri);
$className = "\Brevis\Controllers\\" . ucfirst(array_shift($request));
/** @var Controller $controller */
if (!class_exists($className)) {
$controller = new Controllers\Home($this);
}
else {
$controller = new $className($this);
}
$initialize = $controller->initialize($request);
if ($initialize === true) {
$response = $controller->run();
}
elseif (is_string($initialize)) {
$response = $initialize;
}
else {
$response = "Возникла неведомая ошибка при загрузке страницы";
}
echo $response;
}
Как видите, мы определяем полное имя загружаемого контроллера, проверяем его наличие, а если такого контроллера нет - загружаем \Brevis\Controllers\Home
.
В общем, вся логика осталась прежней, а количество кода сократилось. Нет ручной работы с файлами, нет никаких require, вся работа по подключению классов лежит на autoload.php. Соотвественно, и параметр controllersPath из системного конфига пропадает.
Осталось добавить и наш собственный проект в автозагрузку. Для этого меняем composer.json вот так:
{
"name": "Brevis",
"autoload": {
"psr-4": {
"Brevis\\": "core/"
}
},
"require": {
"php": ">=5.3.0",
"fenom/fenom": "2.*"
}
}
Блок autoload указывает, что загружать дополнительно, кроме установленных пакетов. Ключ psr-4
указывает, как именно загружать наш проект, и указывает директорию core/
как основную для пространства имён Brevis
.
Запускаем
php composer.phar update
и наши классы попадают в автозагрузку. Всё должно работать, смотрим изменения на GitHub .
Заключение
Вот мы и переписали наш проект в соотвествии с последними стандартами в мире программирования на PHP. Согласитесь, было не так уж и страшно?Зато теперь наш код чистенький, опрятненький, соотвествует стандартам и отлично работает!
На следующем занятии мы установим через Composer xPDO 3.0 (да-да, он уже переписан и поддерживает namespaces, хоть пока и только в dev-ветке) и подключим его к нашей БД.
Напишем схему, сгенерируем по ней модель и создадим пару таблиц.
2014Как установить Composer на OpenServer ?
Наверное наиболее часто задаваемым вопросом является использование и установка утилиты Composer. Это де-факто стандарт в области менеджеров зависимостей для PHP. При работе с ним можно не бояться об использовании старых библиотек, которые использует ваш проект, ведь Composer установит нужные библиотеки за вас! В этой статье я не буду рассматривать как использовать этот замечательный инструмент, но расскажу как настроить его взаимодействие с OpenServer.
Обычно, при попытки установить Composer на Windows с установленным и запущенным OpenServer"ом вызывает проблему: Composer не хочет устанавливаться по причине ошибки openssl, которая в вашем проекте выключена.Конечно же, при открытии php.ini через openserver вы обнаружите что соблюли все требования, однако Композер все равно будет ругаться.
Решить это можно довольно просто, всего в 3 шага:
- Шаг 1
- устанавливаем нужные нам версию PHP и Apache в настройках openserver"а.
Помните! Версия должна быть не ниже PHP 5.3.2! - Шаг 2
- В OpenServer открываем: Дополнительно -> Конфигурация -> PHP .....
Проверяем наличие раскомментированного extension=php_openssl.dll - Шаг 3
- Включаем Консоль OpenServer"a: Дополнительно -> Консоль.
Коммандами консоли windows переходим в папку используемого php. Я использую php-5.5.6 и моя команда выглядит так: cd modules/php/PHP-5.5.6/Затем выполняем комманду:
Php -r "readfile("https://getcomposer.org/installer");" | php
После чего, если все успешно вы увидите надпись:
All settings correct for using Composer Downloading... Composer succesfully installed to: /Composer.phar User it: php composer.phar
Готово! Composer установился и набрав комманду:
Php composer.phar -V
Вы должны увидеть запись подобного рода:
Composer version
Echo @php "%~dp0composer.phar" %*>composer.bat
Она создаст.bat файл и в дальнейшем можно будет работать без указания php composer.phar, просто указывая composer Т.е. команда проверки версии (которая была выше) будет выглядеть так:
Composer -V
Что согласитесь гораздо удобнее.
Меня зовут Андрей Николаев , я разработчик-фрилансер с более чем четырехлетним опытом работы в сфере веб-технологий. Последнее время занимаюсь разработкой и поддержкой lowload и midload проектов, разработкой веб-сайтов на платформе 1С-Битрикс, Yii, Laravel . Предоставляю услуги как разработчика сайта, так и консультанта , а при необходимости и менеджера проекта со стороны заказчика.
Обо мнеСкачивай себе на телефон, чтобы ничего не забывать и никуда не опаздывать.
Android
Timetable
Красивое и интуитивно понятное приложение для управления школьной жизнью. Можно внести расписание, домашние задания, экзамены и даже каникулы. Приложение может синхронизироваться со всеми вашими Android-устройствами, а во время занятий само перейдёт в беззвучный режим.
Школьный дневник
В этом электронном дневнике можно вести расписание, указывая имя и телефон преподавателя, а также место проведения урока. Чтобы точно ничего не забыть, в приложении есть виджеты на главный экран телефона. Также существует возможность вести заметки по предметам и проставлять по ним оценки. Но, пожалуй, самая приятная функция - вычёркивание выполненных домашних заданий.
LightSchool
Позволяет не только вести расписание и записывать домашки, но и отслеживать время до начала либо окончания урока. Особенность - наличие теоретических материалов. Если вдруг забыл, как находить синус угла, то можно посмотреть прямо в приложении.
Расписашка
Не очень красочное, но многофункциональное приложение. В нём можно составить расписание и экспортировать его в календарь на устройстве. Можно просматривать график занятий на неделю или сразу несколько и выводить виджет с напоминалками на главный экран. Во время урока приложение автоматически включает беззвучный режим, а к домашним заданиям можно устанавливать сроки выполнения.
Расписание - школьный планировщик
Суть приложения: один пользователь публикует расписание своей школы, чтобы его однокашники могли потом найти готовый график занятий. Удобно! Жаль, что сервисом пользуются пока немного людей. Зато есть виджет и сканер QR-кодов.
iOS
iШкола
Позволяет создать красивое разноцветное расписание с указанием кабинетов, где будут проходить занятия. Удобно записывать задания: можно просто сфотографировать доску или надиктовать голосом. И ещё одна суперполезная функция: можно вносить оценки по предметам и рассчитывать средний балл. Приложение поддерживает русский язык, работает синхронизация с iCloud.
iStudiez pro
Позволяет составлять расписание с повторяющимися уроками. Каждому предмету можно присвоить свой цвет - так в дальнейшем будет проще ориентироваться в расписании. Можно вносить в календарь каникулы и выходные, а также сохранять полезную информацию о одноклассниках и преподавателях.
Class Timetable
Радужный планировщик для учащихся. Стандартный набор функций включает в себя расписание с напоминалками и перечень домашних заданий. Но есть и интересная особенность: приложение работает не только на iPhone и iPad, но на Apple Watch. Удобно, если помимо учёбы, есть ещё спортивные секции и надо успевать везде.
Grade Hound
Календарь для школьников и студентов с возможностью маркировки предметов по цветам и проставлением оценок по предметам. Изюминка: временные графики, показывающие, сколько времени вы потратите на тот или иной предмет. Минус: не поддерживает русский язык.
Расписание занятий – Timetable
Ещё один помощник для учеников, которым не хватает организованности. Можно составлять график занятий с повторяющимися или чередующимися неделями, делиться им с друзьями и записывать домашние задания. Благодаря удобному виджету, даже не требуется разблокировать устройство для быстрой проверки расписания.
Расписание Фоксфорда
Поклассовое расписание занятий в Домашней школе и экстернате Фоксфорда находится на сайте в разделе «Учебный процесс».
Выберите свой класс и нажмите «Подробнее». Вы увидите в какой день недели и какое время проходит тот или иной урок и сможете внести расписание в свой электронный планировщик.
Также в начале учебного года ученики получают расписания в виде удобных pdf-таблиц.
Все домашние задания хранятся в Личном кабинете ученика. Нужно лишь выбрать курс и номер занятия.
О новых и уже выполненных задачах напомнит дашборд. Из него можно в один клик перейти к выполнению задания.
Ну а если ученик забудет о каком-нибудь уроке или домашнем задании, ему об этом тут же напомнит . Надёжнее любого приложения! :)