Ела, изгрей -- TangraCMS. CMS за SEOs.

Posted / Публикувана 2008-12-05 in category / в категория: Tangra framework for PHP

След 2-3 месечно яко "копане" най-накрая позакръглих CMS-a, който пиша като модул към Tangra framework for PHP. В пристъп на вдъхновение и нечувана оригиналност съм го кръстил TangraCMS. Какво наложи появяването под слънцето на още един (yet another) CMS (би могъл да попита случайният непредубеден читател -- и с право)? Както се казва в много вицове за Шерлок Холмс: елементарно Уотсън. Ето какво:

  • страдам от изключително тежка форма на NIH синдрома (Not Invented Here, пояснявам за непрограмистите :-)). Бях правил известни опити да използвам други CMS-и като Media Wiki, Joomla и т.н. но се сблъсквах с неща, които не ми лазеха по нервите. В случая с Media Wiki -- wiki-тата не са точно CMS -- те са истински разкош, когато човек иска да направи лесно документация за даден проект, но за съжаление са толкова силно "центрирани" на тема "документация" и толкова неоудобни за вмъкване на custom програмни модули, че бързи се отказах (btw, използвам Media Wiki за документацията на Tangra framework и съм много доволен от него в тази му роля (да не ме разбере някой погрешно)). Разните CMS-и от типа на Joomla, честно казано, ми "образуват" киселини. Много са удобни ако ги използваш в стандартния им вариант, можеш да вдигнеш сайт за нула време, но отново ако се опиташ да пишеш модул/plug-in за тях и можеш да си скъсаш нервите от глупости. Явно e, че тези CMS-и са писани на принципа -- я да си направя CMS; я да го публикувам като open source; аууу, как ме насмърдяха всякакви хора да искат различни допълнения; я да направя допълненията (и понеже системата не е проектирана изначално модулна да ги поема лесно ще ги направя като кръпки -- по-бързичко е, а хората трябва да мирясат); ауу, то стана ебати мазалото, но нищо -- ще обясняваме, че "То така се прави и така е правилно". Всеки път като разгледам обаче подобен CMS и постоянно една мисъл ми отскача от стените вътре в черепчето: "Абе аланкоолу, не се прави така бе, защо сте си усложнили живота?!?!". Та така отпадна и Joomla-та и подобните на нея;
  • всеки уважащ себе си framework трябва да си има направени на него няколко приложения и може би най-важното от тях е CMS;
  • Тъй като напоследък съвсем оглупях и аз барабар Петко с мъжете започнах да се занимавам полекичка (поуекичка) със SEO, имах нужда от инструмент, който да ми помогне да реализирам идеите си и най-вече да ми позволява тестването им (в/срещу чичо Гугъл). Друг основен момент, е че исках да мога да направя "безпилотни" сайтове, т.е. такива, които "сами" се грижат за себе си и имат нужда от малко администриране (всъщност идеята е доста по-дълбока и включва възможността да се напишат "евристики", които да ме спамват с mail, когато усетят, че има ситуация в която има нужда от човешка намеса, т.е. когато изпаднат в такава ситуация).
