На даний момент 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>
Дана зміна може знадобитися в двох випадках:
Тепер перейдемо до кастомізації – все оформлення у нас лежить в директорії 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