Антон Шевчук // 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 у нас может выглядеть следующим образом:

&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; id=&quot;html&quot;&gt;
&lt;head&gt;
    &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;
    &lt;title&gt;iCMS :)&lt;/title&gt;
    &lt;link type=&quot;image/x-icon&quot; rel=&quot;icon&quot; href=&quot;&lt;?php path(); ?&gt;favicon.ico&quot; /&gt;    
    &lt;link rel=&quot;stylesheet&quot; href=&quot;&lt;?php path(); ?&gt;css/styles.css&quot; type=&quot;text/css&quot; media=&quot;screen&quot; /&gt;
    &lt;?php toolbar(&quot;ajax=0&quot;); ?&gt;    
&lt;/head&gt;
&lt;body&gt;
&lt;div class=&quot;container&quot;&gt;
&lt;div class=&quot;content&quot;&gt;
    &lt;?php placeholder() ?&gt;
    &lt;?php section('banner') ?&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;

Раскладки

Кроме всего прочего, система поддерживает лейауты – т.е. мы можем сказать, что если идет обращение к файлу about.html, то для него будем использовать шаблон из файла index2.php:

$options[ICMS_LAYOUT]['about.html']         = &quot;index2.php&quot;;

Таким образом

Секции

Секции странная вещь – основной смысл – они подключают определенный php файл из директории section, при этом Вы можете отключать/изменять их для определенных страниц:

$options[ICMS_SECT][&quot;banner&quot;][&quot;_default&quot;]   = &quot;banner.php&quot;; // установим значение по умолчанию для секции &quot;banner&quot;
$options[ICMS_SECT][&quot;banner&quot;][&quot;about.html&quot;] = 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-2017