Накратко основните идеи и функционалности на TangraCMS са:
  • основната концепция е "страница" (за разлика от другите CMS, където е "content item"). WWW е изграден от страници, не от content item-и. Дори понятието "сайт" е донякъде обезсмислено, защото нерядко "сайт" се дефинира като "колекция от страници на един домейн". В областта на SEO е много важно да може да се оптимизират отделните страници (което нерядко е затруднено при обикновените CMS-и по пристата причина, че не са ориентирани към страници). В контекстра на TangraCMS, страниците, които се управляват от него се наричат Virtual pages (за да се различават от обикновените страници, които представляват обикновен PHP или HTML файл).
  • content item-ите (CIs) са просто елемент на страницата. Един и същ content item може да е "link-нат" към една или повече страници -- т.е. избягва се създаването на дублирани CIs само, за да присъства същото съдържание на друга страница. Една страница може да съдържа (свързана към) един или повече CIs.
  • CIs могат да бъдат от различни типове (включително и дефинирани от потребителя на по-късен етап). На "популярния" е text/HTML, но съществуват също Integer, Date, Nomenclature и т.н.
  • Всяка страница е от даден тип/template. В template се дефинира какви и колко CIs могат да имат страниците от този тип (включително и кои са задължителни и кои незадължителни); дефинира се какви System Attributes (SAs) може/трябва да има страницата; кои менюта ще бъдат заредени; кой HTML template да се използва за визуализиране. Важно е да отбележа, че template на страница и HTML template на страница са две съвсем различни неща. "template на страница"  е PHP class, докато "HTML template на страница" е просто HTML (smarty) template файл. Най-просто казано -- PHP класа зарежда съдържанието на страницата, което по-късно се визуализира с използването на HTML template-а.
  • Менюта и категории са си съвсем отделни неща. В някои частни случаи, примерно osCommerce, категориите съвпадат 1:1 с менюто, но в общия случаи са нещо различно, макар и (че може да са) логически свързани. Всяка страница може да е свързана (категоризирана) към 0 или повече категории. По този начин получавате свободата ако не искате менютата да отговарят 1:1 със структурата/йерархията на категориите да ги направите както сметнете за добре (свободата е (най-)важно нещо. Като ученик, когато сме чели "Под игото" и подобни, много се бях чудил: "Абе кво толкова й се кефите на тая свобода?!". След време влязох в казармата и разбрах :-))
  • TangraCMS позволява изграждането на сайт, който съдържа едновременно обикновени и virtual страници. Т.е. можете да си имате в DocumentRoot-a (и навътре) обикновени index.php, user_reg.php и vary_custom_page.php и в същото врeме да имате дефинирани виртуални страници: index2.php, my-new-content/, news.html. Какво е различното от обикновените CMS? Повечето от тях разчитат на mod_rewrite Apache модула, за да "префасонират" заявките. Ако насочите броузера си към mysite.com/my-new-content/ mod_rewrite ще я направи на mysite.com/index.php?page=my-new-content/, т.е. ще я насочи към index.php, което всъщност е основният файл на CMS, където е струпана цялата му функционалност (в повечето случаи индиректно (зарежда допълнителни файлове в зависимост от нуждата), но понякога директно/твърдо -- всеки път зарежда всичко, което може да потрябва и после юзера се чуди 'що нещата стават бавни в един момент). Дотук всичко е ОК. Ако обаче насочите броузера си към mysite.com/vary_custom_page.php mod_rewrite отново ще се намеси и ще насочи към mysite.com/index.php?page=vary_custom_page.php, а такава страница в CMS-а няма дефинирана и съответно ще получите 404 Page not found. В контраст на това, TangraCMS разчита на прихващане на 404, т.е. -- ако съществува обикновена страница Apache + PHP си и подават контрола, ако не -- подават го на tangra_cms.php, който вече на свой ред си проверява дали си има при него дефинирана такава страница и ако я намери -- зарежда и template, той си прави каквото прави и накрая показва HTML-a. TangraCMS учтиво ще ви удари през ръцете с бейзболна бухалка с наковани по нея пирони и бръснарски ножчета, ако се опитате да създадете виртуална страница с path като на съществуващ файл/директория. Тестовете досега показаха, че няма особена разлика в бързодействието между работата на принципа на прихващането на 404 и използването на mod_rewrite, но честно казано -- тези тестове не бяха особено изчерпателни и прецизни. За всеки случай съм си оставил възможност ако се окаже, че има съществена разлика -- CMS-a да може да се направи да работи в режим на mod_rewrite. Всъщност, защо е важно да можете да имате обикновени и виртуални страници едновременно? Елементарно Уотсън -- ако сте PHP програмист и искате да създадете някаква специфична функционалност за дадена единична страница -- много по-лесно ще ви е да си направите един PHP файл и да си сложите в него каквото поискате, вместо да се занимавате да правите class за template на страница, който да бъде използван само от една страница (в повечето "нормални" CMS-и това е невъзможно или силно затруднено). Най-добрият пример за единична страница, която изисква множество специфични функционалности е началната. Примерно на нея ще искате да показвате две карета с новини от две различни категории, pool, прогнозата за времето и курса на долара (изтеглени динамично от отдалечен ресурс), по някой пост от RSS feed на любимите си блогове и т.н. Би било безумие да се направи някакъв всемогъщ template на страница, който да може да предвиди какво би искал всеки един юзер и да му даде възможност за всякакви настройки. Безумие е, не толкова защото е трудно (а то си е), а защото настройката ще е толкова сложна, че средностатистическият потребител няма да може посмъртно да се ориентира и оправи (отделен е въпроса, че могат да се направят типови templates за челната страница, които ще задоволят 80% от потребителите).
  • генериране на sitemap.xml -- Google обича sitemap-овете. След като за няколко сайта се наложи на ръка да направя sitemap.xml определено мога да кажа, че сега ми олекна. Генерирането на sitemap файла има два режима: "Manual" и "Automatic + manual". При "Manual" sitemap.xml се обновява само ако инициирате това ръчно. При "Automatic + manual" се обновява всеки път, когато google (или някой друг) се домъкне и го поиска И има промени (създали сте нови страници; изтрити/преименувани страници и т.н.). Всяка страница си има собствени настройки за sitemap -- дали да бъде включвана, приоритет/тегло, честота на промяна.
  • всеки content item (ако е указано в типа му) може да има два допълнителнилни "специални" елемента -- изображения/снимки и файлове/attachments. Например в content item от тип text/html вие можете да си слагате снимки вътре в съдържанието. Можете да си слагате и линкове към файлове. Тогава за чий х__ трябва да може и отделно? Well, това е част от плана за бъдещо развитие на TangraCMS и превръщането му (с инсталация на допълнителни (под)модули) в палав продуктов каталог, а на по-късен етап и в електронен магазин. Накратко става дума за това, че има някои случаи, когато снимката трябва да се сменява в зависимост от даден параметър. Например ако имате продукт "тениска Cool" и тя е в различни цветове -- ще може в зависимост от това какъв цвят е избрал купувача да му се показва съответната снимка. В обикновеното съдържание, където снимката е вмъкната статично -- това е невъзможно.
Има и още някои неща, но този пост и без това стана бая дълъг, затова ще се спра на някои бъдещи шукар функционалности, които смятам да подхвана в близките дни:
  • статистика за посещенията от ботове като Google, Yahoo и т.н. -- ще е полезно за SEO нужди да виждате, кога и какво и колко често обхожда бота;
  • google triggered content publishing (GTCP ) -- подготвяте 10 страници, но не ги публикувате, а казвате да се управляват от GTCP модула. Така всеки път като се домъкне google ще вижда по нещо ново и ще си каже: "Бреййй, тия сериозни хора, постноянно нов content имат";
  • RSS feed;
  • White Hat cloacking -- представяне на различно съдържание на ботовете, но не, за да ги излъжете, а за не ги излъжете. Пример -- имате страница, която има IP delivery и показва, примерно, за  потребители от България едно съдържание, насочено по градове, за всички останали случайно подбрано. Идва google от ip 66.нещо.си и всеки път ще вижда различно (и ще си каже "Копелета!"). С настройките на cloacking-a ще можете да укажете да му показва едно и също или колко често да се сменя;
  • проследяване пътя на потребителите -- landing page, на къде отиват, fork-wane и т.н. Изготвяне на статистика за това;
  • много други, но вече се изморих да пиша…
Ето малко screenshot-ове от админ панела (дизайна си е типично моя, OEM-ски, но за бъдеще ще трябва да сложа нещо по-секси…)
Списък на страниците в дадена категория:
Управление на виртуална страница:
General settings:
Managing virtual page template "Normal page"
Categories page
Сайтът, които ще използвам за тестване на TangraCMS е базиран на една моя стара мечта да имам място, където да публикувам PHP новини и review-тa. Вече е онлайн, макар че има още бая "плът" да се слага -- phpphp.org.

2 Responses to “Ела, изгрей -- TangraCMS. CMS за SEOs.”

  1. Миглен Says:

    Поздравления Банков! Радвам се, че разработваш всичко това и го предлагаш безплатно.

  2. Ogre's blog » Ела, изгрей — TangraCMS. CMS за SEOs. Says:

    […] Тази публикация беше преместена на ново място: Ела, изгрей --- TangraCMS. CMS за SEOs […]