1. Případová studie: Kvíz - potřebné skripty na stránce Losování

    Článek: AN0002361Aktualizováno:: 04.11.2018

    Na stránce Losování máme dva webparty Skript, skript ve vlastní stránce a tlačítko Losovat.

    Skript ve stránce Losování

    function OnPreRender()
    {
      //skryt tlacitko pro hlasovani, pokud je jiz hlasovano a nema se opakovane hlasovat
      var rep = OG.DataParameter.GetDataParameter(OGModel.Id, 'repeated_drawing').ValueBool;
      var name = OG.DataParameter.GetDataParameter(OGModel.Id, 'name').ValueAsString;
      OGControlOperations['draw'].Visible = rep || OG.IsNull(name);
    }

    Stránka Losování - webpart Skript

    Tento webpart zajistí načtení informací o počtu účastníků a počtu správných odpovědí.

    function OnLoad()
    {
      var contestants = 0;
      var advancing = 0;

      var cl = OGModel.ClassDefs['data'];
      var f = OG.DataRow.GetDataRowFilter(cl.Id);
      f.Filter_OnlyActive = true;
      var drl = OG.DataRow.GetDataByFilter(f);
      contestants = drl.Count;

      f['q1'] = 2; /* filtruje jen správně zodpovězené odpovědi */
      f['q2'] = 4;
      f['q3'] = 1;
      f['q4'] = 4;
      f['q5'] = 4;
      f['q6'] = 6;
      f['q7'] = 4;
      drl = OG.DataRow.GetDataByFilter(f);
      advancing = drl.Count;

      var html = '<table><tr>' +
      '<td>Soutěžících:</td><td>' + contestants + '</td>' +
      '</tr><tr>' +
      '<td>Postupuje do slosování:</td><td>' + advancing + '</td>' +
      '</tr></table>';

      OGForm.AddControl( OGForm.CreateLiteralControl('l1', html));
    }

    I na této stránce definujeme CSS styly na záložce Styly příslušného webpartu Skript.

    div.obsah div.page
    {
    background-color: white;
    }
    h1.losovani
    {
    text-align: center;
    font-size: 30px;
    }

    Stránka Losování - webpart Skript 2

    Do stránky musíme vložit ještě jeden webpart Skript. Bude zajišťovat vlastní losování.

    function OnPreRender()
    {
    var name = OG.DataParameter.GetDataParameter(OGModel.Id, 'name').ValueAsString;
    var email = OG.DataParameter.GetDataParameter(OGModel.Id, 'email').ValueAsString;

    OGWebPart.Visible = OGWebPart.IsWPDesign || !OG.IsNull(name); /* Webpart se zobrazuje jen v designu nebo když je zadan parametr name */
    if ( !OG.IsNull(name))
    {
    var html = '<table><tr class="top">' +
    '<td>Vítěz:</td><td>' + name + '</td>' +
    '</tr><tr class="kontakt">' +
    '<td> </td><td>' + email + '</td>' +
    '</tr></table>';

    OGForm.AddControl( OGForm.CreateLiteralControl('l2', html));
    }
    }

    Stránka Losování - tlačítko na stránce

    Na stránce vytvoříme tlačítko Losovat. Tlačítko je typu Skript.

    //kontrola ze je parametr NAME prázdný, aby se nedalo hlasovat dvakrát
    //nebo je povoleno hlasovat opakovane
    var rep = OG.DataParameter.GetDataParameter(OGModel.Id, 'repeated_drawing').ValueBool;
    var name = OG.DataParameter.GetDataParameter(OGModel.Id, 'name').ValueAsString;
    if ( rep || OG.IsNull(name))
    {
    //udělat filtr nad správnými záznamy
    var cl = OGModel.ClassDefs['data'];
    var f = OG.DataRow.GetDataRowFilter(cl.Id);
    f.Filter_OnlyActive = true;
    f['q1'] = 2;
    f['q2'] = 4;
    f['q3'] = 1;
    f['q4'] = 4;
    f['q5'] = 4;
    f['q6'] = 6;
    f['q7'] = 4;
    var drl = OG.DataRow.GetDataByFilter(f);

    //získat random hodnotu v rozsahu nalezených záznamů <0-count)
    var winner = Math.floor(Math.random() * drl.Count); - Math je js knihovna

    //požadovaný záznam vybrat a ulozit do parametru
    var pName = OG.DataParameter.GetDataParameter(OGModel.Id, 'name');
    pName.Value = drl[winner]['name'];
    OG.DataParameter.Save(pName);

    var pEmail = OG.DataParameter.GetDataParameter(OGModel.Id, 'email');
    pEmail.Value = drl[winner]['email'];
    OG.DataParameter.Save(pEmail);

    //refresh stránky pro zobrazeni viteze
    OGForm.RedirectTo(OGContentPage.PageUrl);
    }

×