Liferay hírlevélmodul esettanulmány

Posted by | No Tags | Liferay-Newsletter | 4 hozzászólás Liferay hírlevélmodul esettanulmány című bejegyzéshez

A tavalyi év folyamán cégünk az eddig használt cms rendszer helyett egy újabb, modernebb, open source cms rendszert keresett, mellyel kielégíhetjük az ügyfelek minden igényét. Fontos elvárás volt, hogy az új cms JAVA alapú legyen, így találtunk rá a Liferay CE-re.

„A Liferay egy nyílt forráskódú, Java nyelven írt portál-keretrendszer. Az LGPL licenc alatt a közösségi verzió (Community Edition) szabadon letölthető, de létezik vállalatoknak szánt változata is (Enterprise Edition). A Liferay tartalmaz egy CMS-t (Content management system), valamint megvalósítja a Java Portal 2.0.-t is (JSR286), így szabványos portlet konténerként is viselkedik. Sok beépített általános célú portletet tartalmaz az alapváltozat, mint például a blogok, wiki oldalak, fórumok. A java-s alkalmazás szerverek bármelyikén képes futni, futásához csak egy Web Container megvalósításra van szükség. Beépített adatbázisa révén (HISQL) adatbázis nélkül is képes futni, de ezt éles környezetben nem ajánlatos alkalmazni performancia szempontok miatt. Ez persze cserélhető standard JDBC driverrel rendelkező adatbázisra is.” (wikipedia)

Ray Of Life

A megrendelőink oldalaikon általában cégükkel, vagy tevékenységi körükkel kapcsolatos tartalmakat jelenítenek meg. Ezek magukba foglalják például cikkek, hírek, fotógalériák, események, fórumok megjelenítését. Oldalaikat saját arculatukra kell formálnunk, egyedi designal kell ellátnunk. Ezeknek az igényeknek a Liferay CE tökéletesen megfelel, szinte az alap gyári portletekkel, és azok megjelenítésnek módosításával, illetve saját téma készítésével.

A szokásos portálfunkciók mellet néha felmerül a megrendelőben az igény, hogy látogatóival, felhasználóival más módon is kapcsolatba léphessen, például hírlevél formájában. A Liferay CE jelenlegi verziója nem rendelkezik beépített hírlevelező modullal, erre megoldást kellett keresnünk. Az általános hírlevél funkciókon kívül, a következőket tartjuk még fontosnak:

  • A hírleveleket az admin elláthatja a Liferay beépítetett tag-jeivel ezzel egyszerűsítve a későbbi visszakereshetőséget
  • Az admin több hírlevél kategóriát hozhat létre, ezzel tovább szűkítheti az adott hírlevelek például alap témáját vagy célközönségét
  • A feliratkozó felhasználók választhatnak, hogy melyik kategóriák újdonságairól szeretnének értesülni
  • Az admin küldhessen hírlevelet egyszerre több kategóriára feliratkozottaknak is
  • A több hírlevél kategóriával rendelkező oldalaknál a felhasználó dönthesse el, hogy melyik kategóriákra szeretne feliratkozni
  • Ha a felhasználó egyszerre több kategóriára iratkozik fel, ne kelljen ezeknél külön megerősítenie az email címét
  • Az oldalra regisztrált (liferay user) felhasználónak ne kelljen megerősítenie az email címét, mert ezt a regisztrációnál már megtette
  • Ha egy hírlevélre feliratkozott felhasználó regisztrál az oldalra (liferay userré válik) szinkronizáljuk össze a usert a korábbi feliratkozásaival
  • Template rendszer használata (fejléc/tartalom/lábléc)

A Liferayhez található hírlevelező modulok nem feleltek meg maradéktalanul az igényeinknek. Több megbeszélést és egyeztetést tartottunk a lehetőségeinkről. Az egyik lehetőségünk az lehetett volna, hogy a legfapadosabb hírlevelező modult újraírjuk és kijavítjuk az általunk ismert benne levő hibákat (például az egyikben a leiratkozás nem működik, a másikban egy hibernate cache miatt a hírlevelek nem mennek ki ütemezve, sőt vannak olyan példák is mikor csak alkalmazás újraindításkor küldi ki). A másik lehetőség, hogy készítünk egy saját modult, teljesen a nulláról, az általunk legjobban ismert eszközöket felhasználva, a jelenlegi és lehetőleg általános igényeket is kielégítő funkciókkal.

newsletter_3

Eleinte hajlottunk a létező megoldások használata felé, azok kisebb erőforrásigénye miatt, viszont menet közben egyre több mindent kellett volna újraírnunk, kiegészítenünk, átalakítanunk, valamint egyre több mélyen rejlő hibára bukkantunk rá (pl. hibernate cache), amik összességében elég nagy időt vettek volna igénybe (újra kellett volna írnunka az egész tárolást, kiküldő service-t). Végül úgy döntöttünk, hogy ha úgyis hasonló ideig tartana mindkét fejlesztés, akkor inkább egy saját modult kellene előállítanunk. Így született meg a döntés, hogy a nulláról kezdünk bele a fejlesztésébe, a jelenleg elérhető legfrissebb keretrendszerek felhasználásával. Az eredeti tervek szerint a felületeket a Liferay Faces Alloy UI használatával képzeltük el, viszont használat közben több nehézségbe ütköztünk egyrészt, mert kevésbé ismerjük, másrészt mert elég sok ellentmondásos, különböző verziójú leírás létezik hozzá. Így végül az admin felületeken elvetettük ezek használatát, és az általunk sokkal jobban ismert Primefaces felé fordultunk.

