Ergebnis 1 bis 22 von 22

Thema: Auflistung - Sortieren nach -> Zufall?

  1. #1
    Contao-Nutzer
    Registriert seit
    30.06.2009.
    Beiträge
    112

    Standard Auflistung - Sortieren nach -> Zufall?

    Hallo,

    ich habe gelesen das ich als Sortierbedingung "rand()" verwenden kann, jedoch klappt das nicht, mein Contao bringt dann immer einen Fehler im Frontend.
    Welche Möglichkeit hab ich noch um ein "Random" einzubauen.

    Foldende Verwendung ist geplant:

    Ich will zufällig von Usern eingesendete Nachrichten anzeigen.
    Dann war mein Plan, die Elemente pro Seite auf 1 zu setzen und ein "random" einzubauen.

    Danke im voraus
    Dj-Harem

  2. #2
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.706
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Das könntest du leicht über eine Template-Anpassung und die PHP-Funktion shuffle() erreichen.

    Gruß Andreas
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  3. #3
    Contao-Nutzer
    Registriert seit
    30.06.2009.
    Beiträge
    112

    Standard

    Hallo Andreas,

    das hört sich schon einmal vielversprechend an!

    Hatte nun im Template list_default folgende 'Änderungen gemacht.
    Code:
    <?php foreach ($row as $col): ?>
    zu
    Code:
    <?php shuffle($row); foreach ($row as $col): ?>
    Jetzt sind natürlich die Splaten durcheinander und nicht die Reigen! :-)
    Funktioniert das überhaubt wenn ich die Anzahl der Einträge auf 1 begrenze?
    Hat er dann überhaupt was zu "shufflen"?

    Danke
    Dj-Harem

  4. #4
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.706
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Ne, da hast du Recht, wenn du auf 1 begrenzt hat er nix zu schaffeln.

    Dann begrenze das Modul nicht auf 1. Mach die Begrenzung iinnerhalb des Templates. Stell in dem Modul den Bereich ein, aus welchem der Random ausgesucht werden soll. Ich weiß jetzt nicht, welches Template du da hast. Du musst auf jeden Fall das Array shuffeln, welches die einzelnen Events, Nachrichten, oder was du da hast beinhaltet. Wenn du nur eins ausgibst, brauchst du auch keine foreach-Schleife.

    Falls du's noch nicht kennst.

    $this->showTemplateVars();

    Gibt die Variablen im FE aus.
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  5. #5
    Contao-Nutzer
    Registriert seit
    30.06.2009.
    Beiträge
    112

    Standard

    Hallo Andreas,

    hab das Ganze jetzt mal getestet, jedoch ohne Erfolg! :-(
    Das Template, das ich verwende, ist das list_default.tpl, aber theoretisch könnte ich auch ein anderes nehmen.
    Ja $this->showTemplateVars(); kenne ich, hab auch das Array gefunden.
    Jedoch hab ich alles Mögliche ausprobiert, jedoch kam nichts dabei raus.

    Es wäre super nett, wenn mir hiermit jemand explizit helfen könnte.
    Oder aber auch nur ein Beispiel Szenario machen.

    Vielen Dank und schönen Abend noch.
    Dj-Harem

  6. #6
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.706
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Jo, lass mich mal nachsehen, kann ja nicht so viel sein. Schreib mir ne Mail.
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  7. #7
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.706
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Du kannst $this->tbody nicht direkt shufflen, du musst es erst in ein echtes Array umwandeln.
    PHP-Code:
    <?php
      $arrDaten 
    $this->tbody;
      
    shuffle($arrDaten);
      
    $i=0;
      foreach (
    $arrDaten as $datensatz => $arrWerte) {
        foreach (
    $arrWerte as $wert){
          echo 
    '<div>'.$wert['content'].'</div>';
        }
        
    $i++;
        if(
    $i == 1) {
          break;
        }
      }
    ?>
    Gruß Andreas
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  8. #8
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.706
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Vergessen, es gibt ja auch noch array_rand() http://de3.php.net/manual/de/function.array-rand.php

    Du kannst auch leicht mit ein wenig php z.B. einen Zufalls-Artikel per Inserttag ausgeben lassen. Dazu brauchst du u.U. $this->replaceInsertTags().

    Gruß Andreas
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  9. #9
    Contao-Nutzer
    Registriert seit
    30.06.2009.
    Beiträge
    112

    Standard

    Danke Andreas, habe den Code erfolgreich eingebaut.
    Jetzt habe ich das Problem, das ich noch gerne alles schön formatieren möchte.
    Dazu müsste ich aber einzelne Werte jeweils Extra ausgeben bzw. ansprechen können, damit ich um diese dann die jeweiligen Tags bauen kann.
    Zudem will ich ein im Formular hochladbares Bild auch gleich mit anzeigen lassen,
    im Moment wird nur der Pfad angezeigt, da nur dieser in der Datenbank liegt und nicht das Bild selber. Also muss ich ein Bildelement einfügen und das "src" dynamisch gestalten.

    Wäre genial wenn mir jemand weiterhelfen könnte.
    Dj-Harem

    Zitat Zitat von Andreas Beitrag anzeigen
    Du kannst $this->tbody nicht direkt shufflen, du musst es erst in ein echtes Array umwandeln.
    PHP-Code:
    <?php
      $arrDaten 
    $this->tbody;
      
    shuffle($arrDaten);
      
    $i=0;
      foreach (
    $arrDaten as $datensatz => $arrWerte) {
        foreach (
    $arrWerte as $wert){
          echo 
    '<div>'.$wert['content'].'</div>';
        }
        
    $i++;
        if(
    $i == 1) {
          break;
        }
      }
    ?>
    Gruß Andreas

  10. #10
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.706
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Hi, ich denke du hast von Anfang an einen Denkfehler, denn wenn du eine News ausgeben willst, dann nimmst du doch besser die News-List und nicht die Auflistung. Dann hast du es auch direkt formatiert. Ich schau mal, ob ich das in ner Demo-Installation hinkriege und melde mich dann wieder.

    Gruß Andreas
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  11. #11
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.706
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Jo, mach einfach ein Modul Nachrichtenliste, wie im Screenshot. Gib ihm die CSS-Klasse 'randomNews' (wenn du das Modul als Inhaltselement ausgibst, muss die Klasse ins Inhaltselement).

    Erstelle ein neues Template aus mod_newslist.tpl und ersetze folgende Zeile
    PHP-Code:
    <?php foreach($this->articles as $article) echo $article?>
    Durch das hier
    PHP-Code:
    <?php

    if(strpos($this->class'randomNews') !== false) {

      
    $intRandomKey array_rand($this->articles);

      echo 
    $this->articles[$intRandomKey];
    }
    else{
      foreach(
    $this->articles as $article) echo $article;
    }

    ?>
    Momentan kann man noch keine mod_XXX.tpl Templates auswählen, deswegen die Unterscheidung anhand der Klasse.

    Gruß Andreas

    Ach, Mist, sorry, immer das Gleiche. Die Klasse 'randomNews' muss im Inhaltselement vergeben werden, wenn man das Modul dort ausgibt, eine Klasse die man im Modul eingibt wird im FE dann nämlich nicht ausgegeben.
    Angehängte Grafiken Angehängte Grafiken
    Geändert von Andreas (23.05.2011 um 20:08 Uhr) Grund: Fehler behoben
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  12. #12
    Contao-Nutzer
    Registriert seit
    30.06.2009.
    Beiträge
    112

    Standard

    Danke Andreas für die promte Antwort.
    Nein, ich will keine News ausgeben.
    Ich hab ein Formular und will über "Formulardaten Auflisten" die gespeicherten Daten ausgeben. Also immer zwei zufällige.
    Und diese will ich natürlich schön formatieren

    Gruß Dj-Harem

  13. #13
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.706
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Zitat Zitat von Dj-Harem Beitrag anzeigen
    Ich will zufällig von Usern eingesendete Nachrichten anzeigen.
    Daran hatte ich mich jetzt orientiert, aber mit den Infos, die du bislang hast müsstest du es ja hin bekommen.

    Gruß Andreas
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  14. #14
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.706
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Falls du eine SQL-Anweisung im Modul eingeben kannst, kannst du auch die DB direkt die Zufallsausgabe übernehmen lassen.
    Code:
    SELECT * FROM tabelle ORDER BY RAND() LIMIT 1
    Evtl. im Sortierfeld nur RAND() eingeben.

    Gruß Andreas
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  15. #15
    Contao-Nutzer
    Registriert seit
    30.06.2009.
    Beiträge
    112

    Standard

    Hallo,

    wie schon im ersten Beitrag geschrieben funktion "im Sortierfeld nur RAND() eingeben" leider nicht.
    Prinzipiell habe ich ja die Zufallsdarstellung gelöst.

    Mein Problem ist jetzt noch, das ich das Ganze noch formatieren will.
    Und wie schon geschrieben ein Bildelement einfügen und das "src" dynamisch gestalten.
    Deshalb würde ich gerne die Felder einzeln ausgeben lassen.
    Nur das bekomme ich leider im Moment noch nicht hin!

    Gruß Dj-Harem

  16. #16
    Contao-Nutzer
    Registriert seit
    30.06.2009.
    Beiträge
    112

    Standard

    Hallo,

    hat bisher noch niemand das Problem gehabt?
    Sollte "RAND()" funktionieren?
    Oder wie habt ihr das umgesetzt?

    DAnk
    Gruß DJ-Harem

  17. #17
    Contao-Nutzer
    Registriert seit
    30.06.2009.
    Beiträge
    112

    Frage

    Hallo,

    um den Stein hoffentlich noch mal ein bisschen ins Rollen zu bekommen,
    da ich einfach auf dem Schlauch stehe, hier das Ganze nochmal ausführlicher.

    Folgenes gibt unter anderem $this->replaceInsertTags() aus.
    Code:
     [tbody] => Array
            (
                [row_0 row_first even] => Array
                    (
                        [0] => Array
                            (
                                [id] => 8
                                [alias] => 
                                [content] => tl_files/test/lorem.png
                                [raw] => tl_files/test/lorem.png
                                [class] => col_0 col_first
                                [link_details] => index.php/untermenue-1.html?details=8
                                [link_edit] => 
                                [link_delete] => 
                                [link_export] => 
                                [type] => file
                                [src] => tl_files/test/lorem.png
                                [display] => image
                            )
    
                        [1] => Array
                            (
                                [id] => 8
                                [alias] => 
                                [content] => K. Mustermann
                                [raw] => K. Mustermann
                                [class] => col_1
                                [link_details] => index.php/untermenue-1.html?details=8
                                [link_edit] => 
                                [link_delete] => 
                                [link_export] => 
                            )
    
                        [2] => Array
                            (
                                [id] => 8
                                [alias] => 
                                [content] => LoremIpsum
                                [raw] => LoremIpsum
                                [class] => col_2 col_last
                                [link_details] => index.php/untermenue-1.html?details=8
                                [link_edit] => 
                                [link_delete] => 
                                [link_export] => 
                            )
    
                    )
    Daraus will ich jetzt nachstehendes basteln.
    HTML-Code:
    <div>
    <img src="tl_files/test/lorem.png">
    </div>
    <blockquote>
    <p>LoremIpsum</p>
    K. Mustermann
    </blockquote>
    Vielen vielen Dank im voraus
    Dj-Harem

  18. #18
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.706
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    PHP-Code:
    <?php

    $arrItem 
    $this->tbody['row_0 row_first even'];

    $strImagePath $arrItem[0]['raw'];
    $strHeadline  $arrItem[2]['raw'];
    $strContent   $arrItem[1]['raw'];

    echo 
    '
      <div>
        <img src="'
    .$strImagePath.'" width="" height="" title="" alt="" />
      </div>
      <blockquote>
        <p>
          '
    .$strHeadline.'
        </p>
        <p>
          '
    .$strContent.'
        </p>
      </blockquote>
      '
    ;

    ?>
    http://de.selfhtml.org/html/text/zit...sen.htm#zitate
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  19. #19
    Contao-Nutzer
    Registriert seit
    27.02.2010.
    Beiträge
    15

    Standard

    Habe ein ähnliches Problem und dieser Beitrag scheint mir dem recht nahe zu kommen: Ich würde gerne die Artikel einer Seite in einer zufälligen Reihenfolge ausgeben lassen.
    Konkret geht es um ein paar dutzend Bilder, die per ce_rater bewertet werden sollen. Das ist auch schon implementiert, benötige eben bloß noch die Möglichkeit, die Artikel zu shuffeln. Finde aber nicht einmal das entsprechende Template?!

    Danke schonmal

  20. #20
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.706
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Ein erster Ansatz zu später Stunde:

    mod_article gibt die Artikel aus.

    $this->showTemplateVars(); zeigt dir die Variablen des Templates.

    Arraybehandlung findest du hier http://de.php.net/manual/de/ref.array.php da ist z.B. auch shuffle() dabei.

    RAND() aus obigem Post ist ein SQL-Befehl, du brauchst im Template aber PHP.
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  21. #21
    Contao-Nutzer
    Registriert seit
    27.02.2010.
    Beiträge
    15

    Standard

    Oh man, das funktioniert einfach nicht. Mir kommt es auch vor, als ob mod_article immer nur einen Artikel ausgibt und man in dem entsprechenden Template nur die Elemente shuffeln könnte (auch das bekomme ich allerdings nicht hin). Aber ich brauche ja die ausgegebenen ARTIKEL geshuffelt!
    Falls einer Zeit hat, wären ein paar Zeilen Code echt nett, ich steige hier nicht durch leider…
    Danke auf jeden Fall für eure Mühe!

  22. #22
    Contao-Nutzer
    Registriert seit
    27.02.2010.
    Beiträge
    15

    Standard

    Der "Vollständigkeit" halber: Ich habe nun das Modul [randomarticle] benutzt. Erstellt man mehrere solcher auf einer Seite, so wird kein Artikel doppelt ausgegeben, wie ich vermutet hätte (es gibt auch keine Einstellung dazu). Nachzulesen auch hier: https://www.contao-community.de/show...le#post_206259

    Lieben Gruß und Danke nochmal!

Aktive Benutzer

Aktive Benutzer

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

Berechtigungen

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