Zárva a bejegyzés sorozatunkat a címlapon megjelenő hírfolyam elemek kapcsán, bemutatjuk a második opciót, melyet használhattok a hírek kiküldésekor: a csoportosítást. Ennek kapcsán az OpenSocial activity két további lehetőségét vezettük be az iWiW-en a hírfolyam elemeknél: a sablonok támogatását, és a hírfolyam elemek csoportosítását. A bejegyzésben bemutatjuk a sablonok használatát, illetve hogy hogyan készíthetőek olyan sablonok, melyek csoportosításra is alkalmasak.
Sablonok
Hírfolyam sablonokat kétféleképpen lehet hozzáadni alkalmazásunkhoz: vagy az alkalmazás XML-jébe ágyazva, vagy külső fájlként meghivatkozva (szintén XML formátum). Mindkét esetben a ModulePrefs részbe kerülnek információk. Az XML-ben elhelyezés a következőképpen néz ki (természetesen ahogy eddig is, a ModulePrefs további tulajdonságai, gyermek elemei megadandóak):
<ModulePrefs> <Locale> <msg name="uzenet_cime"> Hello Világ! </msg> <msg name="uzenet_szovege"> Ez itt egy szimpla Hello Világ üzenet. </msg> </Locale> </ModulePrefs>
A példában ugyan két üzenet szerepel csak, de bármennyit definiálhatunk. Az üzenetek címét és szövegtörzsét két külön sablonnal kell definiálni. Külső XML-re hivatkozni pedig így lehet:
<ModulePrefs> <Locale messages="http://example.hu/my-activity-messages.xml"/> </ModulePrefs>
A hivatkozott XML felépítése:
<?xml version="1.0" encoding="UTF-8"?> <messagebundle> <msg name="uzenet_cime"> Hello Világ! </msg> <msg name="uzenet_szovege"> Ez itt egy szimpla Hello Világ üzenet. </msg> </messagebundle>
Egy ilyen üzenet sablonra a “name” tulajdonságával lehet hivatkozni hírfolyam elem létrehozásakor:
var options = {}; options[opensocial.Activity.Field.TITLE_ID] = "uzenet_cime"; options[opensocial.Activity.Field.BODY_ID] = "uzenet_szovege"; opensocial.requestCreateActivity(opensocial.newActivity(options));
Egy sablonban változókat is használhatunk:
<msg name="osszeadas"> Az ${a} + ${b} művelet eredménye: ${vegeredmeny}. </msg>
A paramétereket a következőképpen adhatjuk át:
var options = {}; options[opensocial.Activity.Field.TEMPLATE_PARAMS] = { a: "12", b: "13", vegeredmeny: "42" }; options[opensocial.Activity.Field.TITLE_ID] = "uzenet_cime"; options[opensocial.Activity.Field.BODY_ID] = "osszeadas"; opensocial.requestCreateActivity(opensocial.newActivity(options));
Egy speciális változó is rendelkezésünkre áll, “Subject” névvel, és az aktuális felhasználó adataival. Ezt a következőképpen használhatjuk:
<msg name="osszeadas"> ${Subject.DisplayName} most ütötte meg a főnyereményt. </msg>
Ezt a paramétert átadnunk sem kell, a példa a felhasználó nevét - belinkelve a profil oldalára - fogja behelyettesíteni.
Tudnivalók az iWiW-en:
- Minden, a hivatkozott sablonokban szereplő változóhoz értéket kell rendelnünk a TEMPLATE_PARAMS segítségével.
- Csak string adható át paraméterként, objektum, vagy például egy OpenSocial Person átadása nem támogatott.
- Sablon használata esetén a rendszer nem teszi automatikusan a hírfolyam elejére a felhasználó nevét, ezt magunknak kell megtennünk. A hírfolyam nevesítése, ahogyan az értesítéseknél is, kötelező.
Csoportosított hírfolyam elemek
A hírfolyam elemek csoportosítása a sablonok segítségével történik. A “sima” hírfolyam elemen felül definiálni kell azok csoportosított változatát is. Csoportosítás a sablon bármely változó eleme alapján történhet. Például egy alap üzenet:
Példa Béla lájkolt egyet.
Madonna zenésztől Like a Virgin szám a kedvence.
Itt változó paraméter lehet a felhasználó neve, az album neve és magának a számnak a neve. Ez sablonnal így nézhet ki:
<msg name="title">${Subject} lájkolt egyet.</msg> <msg name="body">${artist} zenésztől ${song} szám a kedvence.</msg>
További sablonok segítségével csoportosíthatóvá tehetjük a hírfolyam elemet, például ha (az aktuális felhasználó ismerősei közül) több felhasználó (vagy egy felhasználó, de többször) is ugyanazt az előadót lájkolja, akkor:
<msg name="title:artist">${Subject.Count} ismerősöd ${artist} ${artist.Count} db számát lájkolta.</msg> <msg name="body:artist">${Subject.List} kedvenc dalai: ${song.List}.</msg>
A sablon neve után kettősponttal kell jeleznünk, hogy melyik változó szerint kívánunk csoportosítani. Ha a hírfolyamban több hír is megjelenne úgy, hogy az adott változó értéke megegyezik, akkor a rendszer csoportosítani fogja azt a csoportosítást lehetővé tevő sablonokat felhasználva. Ebben a példában egyből láthatóak speciális értékek, a .List felsorolásként jeleníti meg az adott sablon paraméter értékeket, a .Count pedig a darabszámot helyettesíti be.
Lehet csoportosítani felhasználó szerint is, avagy ha az adott felhasználó több számot lájkol egymás után, akkor ahhoz így kell sablont rendelni:
<msg name="title:Subject">${Subject} ${song.Count} dalt lájkolt.</msg> <msg name="body:Subject">Kedvenc dalai: ${song.List}. Kedvenc zenészei: ${artist.List}</msg>
Ha nincs alapértelmezett (nem csoportosított) sablon, akkor a rendszer a nem-csoportosított esetben a sorrendben legelső sablont használja megjelenítésre. A címlapra kikerüléshez kötelező legalább egy jellemző paraméter szerint csoportosítani mindegyik üzenettípust az alkalmazáson belül (az alap üzenet definiálásán kívül).
Végül, de nem utolsó sorban fogadjátok szeretettel példa alkalmazásunkat, a Rádió Aktivitást.
Felhasználó szerinti csoportosításnál nem ${Subject.DisplayName} lenne a helyes a ${Subject} helyett az üzenet szövegében?
A template-s activity létrehozása hibaüzenet ad, ha ezzel a példakóddal próbáljuk meg:
var options = {};
options[opensocial.Activity.Field.TITLE_ID] = “uzenet_cime”;
options[opensocial.Activity.Field.BODY_ID] = “uzenet_szovege”;
opensocial.requestCreateActivity(opensocial.newActivity(options));
Ha viszont a berakjuk még ezt a sort a createActivity elé:
options[opensocial.Activity.Field.TEMPLATE_PARAMS] = {};
akkor működik.