Защо да изберем Drupal?

Posted by Stanislav Nedelchev on Fri, 06/12/2009 - 23:17

Какво ме накара да избера Drupal пред всичко друго.
Може би Вие си задавате същият въпрос който си задавах и аз преди време.
Каква система за управление на съдържанието (CMS) да избера.
Дали да не опитам да си напиша моя? Или пък да използвам някой PHP MVC Framework и на базата на него да си направя моя система за управление на съдържанието.
Тук ще дам и няколко цитата защо аз примерно се отказах да напиша моя собствена система. Както много хора правят в началото.
Тук ще цитирам едно мнение на автора на книгата Pro Drupal Development.
Който също така е един от основателите на компанията http://www.lullabot.com/
Която изгражда новите сайтове на sony и техните изпълнители.
The journey of a software developer is an interesting one. It starts with taking things apart
and inspecting the isolated components to try to understand the whole system. Next, you
start poking at and hacking the system in an attempt to manipulate its behavior. This is how
we learn— we hack.
You follow that pattern for some time until you reach a point of confidence where you
can build your own systems from scratch. You might roll your own content management
system, for example, deploy it on multiple sites, and think you’re changing the world.
But there comes a critical point, and it usually happens when you realize that the
maintenance of your system starts to take up more time than building the features. You
wish that you knew back when you started writing the system what you know now. You
begin to see other systems emerge that can do what your system can do and more. There’s a
community filled with people who are working together to improve the software, and you
realize that they are, for the most part, smarter than you. And even more, the software is
free.
This is what happened to us and maybe even you. It’s a common journey with a happy
ending—hundreds of developers working together on one simultaneous project. You make
friends; you make code; and you are still recognized for your contributions just as you were
when you were flying solo.

Тук един цитат от катедралата и базарът.
2. Добрите програмисти знаят какво да пишат. Великите знаят какво да пренапишат (и пре-използват).
Не претендирам да съм велик програмист, но поне се опитвам да подражавам на такъв.
Характерен белег на великите програмисти е градивният мързел.
Те знаят как да получат нещо не с оглед на усилията, които трябва да се вложат,
а с оглед на резултатите, и знаят че почти винаги е по-лесно да се започне
от добро частично решение, вместо от нищо.

Източник : http://catb-bg.sourceforge.net/html/catb-bg-2.html
След като реших че няма да създавам моя собствена система реших да потърся какви готови решения има. Оказа се че има доста системи за управление на съдържанието между ,които мога да избирам.
И аз опитах няколко от тях преди да разбера че най-доброто решение е Drupal.
Тук ще се опитам да опиша някои ключови моменти от това което ме накара да избера Drupal:
Drupal е система с отворен код. Вие можете да четете и модифицирате кода свободно.
Можете да напишете допълнение за определен модул а дори и за ядрото. Да го публикуват и то да стане част от системата.
drupal се развива от общност от цял свят.
В разработката му участват хиляди хора а във форума стотици хиляди.
Има информация за почти всеки проблем който може да възникне.
А за компании има платена поддръжкаот фирми от цял свят та дори и от компанията на основателя на drupal.
drupal се подобрява с всяка изминала версия за разлика от други системи които са в застой и накрая просто изчезват.
На drupal са се доверили комапнии като :Yahooo, IBM, NASA, Forbes, Nike, MTV, Warner Bross, Sony,Novell, Sun Microsystems и много други. Зашо вие или вашата компания да не е една от тях.
По голям списък може да намерите на сайта на основателя на drupal тук: http://buytaert.net/tag/drupal-sites
Сега може да преминем и на конкретни неща от самата система.


От гледна точка на крайният потребител.


Drupal, може да не идва с приятен графичен интерфейс като някои други CMS-и например, но ако му отделите малко повече време съвсем скоро ще разберете че той е изпълнен с функционалност.
Това са неща които наистина могат да Ви впечатлят:

Taxonomy - Таксономия (категоризация):
Системата за категоризация в drupal е доста сложна но в същото време много гъвкава и позволява кръстосана категоризация и свободно маркиране, което е рядкост в CMS системите.
С taxonomy може да създадете гръбнака на един Drupal сайт.

