Антон Шевчук // Web-разработчик

iCMS – CMS не такая как другие // PHP

iCMS SoftBox

На данный момент CMS системой никого не удивишь, но что-то мне захотелось создать свой велосипед, но не совсем обычный…

И так, основная идея – создать мини CMS, с максимально “прозрачной” админкой и структурой, и сделать упор на дружелюбность по отношению к неопытному пользователю.

Админка

Начнем с “прозрачной” админки, для этой цели решил не создавать громоздкую админ панель, она будет выглядеть вот так (кликабельно):

iCMS Admin Mode

  • 0 – кнопка которая отображает/прячет админку
  • 1 – создать/редактировать запись
  • 2 – меню для редактирования оформления
  • 3 – меню для редактирования секций (о них позже)
  • 4 – кнопка удаления записи
  • 5 – выход из админки

А как же пользователь попадет в такую чудо-админку? Я решил отойти от стандартной процедуры авторизации (посредством связки логин/пароль из файла пароли.txt на рабочем столе), по этой причине Вам хватит правильной ссылки на админку типа /this-is-true-admin-link-please-remember-it.html, которую Вы сможете занести в букмарки…

Таким образом ходим по сайту, смотрим – “Ага, вот страничка которую хотел подредактировать” – клик по букмаркам – мы в админке, нажимаем “Редактировать” и видим WYSIWYG редактор – WYMeditor (кликабельно):
iCMS 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>

Данное изменение может понадобиться в двух случаях:

  1. Вы устанавливаете систему в поддиректорию
  2. Вы устанавливаете систему на поддомен, с больно хитрым хостингом (поддомен раскидываются посредством .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:

Downloadlast versioniCMS

Либо с моего блога:

Downloadversion 0.1iCMS

Если же Вы знакомы с SVN’ом – то милости прошу за самыми последними обновлениями.

P.S. Для оформления дефолтной поставки iCMS был использован бесплатный шаблон Dirtylicious

© Антон Шевчук 2007-2012