Ergebnis 1 bis 5 von 5

Thema: [Gelöst] Item nur einmal pro Tag und Besucher mischen

  1. #1
    Contao-Nutzer
    Registriert seit
    18.08.2011.
    Beiträge
    68

    Standard [Gelöst] Item nur einmal pro Tag und Besucher mischen

    Hallo,
    habe mir die Itemausgabe etwas umgestaltet, Damit immer nur ein Zufallsitem angezeigt wird.
    Jetzt würde ich aber gerne das Item per Cookie und oder besser Session ID auf den Besucher fixieren. Damit wenn er erneut auf die Seite kommt oder neu lädt, dass das selbe Item angezeigt wird.

    Wie kann ich das am besten umsetzen?

    Hier mein bis jetzt gebauter Code:
    PHP-Code:
    <?php $strRendersettings = ($this->settings)? 'settings' 'view'?>
    <?php 
    if (count($this->data)):

        
    $cardofday $this->data;
        
    srand((float)microtime() * 1000000);
        
    shuffle($cardofday);

        
    $i 1;
        foreach (
    $cardofday as $arrItem) {
            if (
    $i <= 1) { ?>
                <div class="col-md-12 item <?php echo $arrItem['class']; ?>">
                    <div class="item-inner row">

                        <div class="col-md-12 field">
                            <div class="title list"><?php echo $arrItem['text']['cardname']; ?></div>
                        </div>
                        <div class="locitem">
                            <div class="col-md-4 field image">
                                <?php echo $arrItem['html5']['image']; ?>
                            </div>
                            <div class="col-md-8 field text">
                                <?php echo $arrItem['html5']['text']; ?>
                            </div>
                        </div>
                    </div>
                </div>
                <?php $i++;
            } else { break; }
        } 
    ?>

    <?php else: ?>
        <div class="col-md-12">
            <p class="info"><?php echo $this->noItemsMsg?></p>
        </div>
    <?php endif; ?>
    Danke
    Geändert von BlackP (13.05.2014 um 20:51 Uhr)

  2. #2
    Contao-Urgestein Avatar von Tim G
    Registriert seit
    13.02.2010.
    Ort
    Lübeck
    Beiträge
    2.210
    User beschenken
    Wunschliste

    Standard

    1. http://www.php.net/manual/de/function.shuffle.php

    Speicher dir die Id ab:

    schreiben:
    \Session::getInstance()->set('mein-item',$meineItemId);

    lesen:
    \Session::getInstance()->get('mein-item');

    Kannst auch noch nen Zeitstempel dazu speichern, damit es für den nächsten Tag resetted wird. Oder Du nimmst nen kleinen Cronjob dafür, der die Session-Variable wieder leer.
    http://www.tim-gatzky.de ˙ auch schon wieder 2 Jahre alt - wie die Zeit vergeht... muss mal umbauen.

  3. #3
    Contao-Nutzer
    Registriert seit
    18.08.2011.
    Beiträge
    68

    Standard

    Hi,
    danke für den Tip, habe es bis jetzt auch fast hinbekommen, nur leider da ich eine mehrsprachige seite nutzte und als erstes die jumpTo url in die Session gespeichert hatte ist das etwas unvorteilhaft.

    Jetzt habe ich die ID des Items abgespeichert, schaffe es aber nicht die jumpTo url des Items, das in der Session gespeichert ist, auszulesen.
    Kann mir jemand den Code geben wie ich gezielt Daten aus dem Item lesen kann mit der von mir gespeicherten Item ID.

    Das ist der Code der von Metamodel ausgegeben wird (es ist nur das erste Item):

    Code:
    [data] => Array
            (
                [0] => Array
                    (
                        [raw] => Array
                            (
                                [id] => 3
                                [pid] => 0
                                [sorting] => 0
                                [tstamp] => 1394722580
                                [aliasURL] => Array
                                    (
                                        [id] => 9
                                        [tstamp] => 1394722565
                                        [att_id] => 15
                                        [item_id] => 3
                                        [langcode] => de
                                        [value] => der-narr
                                    )
    
                            )
    
                        [text] => Array
                            (
                                [aliasURL] => der-narr
                            )
    
                        [attributes] => Array
                            (
                                [aliasURL] => Alias [URL]
                            )
    
                        [html5] => Array
                            (
                                [aliasURL] => der-narr
    
                            )
    
                        [jumpTo] => Array
                            (
                                [params] => Array
                                    (
                                        [auto_item] => der-narr
                                    )
    
                                [deep] => 1
                                [label] => Details
                                [page] => 24
                                [url] => de/tarotkarte-des-tages-24/der-narr.html
                            )
    
                        [class] => first even
                    )
    PS: den fertigen Code werde ich dann posten wenn alles funktioniert.

    Danke
    Geändert von BlackP (21.03.2014 um 07:43 Uhr)

  4. #4
    Contao-Nutzer
    Registriert seit
    18.08.2011.
    Beiträge
    68

    Daumen hoch

    Hallo,
    habe es geschaft und hier ist der Code:

    PHP-Code:
    <?php $strRendersettings = ($this->settings)? 'settings' 'view'?>
    <?php

    if (count($this->data)):

        
    $cardofday $this->data;
        
    $timestamp time();
        
    $dayToday date("dm"$timestamp);
        
    $myCoD = \Session::getInstance()->get('mycardofday');
        
    $mycodDate = \Session::getInstance()->get('mycardofdayDate');
        
        if ((!isset(
    $myCoD)) || ($mycodDate != $dayToday)) {
            
            
    shuffle($cardofday);
            foreach (
    $cardofday as $arrItem) { ?>
                <div class="col-md-12 item <?php echo $arrItem['class']; ?>">
                    <a href="<?php echo $arrItem['jumpTo']['url']; ?>" ><img class="img-responsive center" src="../tl_files/cards/empty-card-of-the-day.png" /></a>
                </div>
                <?php 
                
    \Session::getInstance()->set('mycardofday',$arrItem['raw']['id']);
                \
    Session::getInstance()->set('mycardofdayDate',$dayToday);
                break;
            }
        
        } else { 
        
            if (
    $mycodDate == $dayToday) {
                foreach (
    $this->data as $arrItem) {
                    if (
    $arrItem['raw']['id'] == $myCoD) { ?>
                        <div class="col-md-12 item <?php echo $arrItem['class']; ?>">
                            <a href="<?php echo $arrItem['jumpTo']['url']; ?>" ><img class="img-responsive center" src="../tl_files/cards/empty-card-of-the-day.png" /></a>
                        </div>
                    <?php
                    
    }
                }
            }
        }

    else: 
    ?>
        <div class="col-md-12">
            <p class="info"><?php echo $this->noItemsMsg?></p>
        </div>
    <?php endif; ?>
    Gruß BlackP
    Geändert von BlackP (13.05.2014 um 20:49 Uhr)

  5. #5
    Contao-Nutzer
    Registriert seit
    18.08.2011.
    Beiträge
    68

    Standard

    Geschafft!!

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •