Release fél év után

Közel 6 hónap fejlesztgetés után kiment tegnap élesbe egy új szeretgom build. Általában ennél lényegesen kevesebb idő telik el két frissítés között, de sikerült sokkal kevesebb szabadidőre szert tennem ősz óta, mint reméltem plusz belementem egy olyan refaktoringba, ami az elején még teljesen egyszerűnek tűnt, azután ahogy haladt előre az idő, úgy bonyolódtam bele egyre jobban.

Az alapötlet viszonylag egyszerű volt: a site mögötti engine minél egyértelműbb leválasztása magáról a konkrét portálról - ennek kidolgozása már lassan másfél éve folyik. Ami a mostani verziót lényegesen késletette, az az volt, hogy a site működésének leírását is elkezdtem a kódból egy konfigurációs állományba (xml, mi más) átpakolászni.

Úgyhogy most ilyen konfigurációs direktíváim vannak:

<activityConfig
createEvent="NEW_PROFILE"
createScope="SITE"
updateEvent="MOD_PROFILE"
updateScope="FRIENDS"
className="hu.metaprime.cms.entities.entities.content.Profile"
/>

Ez azt írja le, hogy egy új Profil (vagyis egy új felhasználó) regisztrálásakor a NEW_PROFILE activity event logolódjon le, ami egy SITE scope-ú aktivitás (vagyis mindenki láthatja), a Profil módosításakor pedig egy csak az ismerősöknek disztributált MOD_PROFILE üzenet naplózódjon.

Egy összetetteb konfigurációs direktíva:

<filterConfig viewRoles="USER" name="photos.others" className="hu.metaprime.cms.entities.content.Photo"
form="tags,sets">
<whereClause>
target.published = true AND target.owner <> :person
</whereClause>
<fromClause>
Photo target
</fromClause>
<parameter name="person" value="session.person"/>
<filterSort property="time" ascending="false"/&ft;
<filterSort property="time" ascending="true"/>
</filterConfig&vt;

Ez egy filter-t konfigurál fel, ami a Photo objektumokra (felhasználók feltöltött képei) vonatkozik, és "photos.others", azaz a "más felhasználók fotói" nevet viseli. A portál ezeket a filtereket használja egyes oldalakon és funkcióknál az objektumok listázására (pl itt: http://www.szeretgom.hu/galeria), a konfiguráció pedig a JPA QL kifejezésnek az összemachináláshoz ad támpontokat a programnak.

Minden objektumtípusnak két alapértelmezett nézete van: egy full és egy summary view. Ezeket hasonló direktívákkal tudjuk felkonfigurálni:

<summaryConfig
content="title"
className="hu.metaprime.cms.entities.content.Category"
>
<css>
.Category_summary .title {
background: #eee;
padding: 3px;
width: 150px;
margin: 1px;
float: left;
text-align: center;
font-size: 14pt;
}
</css>
</summaryConfig>

A content mezőben szépen fel lehet sorolni vesszővel elválasztva azokat a mezőket és amilyen sorrendben az adott objektumtípus tulajdonságait meg kell az oldalon jeleníteni. Amint látszik a css is ebben a file-ban definiálható. Egy komplexebb példa:

<viewConfig
content="thumbnail,title,owner,edit,delete,favourite,recommend,description,tags,ANONYMOUS:logintToViewEntries,USER:entries"
className="hu.metaprime.cms.entities.content.Photo"/>

Az ANONYMOUS: és a USER: prefixek role check-et írnak elő az adott mezőre vonatkozóan - csak az adott role-lal rendelkező felhasználók számára jelenik meg a mező ebben a nézetben.

Hasonló módon került bele a konfigurációba a teljes menürendszer és layout management. Ha érdekel, szóljatok és még mesélek.

Egyelőre ennyi, fejlesztgetünk tovább.

Hozzászólások

Nem ismerem, hogy milyen volt, de most tetszetős! Gratula! Saját CMS vagy valami "kész"?

Én nem használnék ilyen osztály neveket:
class="News_summary Content_summary"

No rainbow, no sugar

design: 8/10
hasznalhatosag: 7/10
szemantika: 9/10
standardok: 0/10 :D

osszessegeben messzemenokig jobb lett mint a "mostansag" koszalo portalok, gratula :)

--
x-economy | Antonov An-2 cockpit

Köszi, igyekszünk. css hibákat van esély javítani, a html viszont a bbcode miatt kvázi esélytelen (illetve biztos meg lehetne csinálni, csak annyi fejlesztenivaló van, tele a trac ticket-ekkel:).

--
The reason that half of us are in computing at all is that we see computers as things that we can make beautiful things out of..

Egyeb:

$ time wget -O /dev/null http://szeretgom.hu

real    0m19.344s
user    0m0.009s
sys     0m0.007s
$

Van több issue is, de sajnos olyan a politikai helyzet a városban, hogy nem halaszthattam tovább a release-t (holnapután megyek a rendőrségre tanúskodni, hogy ki írt egy cikket, inkább ebbe most nem megyek bele) - kellett már az a feature, hogy a hozzászólásokat csak belépve olvashassák a userek.

Köszi a jelzést, ez is megy a trac-be:)

Bugreport:

Ha egy hírben rányomok a képre (hogy kinagyítsa), akkor ugyanabba az ablakba megnyitja rendes méretben, és megjelenik egy ablak bezárása felirat a kép jobb alsó sarkában. Ha rányomok, átdob egy üres lapra. Ahogy nézem popup ablakba kéne felhoznia és azt szeretnéd bezáratni csak nem popup-ba jön be. :-)

Ha sokáig van megnyitva egy hír (fél perc <) akkor átdob egy szerveroldali hiba szövegre.

Ezenfelül átlátható az oldal, rendezett.
Drupal alapokon nyugszik? (fórumból ítélve)
Látom saját.

@@
"You can hide a semi truck in 300 lines of C."
OpenSolaris 2008.11
Debian Lenny 2.6.27.6

Köszi, valóban. Emlékszem is amikor ezt átírtam.

Saját az engine, mert az egész hobbiprojektnek indult 2006-ban tapasztalatgyűjtés céljából (Java EE-t, Glassfish-t, Wicket-et akartam ezáltal megtanulni). Java-s web cms-ekből elég nagy hiány van, különösen open source fronton, egy ideje gondolkodom rajta, hogy open source lesz ennek is a vége (nem igazán van kapacitásom egyelőre nekiállni önmagában termékesíteni a szoftvert, bár az utóbbi fejlesztések egyértelműen azirányba mutatnak, hogy egy CMS + Social network engine legyen belőle viszonylag rövid időn belül).

--
The reason that half of us are in computing at all is that we see computers as things that we can make beautiful things out of..

nice, szép response time-ok...
a kód annyira nem izgalmas, sokkal inkább a szervezési elv ahogyan a configot felépíted, ha erről van kedved írni, akkor welcome :)