Hírfolyam az iWiW nyitóoldalon: csoportosítás

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.

2 megjegyzés - “Hírfolyam az iWiW nyitóoldalon: csoportosítás”


  1. 1 Orosz Gergely

    Felhasználó szerinti csoportosításnál nem ${Subject.DisplayName} lenne a helyes a ${Subject} helyett az üzenet szövegében?

  2. 2 Ádám Pfenninberger

    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.

Hagyj egy megjegyzést