Модулна система - Plugins (плъгини):
Модулите са добавка към кода който идва от ядрото на drupal. И за разлика от много други системи Drupal е замислен още от самото начало да може да се разширява лесно.
И допълнителните модули се нтегрират перфектно с ядрото на drupal чрез hook система.
Научете повече за Drupals hooks – http://api.drupal.org
Drupal има над 2000 допълнителни модули и това ви дава възможност лесно и бързо да разширявате своя Drupal сайт.
Модулите могат да добавят функционалност от администраторски менюта,
до нов начин да създавате съдържание със Content Construction Kit (CCK) както и да извличате динамично данни по зададени ваши критерии с модула Views .
Може спокойно да създадете онлайн магазин с помощта на Ubercart.
Можете да разгледате модулите за drupal тук – http://drupal.org/modules

Търсещи машини:
Тук drupal наистина е много силен той е истински приятел на търсачките.
За справка напишете думата views което в буквален превод на български означава изгледи. И с изненада ще забележите че е на първо място в google.
Drupal от самото начало е създаден да бъде оптимизиран за търсещите машини.
Има и доста модули които също могат да ви помогнат да направите вашият сайт още по-добре да се индексира от търсачките.

Nodes / CCK / Views:
Съдържанието на Drupal е познатo като node (възел) .
Node е най малката градивна единица за съдържание в drupal.
Nodes са много добре разработени в drupal и много лесни за разширение. С помощта на CCK например. В инсталацията по подразбиране на drupal има има 2 основни типа node а те са story и page.
Разликата между тях е че в единия коментарите са разрешени и веднага се появява на първа страница а за другия тип съдържание не.
Вие може да създадете и собствен тип съдържание като например новина. Но ако искате да добавите нови полета към този тип съдържание ще трябва да използвате модула CCK.
Защото типовете съдържание по подразбиране в drupal имат само заглавие(rtitle) и тяло(body).За модула CCK може да прочете тук – Drupal CCK
А с модула Views можете да извлечете визуално без да пишете и ред код. Например само новини които са от определн автор и имат коментари например.
Повече за това как се работи с view може да прочетете тук - Drupal Views

Панели или модула Panels - http://drupal.org/project/panels
С негова помощ може да промените изгледа на вашата първа страница, както ти на всички останали страници без да напишете и грам код.
Разбира се всички тези неща могат да бъдат направени и със перфектно изградената система за темплейти и слоя темите в drupal.
В заключение мога да кажа че с помощта на тези 3 модула може да изградите много добре изглеждащ и работещ сайт за доста кратко време за , който много хора биха ви завидели.

Системата за контрол на достъпа:
Системата за контрол на достъпа в Drupal е брилянтна, което Ви позволява пълен контрол върху правата на потребителите и ролите от потребители.
Почти всичко за което може да се сетите може да го контролирате като права.
А ако случайно нещо липсва то лесно може да се добави.

За Разработчици:
Drupals hooks - drupal куките.
Така наречените куки ви позволяват да се закачите в почти всеки един момент от изпълнението на drupal да да промените неговото поведение или това на някой допълнителен модул.
Примерно с една такава кука :) като hook_menu със следният ред можете да добавите ваше собствено меню.

<?php
function hook_menu() {
  $items = array();
 
  $items['blog'] = array(
    'title' => 'blogs',
    'description' => 'Listing of blogs.',
    'page callback' => 'blog_page',
    'access arguments' => array('access content'),
    'type' => MENU_SUGGESTED_ITEM,
  );
  $items['blog/feed'] = array(
    'title' => 'RSS feed',
    'page callback' => 'blog_feed',
    'access arguments' => array('access content'),
    'type' => MENU_CALLBACK,
  );
 
  return $items;
}
?>

Със следния код пък може да добавите определи елементи към дадена форма преди тя да се визуализира:

<?php
function hook_form_alter($form_id, &$form) {
  if (isset($form['type']) && $form['type']['#value'] .'_node_settings' == $form_id) {
    $form['workflow']['upload_'. $form['type']['#value']] = array(
      '#type' => 'radios',
      '#title' => t('Attachments'),
      '#default_value' => variable_get('upload_'. $form['type']['#value'], 1),
      '#options' => array(t('Disabled'), t('Enabled')),
    );
  }
}
?>

Със следния код например може да се закачим преди записването на данните в базата данни. Да направим наша собствена валидация или да променим определени данни преди те да се запишат.

?php
function hook_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
  switch ($op) {
    case 'submit':
      if ($node->nid && $node->moderate) {
        // Reset votes when node is updated:
        $node->score = 0;
        $node->users = '';
        $node->votes = 0;
      }
      break;
    case 'insert':
    case 'update':
      if ($node->moderate && user_access('access submission queue')) {
        drupal_set_message(t('The post is queued for approval'));
      }
      elseif ($node->moderate) {
        drupal_set_message(t('The post is queued for approval. The editors will decide whether it should be published.'));
      }
      break;
  }
}
?>