Fejlesztőkörnyezetnek a jól bevált Netbeans válaszottuk Maven támogatással. Így ezt a projektet is Mavenes porltet archetype-al hoztuk létre. A fejlesztést az adatstruktúra megtervezésével kezdtük. Itt ütköztünk a fejlesztéshez választott maven Service-builder plugin első hibájába, miszerint a String típusú mezők default (és egyben egyetlen) hossza 75 karakter. A hiba javítására több megoldást ajánlottak különböző fórumokon, de ezek egyike sem működött a gyakorlatban (maven-es service-builderben nem működik az eredeti Liferay fórumon található megoldás, a buildelés utáni portlet-model-hints.xml módosítása sem segített, mivel egy újabb buildelés felülírja). Az általunk tervezett mezők közül ez szerencsére egyedül a hírlevél tartalmát tároló mezőt érintette. Felmerült bennünk miért ne lehetne felhasználni a Liferay saját beépített megoldásait. Így újraterveztük a hírlevél struktúráját és szerkesztő felületét, melynek során a saját richtext editorban szerkeszthető tartalmat lecseréltük a Liferayben gyárilag verziókövetett, kiforrott szerkesztői felülettel rendelkező Webcontetre (vagy cikkre). Ezzel egyszerre megoldódott a hírlevéltartalom verziókövetésével kapcsolatos probléma is. Ez a változtatás jól szolgálta azt a célunkat, hogy egy minél egyszerűbben használható, minimális oktatást igénylő rendszert készítsünk.

Fontosnak tartottuk azt is, hogy a felhasználóknak ne kelljen minden alkalommal újra megszerkeszteni az azonos részeket (például fejléc, lábléc), így ezekhez készítettünk egy minta template-t, melyet minden hírlevélnél ki tud választani a hírlevél kiküldője. Ez egy egyszerű html fájl melyet minden szerkesztő saját igényeinek megfelelően módosíthat. A template-ben használhat előre definiált változókat, melyeket kiküldéskor lecserélünk (például: küldés dátuma, hírlevél kategória). A Webcontent és template használatában egyetlen problémát találtunk, a hírlevél tartalmába használt képet és belinkelt fájlok nem voltak elérhetőek a címzettektől, mivel a liferay a Webcontentekben relatív urleket használ, ezt viszonylag egyszerűen javítani tudtuk(a kiküldés pillanatában kiegészítjük ezeket a linkeket az oldal urljével).

Fejlesztés végéhez közeledve ráleltünk egy Liferay által kiírt portletfejlesztési versenyre, amihez jó alapnak tűnt a hírlevelező rendszerünk. Az egyetlen problémát az eredeti verzió specifikáltsága jelentette, mivel azt egy jelenlegi megrendelőnk rendszerébe terveztük.

Újabb megbeszélések, egyeztetések következtek arról, hogy pontosan miket is kellene módosítanunk, ahhoz, hogy az általunk megálmodott rendszer mások által is felhasználható legyen különösebb faragások nélkül. Ennek következtében többnyelvű, gyári Liferay designba illeszkedő portleteket kellett készítenünk a meglévő saját témába illeszkedő portletek helyett. Készítettünk egy sima gyári működésű feliratkozó portletet és egy szebb jquery ui elemet használó verziót, valamint az ezekben szereplő elemeket egyedi CSS class-al láttuk el, hogy egy másik oldalba történő beillesztésnél könnyebb legyen a fejlesztőknek a saját designhoz igazítani.

A versenyre beadás előtt az elkészült hírlevelező modulunk teljes kódját elérhetővé tettük más fejlesztők számára is a GitHub-on GPLv3-as licensszel.

A fejlesztés során felvetődtek újabb lehetséges igények, feature-k melyekkel a jövőben szeretnénk kiegészíteni a termékünket. Ezek a következők:

  • egy listázó/megjelenítő portlet a kiküldött hírlevelekhez site oldalon
  • konfigurálási lehetőség, ha az admin nem szeretne külön feliratkozást, hanem a liferayes usereinek szeretne hírleveleket küldeni
  • hibakezelés a levelek kiküldése során, elakadt kiküldéskor újraküldési funkció
  • időzített kiküldés

update:Időközben kikerültünk a liferay martketplace-re: https://www.liferay.com/hu/marketplace/-/mp/application/27267339


4 hozzászólás

Viczián István says:

2013. szeptember 4. at 13:36

Üdv,

Most találtam rá a blogra, nagyon jó cikkek vannak. Kitartást hozzá!

Érdemes lenne ide belinkelni a projektetek címét is, hogy azonnal elérhető legyen, ne kelljen Googleözni hozzá. Gondolom erről van szó:

https://github.com/wbstr/liferay-newsletter

Reply

Fenyó says:

2013. szeptember 4. at 16:16

Szia István,
teljesen jogos az észrevételed. Azért nincsenek kint a linkek, mivel a Liferay-es csapat még nem fogadta el a modulunkat, így az ő oldalukon nem található meg.
Amint átmegy rajtuk, belinkeljük az összes elérhetőséget.

A kitartás kell, de a szándék megvan, örülök hogy tetszenek az írásaink 🙂

Reply

hron84 says:

2013. szeptember 7. at 20:32

Van egy eliras a cikkben:
” A tempalte-ben használhat”

Egyebkent nagyon jo cikk, es egyben erdekes esettanulmany is.

Reply

Bercsényi Csaba says:

2013. szeptember 10. at 11:03

Szia!

Köszi a jelzést, a hibát javítottuk.

Reply

Leave a comment