iCMS – CMS не такая как другие // PHP
На данный момент CMS системой никого не удивишь, но что-то мне захотелось создать свой велосипед, но не совсем обычный…
И так, основная идея – создать мини CMS, с максимально “прозрачной” админкой и структурой, и сделать упор на дружелюбность по отношению к неопытному пользователю.
Админка
Начнем с “прозрачной” админки, для этой цели решил не создавать громоздкую админ панель, она будет выглядеть вот так (кликабельно):
- 0 – кнопка которая отображает/прячет админку
- 1 – создать/редактировать запись
- 2 – меню для редактирования оформления
- 3 – меню для редактирования секций (о них позже)
- 4 – кнопка удаления записи
- 5 – выход из админки
А как же пользователь попадет в такую чудо-админку? Я решил отойти от стандартной процедуры авторизации (посредством связки логин/пароль из файла пароли.txt на рабочем столе), по этой причине Вам хватит правильной ссылки на админку типа /this-is-true-admin-link-please-remember-it.html, которую Вы сможете занести в букмарки…
Таким образом ходим по сайту, смотрим – “Ага, вот страничка которую хотел подредактировать” – клик по букмаркам – мы в админке, нажимаем “Редактировать” и видим WYSIWYG редактор – WYMeditor (кликабельно):
Если же Вам необходимо создать новую страницу – то достаточно будет указать желаемый URL и система сама предложит создать такую страницу (аналогично как сделано в Wiki).
Структура
Теперь стоит обратить внимание на “прозрачную” структуру, что я под этим подразумеваю – это значит, что обращаясь к адресу вида http://domain.com/news/happy-new-year.html Вы увидите содержимое файла, который и на FTP лежит по тому-же адресу – /news/happy-new-year.html (за исключением верстки – лишь контент), т.е. никаких заморочек – особенно если Вы, либо Ваш клиент, привыкли править всё по FTP (да-да данная CMS построена на файлах).
Кстати, и редактирование, и заливка файлов происходит через FTP аккаунт – это на тот случай если хостинг кривоват – и web-сервер создавая/редактируя файлы не дает права для FTP пользователя (ну и обратная ситуация – нет необходимости разрешать web-серверу редактирование файлов).
Каталог CMS выглядет следующим образом:
-\ mysite
|--\ application - тут сама система
|--\ css - оформление сайта - CSS да картинки
|--\ include - HTML разметка живет тута
|--\ js - различные javasript'ы (jQuery включен в поставку)
|--\ section - место обитания секций
|--\ upload - сюда заливаются файлы и картинки
|- .htaccess
|- error404.html - отвечает за вывод 404-ой ошибки
|- favicon.ico
|- index.html - выводится по умолчанию
|- index.php - этот файл так же используется для конфигурирования системы
|- readme.txt
|- robots.txt
Фичи
Теперь о фичах для web-мастера, начну с deployment’a – данная процедура состоит из копирования папки с iCMS да изменения лишь одного файла – index.php:
// FTP настройки обычно предоставляет хостинг /* FTP START */ $options[ICMS_FTP]['host'] = 'domain.com'; $options[ICMS_FTP]['port'] = 21; // стандартный порт, зачастую не меняем $options[ICMS_FTP]['user'] = 'username'; $options[ICMS_FTP]['pass'] = 'password'; $options[ICMS_FTP]['path'] = 'htdocs'; // папка где лежит сайт $options[ICMS_FTP]['active'] = false; /* FTP END */ $options[ICMS_ADMIN] = 'this-is-true-admin-link-please-remember-it'; // ссылка на админку $options[ICMS_PATH] = '/'; // изменяем если система будет находиться в директории, // т.е. http://domain.com/icms/
К сожалению, возможно Вам так же потребуется изменять файл .htaccess – и указать правильный путь к Вашему сайту (см. на mysite):
<IfModule mod_rewrite.c> RewriteEngine On Options +FollowSymlinks Options -Indexes RewriteBase /mysite/ RewriteCond %{REQUEST_URI} !^/mysite/js/ RewriteCond %{REQUEST_URI} !^/mysite/css/ RewriteCond %{REQUEST_URI} !^/mysite/upload/ RewriteCond %{REQUEST_URI} !(\.php|\.ico)$ [NC] RewriteRule ^.*$ index.php [NC,QSA,L] </IfModule>
Данное изменение может понадобиться в двух случаях:
- Вы устанавливаете систему в поддиректорию
- Вы устанавливаете систему на поддомен, с больно хитрым хостингом (поддомен раскидываются посредством .htaccess’а лежащего в корне домена)
Теперь перейдем к кастомизации – всё оформление у нас лежит в директории include – это обычные PHP файлы содержащие HTML разметку, кроме оной мы так же можем (должны) использовать ряд PHP функций:
- toolbar() – вызов этой функции обязателен в тэге <head> – иначе админка не будет работать (понимает пока лишь один параметр – ajax – позволяет в режими пользователя подгружать контент страниц через AJAX)
- placeholder() – это главная чудо-функция именно она отвечает за то, чтобы при обращении к URL: http://domain.com/path/to/your/content.html был подгружен файл /path/to/your/content.html (по умолчанию подгружается index.html)
- load() – вспомогательная функция – алиас для include
- head() – подключает файл include/header.php
- footer() – подключает файл include/footer.php
- sidebar() – подключает файл include/sidebar.php
- menu() – подключает файл include/menu.php
- section() – вспомогательная функция – подключает файлы из директории section, если это необходимо (см. ниже)
- path() – возвращает значение $options[ICMS_PATH] – помогает указывать правильные пути к Вашим CSS и JS файлам
Итого index.php у нас может выглядеть следующим образом:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" id="html"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>iCMS :)</title> <link type="image/x-icon" rel="icon" href="<?php path(); ?>favicon.ico" /> <link rel="stylesheet" href="<?php path(); ?>css/styles.css" type="text/css" media="screen" /> <?php toolbar("ajax=0"); ?> </head> <body> <div class="container"> <div class="content"> <?php placeholder() ?> <?php section('banner') ?> </div> </div> </body> </html>
Раскладки
Кроме всего прочего, система поддерживает лейауты – т.е. мы можем сказать, что если идет обращение к файлу about.html, то для него будем использовать шаблон из файла index2.php:
$options[ICMS_LAYOUT]['about.html'] = "index2.php";
Таким образом
Секции
Секции странная вещь – основной смысл – они подключают определенный php файл из директории section, при этом Вы можете отключать/изменять их для определенных страниц:
$options[ICMS_SECT]["banner"]["_default"] = "banner.php"; // установим значение по умолчанию для секции "banner" $options[ICMS_SECT]["banner"]["about.html"] = false; // при обращении к about.html мы ничего не выводим
TODO-лист
- Добавить поддержку Internet Explorer
- Дополнить requirements-лист
- Сделать редактирование по FTP опциональным
- Добавить поддержку других WEB-серверов, кроме Apache
- Добавить генерацию thumbnail’ов для картинок
- Добавить возможность подключать другой WYSIWYG
- Добавить мультиязычность
- Добавить раздел справки в админке
- Создать инсталлятор
- Избавить web-мастера от необходимости изменять .htaccess
- Дать возможность редактировать CSS файлы из админки
- Сжать все JavaScript’ы
- Протестировать систему и пофиксить баги
- Провести рефакторинг кода
- Нарисовать свой шаблон
Известные баги
- IE6, IE7, IE8 – эти вопросы к разработчикам данных программных продуктов ;)
- По истечении сессии при попытке редактировать страницу отображается сообщение “Wrong Action”
Собственно весь список смотрим на Code-Google, голосуем там же ;)
Требования
Пока полный список требований еще формируется, но на данный момент известно следующее:
- PHP 5.2+
- Apache + mod_rewrite
Скачиваем
На данный момент скачать iCMS можно со странички Code Google:
Либо с моего блога:
Если же Вы знакомы с SVN’ом – то милости прошу за самыми последними обновлениями.
P.S. Для оформления дефолтной поставки iCMS был использован бесплатный шаблон Dirtylicious