Разбира се не бива да забравяме че думата hook се сменя с името на вашият модул.

Филирираща система:. Тук има някои противоречиви мнения.
Много хора не разбират как работи и точно за какво служи.
Със drupal идват 3 предефинирани филтъра.
Филтриран HTML
PHP Code – който в drupal 6 трябва да се включи допълнително.
И Full HTML който е добре да се дава право да го ползват само на тези на които наистина имате голямо доверие. Защото е предпоставка за XSS атаки. Ако не знаете какво представляват може да потърсите в Google.
По подразбиране е Filtered HTML в който не се допускат такива тагове(tags), които могат да навредят на сайта Ви,

Javascript библиотеката Query е вградена в drupal :
Ползва се от страшно много големи компании. Дори майкрософт ще я вкючват в последната версия на тяхната среда за разработка Visual Studio.
Jquery е много мощна библиотека със много плъгини. И много прилича на drupal.
Малка и лесна за разширение. Може би затова и в drupal е включена именно тази библиотека а не някоя от другите като prototype или mootools.
jQuery ви позволява да с много малко код да напишете много.
Мотото на библиотеката е Write less fo More.
Синтаксиса на Jquery за кратък код се чете лесно но ми се струва че от време на време ако не е форматиран добре може да изглежда доста странно.
Ето един пример.

$(document).ready(function(){
  $('div.hide-me').hide();
}); 

Този малък на пръв поглед кода ще скрие div с CSS клас hide-me когато документа е напълно зареден.
Също е интересно да се отбележи че самия сайт на jquery е задвижен от drupal.
Вижте пълния списък на jQuery плъгини - http://plugins.jquery.com/

Темите в drupal:
Но ще се опитам с кратки думи да обясня за какво става въпрос.
В drupal 6 вече може да създадете тема без дори да пишете код.
Такава тема може да бъде създадена само с CSS (Cascade Style Sheet).
Пример за това е темата която съм направил Drupal CSS Theme
Ако само това не ви стига и искате да промените нещата още.
Може да задълбаете малко в PHPtemplate това е шаблонната система която идва по подразбиране с drupal.
Ако искате да промените как да изглежда вашата страница може да използвате шаблона за страница page.tpl.php и в него да направите промените които желаете. Много хора започват да правят теми със стартовата тема ZEN защото в нея има много примери и много пълни коментари.
Ако пък искате да промените как изглежда съдържанието Node трябва да създадете node.tpl.php . А ако искате да промените определен тип съдържание да изглежда по различен начих е нужно да създадете именасъдържанието-node.tpl.php.
Но мисля че темата за шаблоните в drupal е доста обширна и изисква отделна тема само за това.

Сигурност:
Нищо не е 100% сигурно. Но ако спазвате насоките как да направите вашият сайт сигурен няма от какво толкова да се притеснявате. Може да включите модула който ви дава информация дали има проблем със сигурността на вашата drupal инсталация или проблем със сигурността на даден модул. Дори може да го настроите да получавате е-майл.
Може да намерите допълнителна информация тук.
http://szeged2008.drupalcon.org/program/sessions/hack-proof-your-drupal-...
А за тези които мисля да пишат модули. Ще дам няколко примера как е добре да се пише кода за да няма проблеми.
Не се изненадвайте че функцията е db_query. А не нещо с префикс mysql отпред.
drupal ползва слой за абстракция от конкретната реализация на базата данни.
Ето пример за известните SQL Injections.
Ако ползвате този код:

<?php
db_query('SELECT foo FROM {table} t WHERE t.name = '. $_GET['user']); 
?>

Тук имаме проблем защото може да се инжектира код който не искаме. От сорта на ' or 1=1
Но с този код няма да имаме проблем.

<?php
db_query("SELECT foo FROM {table} t WHERE t.name = '%s' ", $_GET['user']); 
?>

Защо няма да имаме проблем. Защото използваме променливата %s която в drupal се казва placeholder. И тя минава през необходимите функции за да се почистят специалните знаци като например ' то ще стане \' за да няма специално значение за SQL сървъра.
Също ако не сме сигурни какво съдържа един текст е добре той да премине през chekcplain() а най-добре е всички текстове от нашите модули да преминават през функцията t()
за да подсигурим бъдещ превод и в същото време преминаване през функциите за безопасност.

