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

<!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

Другие посты на эту тему

  • No Related Post

37 Responses to “iCMS – CMS не такая как другие”

  1. Добавил в качестве конкурентов (и у меня свой движок тоже) :)
    http://kurapov.name/business/blog_engine

  2. @podarok:
    Еще проще, уровень сайтов-визиток…

  3. Штудер says:

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

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

  4. Игорь says:

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

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

    ErrorDocument 404 /index.php

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

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

  5. Stac says:

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

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

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

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

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

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

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

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

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

  6. Stac says:

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

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

  7. Kane says:

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

  8. COTOHA says:

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

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

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

  9. COTOHA says:

    кстати да. надо robots.txt править с учётом $options[ICMS_ADMIN]…

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

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

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

  11. romand says:

    cushycms.com – подход ещё проще

  12. @romand:
    Только она не автономная, и не известно останется ли бесплатной…

  13. RE says:

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

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

  14. AlYoung says:

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

  15. Stac says:

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

  16. Illusive says:

    Задумка интересная, но, ИМХО, нужно ее дальше развивать

  17. Mons says:

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

  18. KruGoZor says:

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

  19. COTOHA says:

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

  20. Eldarado says:

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

    • KruGoZor says:

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

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

  21. hell4opt says:

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

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

  22. hell4opt says:

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

  23. Radmus says:

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

  24. CTPAX says:

    nanocms.name все что нужно для сайта

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

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

  26. а ты баг пофиксил в яндекс классе? Я описывал какой

  27. [...] по закаулкам нашего доброго интернета и наткнулся на (i)CMS. Автор утверждает –  основная идея – создать мини [...]

  28. SEOшник says:

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

Leave a Reply

Copyright © 2007-2010, Anton Shevchuk. Powered by WordPress