Tartalomkezelés kicsiknek: PyroCMS
A PyroCMS egy egyszerű, moduláris felépítésű, MVC alapú, CodeIgniterre épülő tartalomkezelő rendszer. Filozófiája hogy nem akar minden problémára azonnal megoldást nyújtani, inkább kapunk egy könnyen kezelhető alaprendszert, amit modulokkal tovább bővíthetünk, ezért nagyon kis memóriaigényű és gyors.
A fejlesztőket a népszerű ExpressionEngine ihlette, így egy nagyon rugalmas, a végtelenségig bővíthető, mégis megfizethető rendszerről van szó. Maga az alaprendszer bőven alkalmas egyszerű honlapok gyors elkészítésére, ahol csak néhány oldal, esetleg egy egyszerű blog megjelenítésére van szükség, de a store-ban bővebb funckionalitást nyújtó modulokat, témákat is vehetünk. Ilyen például a külön kiegészítőként kapható PyroStreams modul, ami az ExpressionEngine csatornáihoz hasonló funkcionalitást tesz lehetővé.
Alapvetően egy néhány főből álló fejlesztőcsapatról van szó, de a nyilvános fejlesztésnek köszönhetően rengetegen küldenek be hibajavításokat, új feature-öket, fordításokat, melynek köszönhetően a rendszer már 24 nyelven elérhető, és nagyon gyorsan fejlődik. A fejlesztők között van az egyik CodeIgniter reactor fejlesztő is, így a PyroCMS mindig a legújabb CodeIgniterre épül (jelenleg a 3.0-dev-re). Amennyiben segítségre lenne szükség, a tapasztalat alapján a csapat tagjai gyorsan válaszolnak a fórumon.
Felépítés
A bevezető után tekintsük át, hogyan is néz ki az alaprendszer. A telepítés néhány egyszerű lépésben elvégezhető, természetesen magyarul is. Belépés után egyszerű design fogad minket, de ez átállítható, illetve könnyen készíthetünk egyedi témákat is.
Amikor belépünk az adminfelületre, olyan nyelven beszél hozzánk, amit a telepítőben beállítottunk. Ha a Beállítások fülön megfelelően konfiguráltuk a Google Analytics-et, akkor egyből megjelennek a látogatottsági statisztikák.
A Tartalom menüből kezelhetünk mindent ami tartalom: a blogbejegyzéseket, fájlokat, magukat az oldalakat (tehát az oldalak tartalma közvetlenül adatbázisból kerül kiszolgálásra), hozzászólásokat stb. A felület nagyon felhasználóbarát, könnyen eligazodhatnak rajta a számítástechnikához nem igazán értő ügyfelek is (szerintem mindannyian találkoztunk már velük). Az oldalak szerkesztését például a CKeditor WYSIWYG szerkesztő könnyíti meg, de a fájlkezelő használata is hasonlóképpen egyszerű: szimpla jobbklikkel hozhatunk létre könyvtárakat, illetve egy AJAX-os feltöltő könnyíti meg a dolgunkat, amivel egyszerre több fájl feltöltésére is lehetőség van.
A Navigáció menüben létrehozhatunk link csoportokat, melyeket lényegében bárhol megjeleníthetünk.
A Beállítások fülön konfigurálhatjuk, letilthatjuk a modulokat, tölthetünk fel újakat, és számos, haladó beállításra is lehetőség van, például cloud szolgáltatókon tárolhatjuk a feltöltött fájlokat, de a fájlkezelőből ugyanúgy kezelhetjük, mintha helyi fájlok lennének. Vagy akár módosíthatjuk a CKEditor tulajdonságait.
Háttér
Essen néhány szó a rendszer technikai hátteréről. A bevezetőben már említettem, hogy a CodeIgniterre épül. Nos, a PyroCMS nem más, mint egy CodeIgniter alkalmazás, néhány hasznos kiegészítővel és módosított útvonalakkal. Ez adja a rendszer egyszerűségét, könnyű fejleszthetőségét. Emiatt nincsenek függőségi igényei: ahol a PHP fut, ott minden gond nélkül fog a PyroCMS is.
Aki nem ismerné a CodeIgnitert, a keretrendszer lényege egy front controller (index.php), ami az útválasztást végzi, és leképezi a kérést a controllerekre, pontosabban a controller megfelelő metódusaira. A modellek használata nyilván erősen ajánlott, de nem kötelező, mindent elintézhetünk akár a controllerben is. Ezek betöltik a view-t (egyszerű PHP fájlok), ha meg akarunk jeleníteni valamit, de nagyon egyszerű AJAX-os kéréseket is kiszolgálni. Az alapbeállításokat konfig fájlokon keresztül könnyen módosíthatjuk, ily módon létrehozhatunk egyedi útvonalakat is.
A felhasznált kiegészítők közé tartozik például a Wiredesignz HMVC-je, ami a moduláris felépítést teszi lehetővé vagy a Lex parser, egy egyszerű template parser, amit a fejlesztők külön a PyroCMS-hez fejlesztettek (most már a FuelPHP része).
Ez utóbbiban megjeleníthetők egyszerű értékek, de többdimenziós tömbök is:
<h1>{{ title }}</h1>
{{ projects }}
<h3>{{ name }}</h3>
<h4>Assignees</h4>
<ul>
{{ assignees }}
<li>{{ name }}</li>
{{ /assignees }}
</ul>
{{ /projects }}
és egyszerű feltételeket is ágyazhatunk az oldalainkba:
{{ if user.group == 'admin' }}
<p>You are an Admin!</p>
{{ elseif user.group == 'user' }}
<p>You are a normal User.</p>
{{ else }}
A template-ekben / view fájlokban csak ezeket az egyszerűbb vezérlési szerkezeteket használhatjuk, illetve néhány megjelenítést segítő taget, a template-ek túlbonyolítását elkerülendő. Ha több tagre lenne szükségünk, pluginek írásával kiegészíthetjük a template parsert.
Bővíthetőség
A rendszert többféleképpen bővíthetjük. Az első és legnyilvánvalóbb módja téma írása. Ebben az esetben csak HTML-el és egyszerű tagekkel kell foglalkoznunk.
A pluginek egy sztringet adnak vissza, melyet egyszerű tagekkel jeleníthetünk meg az oldalon: {{ plugin:function parameter="value" }}
. Itt van például egy rendkívül hasznos plugin, ami megtalálható az alaprendszerben:
class Plugin_Robots extends Plugin
{
/**
* Hello
*
* Usage:
* {{ robots:hello }}
*
* @return string
*/
function hello()
{
$speech = trim($this->attribute('say', 'I am programmed for good... on week days. Bleep Blurp.'));
$robot = '
"' . $speech . '"
_____ /
/_____\\
____[\\\'---\'/]____
/\\ #\\ \\_____/ /# /\\
/ \\# \\_.---._/ #/ \\
/ /|\\ | | /|\\ \\
/___/ | | | | | | \\___\\
| | | | |---| | | | |
|__| \\_| |_#_| |_/ |__|
//\\\\ <\\ _//^\\\\_ /> //\\\\
\\||/ |\\//// \\\\\\\\/| \\||/
| | | |
|---| |---|
|---| |---|
| | | |
|___| |___|
/ \\ / \\
|_____| |_____|
|HHHHH| |HHHHH|
';
return "<pre style=\"font-family: 'Courier New';\">$robot</pre>";
}
}
A widgetek kis kódrészletek, amik egy adott funkciót valósítanak meg: például megjelenít egy Google Maps-et a megadott link alapján vagy különböző formokat vagy például megjeleníti a beírt HTML kódot.
A bővítés legösszetettebb módja a modul. Egy modul mindent tartalmazhat: témákat, controllereket, view fájlokat, plugineket, könyvtárakat. Core modulok például a Blog, Users, Files, Navigation, Comments, Sitemap, Templates, Widgets.
Három kiterjeszthető controller segíti a fejlesztést, ezek:
Public_Controller
: a frontend bővítéséhez. Behúzza és megjeleníti a beállított témát, elérhető benne atemplate
tulajdonság, amivel a böngészőbe írhatjuk a tartalmat stb.Admin_Controller
: ha az adminfelületet akarjuk bővíteni új beállításokkal, menükkel stb. Értelemszerűen a beállított admin témát fogja megjeleníteni.REST_Controller
: egy olyan osztály, ami a neki POST/GET/PUT/DELETE metódusokkal küldött adatok könnyű elérhetőségét teszi lehetővé. Mindenféle formátumot ismer (XML, JSON, CSV, HTML, PHP, SERIALIZE), Phil Sturgeon cikkében olvashatunk erről bővebben.
Szintén nagyon hasznos feature az events rendszer (a CodeIgneterben ez hooks néven fut, és ez a szemlélet, ha jól tudom jelen van a Drupalban is, de más nagy rendszerben is találkoztam már vele). Lényege hogy a core-ban előre definiált pontok, események segítségével a core fájlok hackelése nélkül változtathatunk a rendszer alapvető működésén. Ilyen események például a „bejelentkezés után” vagy „blogbejegyzés publikálás után” stb. Ha mondjuk a felhasználót egyszerre több rendszerbe is be akarjuk jelentkeztetni, mint egy külső fórum, ezek nagyon hasznosnak bizonyulhatnak.
Néhány hasznosabb modul:
- Social Integration: a beállított szolgáltatóhoz lekéri az OAuth/Oauth2/OpenID tokent, és eltárolja az adatbázisban, így a többi modul sokkal könnyebben hozzáfér.
- Fórum: egy nagyon egyszerű fórummotor, lényegében csak egyszerű diskurzusra alkalmaz, semmi összetettebb dolgot nem tud, de azért a 16 dollárért, amibe kerül, azt hiszem nem is várhatunk többet. A pyrocms.com is ezt használja, kipróbálható.
- WordPress import: egy WordPress blog bejegyzéseit és címkéit tudja importálni PyroCMS-be. Ingyenes.
- PyroBackup: az adatbázis biztonsági mentését teszi lehetővé, a backupot feltölthetjük akár Amazon S3 bucketre is.
Továbbá lehetőség van a Sparks rendszer használatára is: ez a CodeIgniter PEAR-je. Van itt az egyszerű Gravatar helpertől elkezdve REST API fejlesztést segítő könyvtáron keresztül minden.
A rendszer felülete többnyelvű, egy másik nyelvre való lefordítás annyiból áll, hogy a nyelvi fájlokban lévő változókat átírjuk, és készen is vagyunk.
Ez mind szép és jó, de mennyibe kerül?
A címben arra akartam utalni hogy a rendszer kis költségvetésű projektekhez kiválóan megfelel, ugyanis többféle verzióban kapható. Van egy mindenki által ingyenesen használható és fejleszthető Community verzió. Egyszerű honlapokhoz ez is bőven elegendő. A plusz funkcionalitást nyújtó Professional 90 dollárba kerül. Lehetőséget nyújt egy hoszton lévő bármennyi különálló site telepítésére. A site-ok megoszthatnak addonokat, témákat, és külön tartalommal rendelkezhetnek. Egy adatbázis hozzáférésen osztoznak, különböző prefixekkel választva szét a különböző oldalak tartalmát. A Pro verzióhoz hozzátartozik a PyroStreams modul is, és eltüntethető belőle minden PyroCMS-re vonatkozó márkajelzés, teljesen „white-label”-ezhető, és most már „hosted” verzióban is elérhető. Ezek bármelyikének megrendelése esetén automatikusan jár a Pro licenc is.
Az add-on store-ban a legtöbb termék néhány dolláros áron kapható. Vannak új funkcionalitást kínáló modulok (például egy egyszerű fórum, vagy Facebook bejelentkezést segítő modul), témák, pluginek. Külön megvehetjük a PyroStreams-et is (ha nem akarjuk megvenni a teljes Pro verziót).
Ha lesz rá igény, a következő részben írhatok az utóbbiról, mert az megér egy külön misét, a rendszer nagy rugalmasságát lényegében az adja. Aki dolgozott már ExpressionEngine-nel, tudja miről beszélek.
Összességében, egy nagyon egyszerű, gyors, kicsi, könnyen kezelhető, könnyen fejleszthető, és viszonylag olcsó CMS-ről van szó. Amiben még van hova fejlődni az a naprakészebb és pontosabb dokumentáció, de a tiszta és átlátható kód miatt igazából ez nem olyan nagy probléma. Bátran ajánlom mindenkinek kisebb költségvetésű projektekhez vagy akár személyes honlapok alapjához, blogokhoz is jó szolgálatot tehet.
■
Jó kis cucc lehet
A képeid alapján a fordítás nem teljes, ha így akarod - magyar viszonylatban - értékesíteni, lehet nem örülnek ennek.
Szerintem maga a CI megérne egy cikket (ha valaki megírná...:)), és arra épülve a PyroCMS is (mondjuk egy konkrét oldal bemutatásán keresztül, továbbfejlesztéssel). Jó blog, örülök, hogy olvashattam.
Magyar fordítás
Melyik?
PyroCMS-ről természetesen
https://github.com/pyrocms/pyrocms/pull/1598
elkélne egy kis segítség amúgy :) némelyik kifejezés még mindig nagyon furcsán hangzik.
Nem tudom
Facebook csoport
Nagyon profi diskurzusok folynak itt néha, a fejlesztők tényleg nagyon segítőkészek.
Ha valaki szeretne bekerülni, szóljon és meghívom !
Megnézegettem csak úgy
Ami engem aggaszt, hogy a cms kódjában egyetlen try-catch blokkot sem találtam. Lehet, hogy van valami szuper megoldásuk hibakezelésre, amiről eddig én semmit nem hallottam?!
szerk:
Most nézegetem a CI, Zend2, Symfony2 kódját (kb 1-2 évente megnézem a keretrendszerekét). Az a helyzet, hogy Symfony2 az első értékelhető php keretrendszer, amit eddig láttam. Nagyon hasonlóak a megoldásaik azokhoz, amiket én is használok, csak jóval többet tudnak, mert több emberórájuk volt a fejlesztésre. Szép a kódja, tetszik. Elgondolkodok rajta, hogy áttérek a használatára, ha valami nagyon bonyolult projektbe ütközök bele. Kár, hogy amikor saját rendszert kezdtem fejleszteni, akkor ez a symfony2 még csak nagyon kezdeti stádiumban volt. Csomó plusz munkát megspórolhattam volna... (Tapasztalat szerzésnek mondjuk nem volt utolsó.)
Ahogy nézem Yii sem rossz. Kb zend2 és symfony2 közé tudnám tenni. Ahogy nézem csináltak statePersister-t, ami nálam is tervben van már jó ideje, csak annyira nem volt kritikus, hogy elkészüljön.
Teljesen egyetértek veled. A
Én csak a kód minőséget
Nem vagy egyedül
Pozitív vélemény
Természetesen a megfelelő tervezést ez a framework sem pótolja... Mint ahogy egyik sem. És nem is mondanám, hogy "ez aztán mindenhova / mindenre jó". Mint ahogy a többi sem. Tökéletes fw nincs. (Hacsak nem az enyém lesz az...:))
Szóval én nagyon is arrafelé tendálok, hogy miközben használom, fejlesztgetem tovább-tovább. Még nagyon jó is lehet belőle. De a mások által ráépített CMS-től idegenkedek, az már biztosan nem az, ami nekem kell.
Az általad leírt jelenség
Egyszer olvastam egy cikket amiben a csávó azt írta hogy rossz Python programozó sokkal kevesebb van mint rossz PHP fejlesztő, de ez nem amiatt van mert PHP-ben nem lehet jó kódot írni, hanem inkább az áll a háttérben hogy azok foglalkoznak inkább Pythonnal akiknek már legalább is van némi fogalma a programozásról.
Amúgy szerintem maga a CI nem más mint egy "kiterjesztett" PHP lényegében, plusz néhány osztály amik lehetővé teszik a rapid fejlesztést.
Az ExpressionEngine-t pedig nagyon sokan dicsérik (mondjuk nem tudom azok a programozók milyen szinten vannak) és nagy cégek is használják (pl. Apple) tehát annyira rossz szerintem nem lehet, ott is talán inkább arról lehetett szó hogy kezdő volt aki csinálta és nem gondolta át rendesen.
Minden nyelven lehet szép/jó kódot írni, általában nem a nyelv korlátozza ezt hanem maga a programozó.
dropout: ezzel nem megbántani akarlak de a fenti sorok neked is szólnak. ha gánynak érzed a kódodat az nem a nyelv hibája hanem a sajátod (no offense).
Még annyi hogy szerintem nem kell mindig gyönyörű kódot írni, ez is túl van lihegve. Persze nagy projekteknél elengedhetetlen, de ha gyorsan kell valami, megírod működik és tuti hogy senki nem fogja használni az ég világon akkor minek még több időt ráfordítani csak hogy szép legyen ?
Magas a labda, de nem erről van szó
Van egy szubjektív fogalmam a tiszta kódról és jó tervezésről, amibe nem illenek bele a CI-s megoldások.
Lehet, hogy nem nekem van kitalálva, vagy rosszak az elgondolásaim...
Ráadásul van, hogy hónapokig nem kell PHP-znom, és teljesen más érzés visszatérni egy PureMVC vagy Robotlegs AS3 projekthez mint egy PHP-s CI projekthez, persze nehéz összehasonlítani a kettőt, de általánosságban, ha több nyelven több keretrendszerben programozol, akkor feltűnnek problémák hiába más a feladat és a cél. Mind1, hogy numerikus analízishez írsz szűrőt, vagy webservert programozol az OOP elveknek úgyanúgy érvényesülnie kéne. Az egyiknél mindent a helyén érzek a másiknál meg keresgélnem kell, hogy most a helper függvény-ben és/vagy a származtatott core osztályban van a migrálni való funkcionalitás. Szerintem nem különülnek el jól a funkcionalitások CI-ben és sok örökölt PHP4-es megoldást is tartalmaz. Ez az én két centem, de jobban már nem akarok ebbe belemenni mert ez egy PYRO CMS topik, csak láttam, hogy valakinek hasonló tapasztalatai mint nekem és együttérzésemről biztosítottam. Ez nem "Szomszéd Pistike", meg jó nyelv-e a PHP vagy nem kérdése, ezt így fórumozva se lehet rendesen megbeszélni, mert mindenki mást ért bele az írásba, nem ismer, munkáimat se ismeri, nem tudja mire gondolok.
Kezdem érteni és sokkal jobb
Így van
Egyébként az alapvető funkciókat (felhasználókezelés, fórum, stb.) nemrég kezdtem el jobban hordozhatóan megvalósítani; egy "Pistike" számára is könnyen telepíthető, összeklattyolgatós CMS szerintem nem emeli a CI megítélését. Legalábbis nekem nincs rá szükségem.
Azt miért nem én
Mondjuk azért mert amit 3 ember 4 éve fejleszt, az egy embernek 12-be telne...
ezek szerint nagyon rossz a cikk, mert nem jött át ennek a CMS-nek a lényege. Ez a CMS pont hogy nem az a Wordpress vagy Joomla jellegű "mindenrevanmegoldáscsakösszekattogtatom", hanem fejlesztőbarát; a moduláris felépítés, a PyroStreams adatbázis abasztrakciós modul, a többféle controller típus, a REST API fejlesztést segítő osztályok mind a fejlesztő dolgát megkönnyítő elemek. Nincs annyiféle modul hozzá mint más rendszerekhez, és azok is csak egy-egy kisebb funkciót valósítanak meg (bár már készül két komplett webáruház megoldás is). Magában az alaprendszerben pedig szinte csak olyan modulok vannak amikre mindig szükség van; felhasználókezelő, tartalomkezelő, acces control, filekezelő és ennyi.
Ehhez képest WordPressre fejleszteni valami összetettebbet (én még nem csináltam, nem tudom) azt mondják rémálom.
Nekem bejön, de sokat gondolkoztam amit írtál, mert most kezdek egy nagy projektet és arra jutottam hogy ugyanezeket a funkciókat kéne nekem is megvalósítanom, de mire egy ilyen rendszer lenne belőle, nekem tuti eltartana 12 évig :)
Inkább azt csinálom hogy fejlesztem magát a CMS-t is olyan funckiókkal amik nekem kellenek, küldök be pull requesteket, és úgy alakul ahogy nekem jó. Ha nem, akkor verziókezeléssel még mindig merge-elhetem az ő változtatásaikat amik biztonságosabbá, stabilabbá teszik a rendszert.
Azt gondolom hogy sok ember nem veszi figyelembe azt a tényt hogy egyedül soha az életbe nem fog tudni annyit fejleszteni mint amit többen csinálnak ugyanannyi idő alatt. Ha az alapvető funckiókat meg is lehet valósítani gyorsan, ugyanazokba az apró problémákba, biztonsági lyukakba fog beleütközni, mint amiket a többiek már rég kijavítottak.
Mondjuk azért mert amit 3
„A manager is a person who thinks nine women can deliver a baby in one month.”
Nem
Semmi bajom a fejlesztőkkel - nem is ismerem őket -, de egyszerű matematikai levezetést alkalmazni erre a fejlesztési időre enyhén szólva mulatságos. Ha véletlenül én egyedül elkövetek vmi hasonlót egy hónap alatt, akkor én 144-szer jobb fejlesztő vagyok?! Legalább ráfordított munkaórát illik ilyenkor számolni, mert mi van, ha ők 60 óra/fő/év csinálták? Neked akkor is 12 év?
Brook törvényét érdemes
Ez tetszett