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

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

42 thoughts on “iCMS – CMS не такая как другие”

  1. Оно конечно хорошо по правильному урлу зайти и в админке оказаться, но есть великий и ужасный гугль. Есть какой-то механизм защиты от сего поискового монстра?

    Просто сейчас уже не помню у кого читал про то что гугльАналитикс может помочь гуглу добраться и до страниц на которые и ссылок нигде нету.

  2. Прикольная идея – без БД!

    У меня предложение дописать к .htaccess вот такие строки:

    ErrorDocument 404 /index.php

    Ну, вдруг нету реврайта, а так система тоже будет работать.

    И ещё такой вопрос: а с чем связан выбор WYMeditor? В чём его принципиальное отличие от других?

  3. Минималистичны CMS хорошая штука. Занимаюсь сейчас подбором таких для себя и для Клиентов.

    В iCMS (по описанию) понравилось исполльзование WYMEDITOR, секции и идея с секретной ссылкой.

    В процессе поиска простых CMS’ок нашел:

    CMSimple – не все с ней просто для неквалифицированного Клиента.

    Rumba Easy, Rumba Wiki и т.д. – классные, компактные и быстрые программы, но Клиенту сайт на их базе не отдашь – требуется знание HTML. Хотя есть, форма обратной связи и “прайслист-корзина” для организации простого и-магазина.

    KandidatCMS – самое просто, что я видел. Довесил WYSIWYG редактор, подправил генератор URL вновь создаваемых страниц и можно давать Клиенту. Но, как и предыдущих нет раздела (модуля) новостей, который нужен почти всем. Формы обратной связи нет.

    PluckCMS – хороший внешний вид админки (для Клиента), есть модуль блога и фотоальбомов. Есть форма обратной связи. Нет ЧПУ.

    Кстати, генерация URL важна еще и потому, что сайт у Клента уже может быть старый, но проиндексированный и URLы страниц хорошо бы сохранить при постановк сайта на CMS.

    Итого, мой минимум для CMS сайта-визитки: ЧПУ (с возможностью ручного задания URL конкретных страниц), форма обратной связи (также используемая для отпавки заявки, если нет и-магазина), модуль новостей, WYSIWIG-редактор для правки контента с поддержкой таблиц.

  4. В readme.txt хорошо бы поместить ссылку на сайт проекта, хоть на эту страницу.

    Пролежит дистрибутив месяц на харде, потом и концов не найдешь, где новую версию искать, кто автор, где смотреть доки. :)

  5. Если я не ошибаюсь, гуглбар отправлят просмотренные сайты в гугл, таким образом ссылка на админ панель всё же может быть проиндексирована…

  6. а чё layout’ы называются “слоями”? это ж типа раскладки, а не слои.

    ещё я б – чтоб к словам поцепляться – папку include назвал includes. типа ж там много разного :)

    ага. ну и “скачать плагин можно”… копипастер :)

  7. @All:
    Надо будет повоевать с поисковыми системами…

    @Stac:
    Спасибо за пожелания, readme.txt исправлю…

    @COTOHA:
    Статью чутка подправил

  8. Я понимаю что вопрос из разряда “погугли”, но все же)
    Есть локаль, нужно сделать в ней список ресурсов.
    Желание чтобы список:
    а) отображался на доной странице как можно компактнее (не блоговые новости, а одна строка на ресурс)
    б) содержал отображение жив сайт в данный момент или нет
    в) обновления складывались бы в хмл (выдавались в рсс фид)
    г) ну были бы записи разворачивающимися было бы просто замечательно.

    Конечно, я должен скачать 10-20 ЦМСок и попробовать, а лучше написать все это самому, с привличением jQuery, но вдруг это есть уже?
    Спасибо!

  9. to Stac: а вы не присматривались к CMS sNews? вроде соответствует вашим критериям.

  10. 2 AlYong: Я не присматриваюсь к CMS, требующие срвер БД. Имхо, это только лишний гемор. Для простых сайтов (до нескольких тысяч страниц) БД, на мой взгдяд не нужна.
    Если говорить о блогах, то я присматривался к Rumba Blog, Bloxsom (очень необычный подход применен тут).

    1. а какой это гемор? Кто вы вообще что так смело высказываете свое мнение?
      Большинство cms работают на БД

  11. Все класс но негоже иметь тему блога которая не переведена. Перевел бы ;)

  12. Охох Антон это очень круто!
    когда ты её доделаеш?)))))
    Такая cms мне крайне необходима)
    С меня пыво)

  13. 2 mixadior
    хм. тебя басков на очередной драм’н’бас-рейв парти не пустил?

  14. “- Добавить поддержку Internet Explorer”
    ИМХО это лишнее.
    Проще поставить клиенту Файрфокс в подарок совершенно бесплатно! ;)

    1. Гхм..и всем посетителям заадно будете ставить? (лично?)

      надоели фанатики.извиняюсь

  15. не работает у меня редактировать страницы :( не понял цмску

    1. Редактирование будет работать только с FTP сервером – т.е. только когда ЦМС уже залита на хостинг…

  16. когда следующая версия будет? для блога подойдет?

  17. Скажите, а вы сравнивали по производительности с CMS построенными на базах данных? понятное дело, что у этой CMS совершенно другие цели, но все же интересно.

  18. непонятна логика отсутствия базы. Кто будет править сайт через FTP? разве что гик какой нить…

    1. Система сама работает по FTP, да и пользователей которые умеют пользоваться FTP гараздо больше, чем тех кто понимают админку того же wordpress’а…

  19. “Секретный” адрес админки без пароля — это не смешно даже. Полно хостингов, на которых логи посещений индексируются поисковиками. Дальше объяснять нужно?

  20. здравствуйте!
    прошу выскажите пожалуйста ваше мнение…
    вы считаете меньше аппаратная нагрузка на web сервер(процессор, оперативка) при активном использовании в качестве базы данных файловую систему (fopen..fread…итп ) или при активном использовании mysql (INSERT…SELECT…итп) …
    ваше мнение очень ценно и очень жду вашего ответа если вас не затруднит !
    спасибо за внимание !
    с уважением Эдуард Гаус

  21. привет всем)
    может кто подскажет- при переносе даной цмс на другой домен в каких местах что прописывать чтоб админка работала?
    доступ по домену происходит нормально( до контентной части)
    до админской части проиходит доступ на авторизацию, однако после авторизации пустая страничка- что может быть не так???!
    заранее спасибо за скорый ответ)))

  22. Уже хотел качать (ибо iCMS – то что искал), но вспомнил, что на моём хосте FTP нет ;) Через WinSCP всё закидываю. Очень жаль.
    По поводу БД – удобно тем, что выбрки, редактирование и удаление контента через саму БД делаешь, а не руками, как в случае с файлами. Т.е. БД – это хорошо, но в моём случае – невозможно :( .
    Спасибо за содержательные статьи.

  23. Скажите, она работает быстрее LightProSystem? Ато мне надо сайт делать уже для практики, она поддерживает шаблон?

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.