На даний момент 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() – виклик цієї функції обов’язковий в тезі – інакше адмінка не буде працювати (розуміє лише один параметр – 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
    • Доповнити вимога-лист
    • Зробити редагування по FTP опціональним
    • Додати підтримку інших WEB-серверів, крім Apache
    • Додати генерацію thumbnail’ів для картинок
    • Додати можливість підключати інший WYSIWYG
    • Додати мультимовність
    • Додати розділ довідки в адмінці
    • Створити інсталятор
    • Позбавити web-майстра від необхідності змінювати .htaccess
    • Дати можливість редагувати CSS файли з адмінки
    • Стиснути всі JavaScript’и
    • Протестувати систему і пофіксити баги
    • Провести рефакторинг коду
    • Намалювати свій шаблон

    Відомі баги

    • IE6, IE7, IE8 – ці питання до розробників даних програмних продуктів 😉
    • Після закінчення сесії при спробі редагувати сторінку відображається повідомлення “Wrong Action”

    Власне весь список дивимося на Code-Google, голосуємо там же 😉

    Вимоги

    Поки повний список вимог ще формується, але на даний момент відомо наступне:

    • PHP 5.2+
    • Apache mod_rewrite

    Викачуємо

    На даний момент скачати iCMS можна зі сторінки Google Code:

    Downloadlast versioniCMS

    Або з мого блогу:

    Downloadversion 0.1iCMS

    Якщо ж Ви знайомі з SVN’ом – то милості прошу за самими останніми оновленнями.

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