Производителност:
Много хора може би се заблуждават че след като drupal е добре написан ще работи много бързо. Но това не е точно така. На ядрото се обръща много внимание и на някои модули които в drupal 7 ще влезнат в ядрото или са вече включени в дистрибуцията aqicua. Но истината е че в голямата гъвкавост и леснота за работа идва и цената на производителността. Разбира се правят се много подобрения по производителността като например кеширане, агрегиране на javascript и css.
Разбира се е добре да знаете че колкото повече модули зареждате толкова повече ресурс ще иска вашият drupal сайт.
Това разбира се не означава ,че drupal не може да поддържа големи сайтове. Дори напротив ако разгледате какви сайтове са направени на drupal с изненада може би ще откриете че едни от най-големите компании в света с може ми милиони посещения на ден използват drupal.
Но там се ползват клъзтерни архитектури оптимизират се бази данни и така нататък и не са за споделен хостинг. Списък със сайтове на drupal потддържа основателя на drupal на този адрес - http://buytaert.net/tag/drupal-sites

Общност: Това е плюс както за обикновените потребители така и за разработчиците
Не на последно място е общността на drupal. Може да участвате в Българският форум на drupal така и в международният форум на drupal . Освен това drupal е системна с отворен код и няма скрито покрито. Може да разглеждате кода дори да правите подобрения които един ден да бъдат включени в самата система. Не е толкова трудно колкото си мислите.

Какво може да се подобри:
Е разбира се има и какво да се подобри в drupal.
Тъй като е голяма система и е с отворен код и всеки може да напише нещо. В много случаи то няма да прави това което вие искате. И ще трябва да се модифицира.
Някои модули добавят неща в потребителския профил а други на съвсем друго място въпреки че примерно и двата модула са тясно с свързани с потребителски профили да кажем.

Леснота за работа голямата болка.
От край време се знае че drupal се прави от разработчици за разработчици или както пише в един не без известен български форум от извънземни за извънземни.
Верно е има много странни термини в drupal като :
Node, Taxonomy, CCK, Views,Input Formats.
Също самата администрация в началото е леко стряскаща. Но след като човек и свикне вижда нейните плюсове.
Но добрата новина е че drupal 7 ще бъде доста по-добър от към потребителста гледна точка сравнение с предишните. http://drupal.org/node/418560

По-добрa Документация:
Тук наистина има какво да се направи.
Api.drupal.org е чудесен ресурс. Но почти няма примери как да се ползват фикциите.
Много често просто е по-лесно да разгледате друго модул как ги използва.
Надявам се след ре-дизайна на сайта нещата наистина да се подобрят.
http://drupal.markboultondesign.com/iteration10/dashboard.html

В заключение мога да кажа че Drupal е една чудесна система направена с много мисъл от самото начало и се развива много добре.
Ако мислите да мигрирате съществуващ сайт или да изградите нов на базата на Drupal.
Не се колебайте да ме потърсите за да Ви помогна с консултация или цялостно изграждане на вашият сайт.

За контакт

Tags: 

Comments

Да две години (2007,2008)подред да спечелиш награди за Най-добър Open Source CMS Не е лека работа при такава жестока конкуренция,Само добрите основи положени в началото дават резултат .

Най-добър CMS за 2009 отново е Drupal. Дори страницата на Белия дом е Друпал!

Drupal 7 се задава и ще бъде нещо доста добро :)

Друпал е 100 пъри по добър от Joomla.Аз смених всичките си сайтояв на Друпал и WP!

Вярно че в началото е леко шашардисващо, особено ако не си "разработчик", но после се кефиш постоянно :) И аз минах от Джумла на Друпал и какво да кажа.... не могат да се сравняват. Да не говорим, че Друпал развива и интелигентността, хахаха!

Сега ,друпал е хубава система , много е гъвкава , но не ми харесва, че трябва да инсталираш 100 модула , за да има страничката ти приятен и оптимизиран вид .

честно казано не съм го ползвал но съм чувал доста добри отзиви

Все още не съм пробвал Drupal (незнайно защо след четенето досега). В момента съм на вълна писане на моя(и), тъй като после преработката ми е значително по-лесна, а и същевременно уча нови неща.

Друпал е страхотен, но айде да не се заблуждаваме, че човек с основни познания може да се оправи с него. Малко по-сложен е, но определено за разработчик е много по-добре от останалите ЦМС'и.

Add new comment

Refresh Type the characters you see in this picture. Type the characters you see in the picture; if you can't read them, submit the form and a new image will be generated. Not case sensitive.  Switch to audio verification.