Ergebnis 1 bis 11 von 11

Thema: Zufälliger FAQ-Teaser

  1. #1
    Contao-Fan
    Registriert seit
    19.06.2009.
    Beiträge
    681

    Standard Zufälliger FAQ-Teaser

    Hallo zusammen,

    in einer 2.11-Installation suche ich nach einer Möglichkeit, Einträge aus einer FAQ-Liste in zufälliger Auswahl anzuteasern. Dabei würde es mir schon reichen, wenn zufällig eine der Fragen angezeigt wird, die dann auf die FAQ-Seite verlinkt. Ein Textteaser der Antwort muss nicht sein.

    Mit den Inserttags komme ich leider nicht weiter, da ich eine feste ID übergeben müsste, womit natürlich immer die gleiche Frage angezeigt würde.

    Hat vielleicht jemand spontan eine Idee, wie man das umsetzen könnte?

    Danke für jede Anregung!

    Gruß Alex

  2. #2
    Contao-Nutzer
    Registriert seit
    20.11.2013.
    Beiträge
    202

    Standard

    Vielleicht dann im Template eine zufällige ID per PHP übergeben. Oder eine Modul FAQ-Liste erstellen und alle Einträge per CSS ausblenden, und nur einen zufälligen per CSS wieder einblenden (damit z.B.). Aber auch da wird es ohne PHP wohl nicht gehn.

    Viele Grüße
    hippo

  3. #3
    Contao-Fan
    Registriert seit
    19.06.2009.
    Beiträge
    681

    Standard

    Danke für Deine Antwort. Hatte ich auch überlegt. Nicht mit CSS3, wegen der ausschließlichen Unterstützung durch modernste Browser, aber mit einem angepassten Template.

    Vielleicht etwas in diese Richtung? (Nicht getestet)

    PHP-Code:
    <!-- indexer::stop -->
    <div class="<?php echo $this->class?> block"<?php echo $this->cssID?><?php if ($this->style): ?> style="<?php echo $this->style?>"<?php endif; ?>>
    <?php if ($this->headline): ?>

    <<?php echo $this->hl?>><?php echo $this->headline?></<?php echo $this->hl?>>
    <?php endif; ?>
    <?php 
    foreach($this->faq as $category): ?>

    <h2><?php echo $category['headline']; ?></h2>

    <ul class="<?php echo $category['class']; ?>">

    <?php $maxcount 1?>
    <?php 
    foreach ($category['items']): ?>
    <?php $maxcount
    ++;>
    <?
    php endforeach; ?>

    <?php $faqid mt_rand(1,$maxcount); ?>

    <li><a href="{{faq_url::<?php echo $maxcount?>}}" title="{{faq_title::<?php echo $maxcount?>}}">{{faq_title::<?php echo $maxcount?>}}</a></li>

    </ul>
    <?php endforeach; ?>

    </div>
    <!-- indexer::continue -->
    Das Problem ist nur, dass man dem Modul FAQ-Liste kein angepasstes Template zuweisen kann. Alle Änderungen in der mod_faqlist.xhtml würden sich global auswirken ...

    Gruß Alex

  4. #4
    Contao-Nutzer
    Registriert seit
    20.11.2013.
    Beiträge
    202

    Standard

    Das sieht eigentlich gut aus, nur dass bei
    PHP-Code:
    <li><a href="{{faq_url::<?php echo $maxcount?>}}" title="{{faq_title::<?php echo $maxcount?>}}">{{faq_title::<?php echo $maxcount?>}}</a></li>
    nicht $maxcount sondern $faqid rein kommt?
    Du könntest anhand des Namen der FAQ-Liste eine If-Abfrage machen ->wenn es eine andere FAQ-Liste ist der normale Template-Code, wenn es deine bestimmte ist dein eigener Template-Code.

    Viele Grüße
    hippo

    EDIT: Sehe gerade noch (wenn ich das auf die schnelle richtig deute :/ ) dass du in der foreach-Schleife für die Items deine zufällige foreach-Schleife hast, d.h. dass so viele zufällige FAQs ausgegeben werden wie es Items gibt. Deine echo-Ausgabe darf erst nach der ersten Schleife erfolgen.

    EDIT EDIT: Und kann es sein, dass das das Template für eine FAQ-Liste ist, nicht etwa das Template für eine Liste der Fragen aus einem FAQ. Habs aber nicht überprüft - sieht irgendwie nur so aus... sry wenn ich falsch liege
    Geändert von hippo (24.06.2015 um 08:49 Uhr)

  5. #5
    Contao-Nutzer Avatar von michelb
    Registriert seit
    14.03.2011.
    Ort
    Essen
    Beiträge
    129
    User beschenken
    Wunschliste

    Standard

    Hast du es mit dem Auflisten-Modul probiert? Bin da weitergehend über diesen Beitrag gestolpert: Auflistung - Sortieren nach -> Zufall? . Ist natürlich etwas mehr Arbeit, da du noch das Template anpassen musst, aber vielleicht ein Schritt in eine ganz andere Richtung.

  6. #6
    Contao-Fan
    Registriert seit
    19.06.2009.
    Beiträge
    681

    Standard

    Zitat Zitat von hippo Beitrag anzeigen
    Das sieht eigentlich gut aus, nur dass bei
    PHP-Code:
    <li><a href="{{faq_url::<?php echo $maxcount?>}}" title="{{faq_title::<?php echo $maxcount?>}}">{{faq_title::<?php echo $maxcount?>}}</a></li>
    nicht $maxcount sondern $faqid rein kommt?
    Ja, natürlich, so war es eigentlich gedacht.

    Zitat Zitat von hippo Beitrag anzeigen
    Du könntest anhand des Namen der FAQ-Liste eine If-Abfrage machen ->wenn es eine andere FAQ-Liste ist der normale Template-Code, wenn es deine bestimmte ist dein eigener Template-Code.
    Sehr gute Idee! Das habe ich mal versucht einzubauen.

    Zitat Zitat von hippo Beitrag anzeigen
    EDIT: Sehe gerade noch (wenn ich das auf die schnelle richtig deute :/ ) dass du in der foreach-Schleife für die Items deine zufällige foreach-Schleife hast, d.h. dass so viele zufällige FAQs ausgegeben werden wie es Items gibt. Deine echo-Ausgabe darf erst nach der ersten Schleife erfolgen.
    Guter Einwand, das habe ich geändert. Habe auch noch versucht abzufangen, dass gar keine Einträge vorhanden sind.

    Zitat Zitat von hippo Beitrag anzeigen
    EDIT EDIT: Und kann es sein, dass das das Template für eine FAQ-Liste ist, nicht etwa das Template für eine Liste der Fragen aus einem FAQ. Habs aber nicht überprüft - sieht irgendwie nur so aus... sry wenn ich falsch liege
    Öh - gibt es da einen Unterschied? Ich habe nur drei Templates zum FAQ-Modul gefunden ...

    Mein Versuch sieht jetzt so aus:

    PHP-Code:
    <?php if ($category['headline'] = "Sonderkategorie"): ?>

    <!-- indexer::stop -->
    <div class="<?php echo $this->class?> block"<?php echo $this->cssID?><?php 

    if ($this->style): ?> style="<?php echo $this->style?>"<?php endif; ?>>
    <?php if ($this->headline): ?>

    <<?php echo $this->hl?>><?php echo $this->headline?></<?php echo $this->hl

    ?>>
    <?php endif; ?>
    <?php 
    foreach($this->faq as $category): ?>

    <h2><?php echo $category['headline']; ?></h2>

    <ul class="<?php echo $category['class']; ?>">

    <?php $maxcount 0?>
    <?php 
    foreach ($category['items']): ?>
    <?php $maxcount
    ++;>
    <?
    php endforeach; ?>

    <?php endforeach; ?>

    <?php if ($maxcount 0):
        
    $faqid mt_rand(1,$maxcount); ?>

    <li><a href="{{faq_url::<?php echo $faqid?>}}" title="{{faq_title::<?php echo 

    $faqid?>}}">{{faq_title::<?php echo $faqid?>}}</a></li>

    <?php else:
        echo 
    "Keine FAQ vorhanden.";
    endif; 
    ?>

    </ul>

    </div>
    <!-- indexer::continue -->

    <?php else: ?>

    <!-- indexer::stop -->
    <div class="<?php echo $this->class?> block"<?php echo $this->cssID?><?php 

    if ($this->style): ?> style="<?php echo $this->style?>"<?php endif; ?>>
    <?php if ($this->headline): ?>

    <<?php echo $this->hl?>><?php echo $this->headline?></<?php echo $this->hl

    ?>>
    <?php endif; ?>
    <?php 
    foreach($this->faq as $category): ?>

    <h2><?php echo $category['headline']; ?></h2>

    <ul class="<?php echo $category['class']; ?>">
    <?php foreach ($category['items'] as $faq): ?>

      <li class="<?php echo $faq['class']; ?>"><a href="<?php echo $faq['href']; ?

    >
    " title="<?php echo $faq['title']; ?>"><?php echo $faq['question']; ?

    ></
    a></li>
    <?
    php endforeach; ?>
    </ul>
    <?php endforeach; ?>

    </div>
    <!-- indexer::continue -->

    <?php endif; ?>
    Bin aber leider nicht firm in PHP, daher sind Verbesserungsvorschläge jederzeit willkommen.

    Gruß Alex

  7. #7
    Contao-Fan
    Registriert seit
    19.06.2009.
    Beiträge
    681

    Standard

    Zitat Zitat von michelb Beitrag anzeigen
    Hast du es mit dem Auflisten-Modul probiert? Bin da weitergehend über diesen Beitrag gestolpert: Auflistung - Sortieren nach -> Zufall? . Ist natürlich etwas mehr Arbeit, da du noch das Template anpassen musst, aber vielleicht ein Schritt in eine ganz andere Richtung.
    Danke für den Hinweis - auf die Idee bin ich noch nicht gekommen. Werde das mal als Plan B im Hinterkopf behalten!

    Gruß Alex

  8. #8
    Contao-Fan
    Registriert seit
    19.06.2009.
    Beiträge
    681

    Standard

    Offenbar ist mein Code fehlerhaft: Sobald das Modul auf einer Seite eingebunden ist, wird keinerlei FE-Code mehr generiert.

    Im Fehler-Log findet sich der Eintrag
    PHP Parse error: syntax error, unexpected ')' in /www/htdocs/WEB/templates/mod_faqlist.xhtml on line 20
    Nach meiner Zählung müsste das die Zeile
    PHP-Code:
    <?php foreach ($category['items']): ?>
    sein.

    Da stoßen meine PHP-"Kenntnisse" leider endgültig an ihre Grenzen.

    Gruß Alex

  9. #9
    Contao-Fan
    Registriert seit
    19.06.2009.
    Beiträge
    681

    Standard

    Ich versteh's nicht - die Fehlerstelle ist doch eigentlich identisch mit der Originalabfrage!?

    Wäre für jede Anregung dankbar ...

  10. #10
    Contao-Nutzer
    Registriert seit
    20.11.2013.
    Beiträge
    202

    Standard

    Bei Fehlern wie
    PHP Parse error: syntax error, unexpected ')' in /www/htdocs/WEB/templates/mod_faqlist.xhtml on line 20
    sind manchmal auch die Zeilen zuvor Schuld. D.h. z.B. ein vergessenenes Semikolon.

    Viele Grüße
    hippo

    EDIT: Ich glaub du darfst
    PHP-Code:
    <?php if ($maxcount 0): 
        
    $faqid mt_rand(1,$maxcount); ?>
    nicht umbrechen - also alles in eine Zeile.
    Geändert von hippo (14.07.2015 um 08:38 Uhr)

  11. #11
    Contao-Fan
    Registriert seit
    19.06.2009.
    Beiträge
    681

    Standard

    Das war es leider auch nicht.

    Statt
    PHP-Code:
    <?php $maxcount++;>
    muss es wohl außerdem
    PHP-Code:
    <?php $maxcount++; ?>
    heißen, aber das löst auch nicht das Problem.

    Ich vermute, dass die Case- bzw. foreach-Abfragen falsch angelegt sind, vermutlich darf die PHP-Anweisung nicht hinter einem Doppelpunkt enden. Muss man vielleicht sämtliches HTML ab dort via echo ausgeben?

    Derzeitiger Code:
    PHP-Code:
    <?php if ($category['headline'] = "Sonderkategorie"): ?>

    <!-- indexer::stop -->
    <div class="<?php echo $this->class?> block"<?php echo $this->cssID?><?php if ($this->style): ?> style="<?php echo $this->style?>"<?php endif; ?>>
    <?php if ($this->headline): ?>

    <<?php echo $this->hl?>><?php echo $this->headline?></<?php echo $this->hl?>>
    <?php endif; ?>
    <?php 
    foreach($this->faq as $category): ?>

    <h2><?php echo $category['headline']; ?></h2>

    <ul class="<?php echo $category['class']; ?>">

    <?php $maxcount 0?>
    <?php 
    foreach ($category['items']): ?>
    <?php $maxcount
    ++;?>
    <?php 
    endforeach; ?>

    <?php endforeach; ?>

    <?php if ($maxcount 0): $faqid mt_rand(1,$maxcount); ?>

    <li><a href="{{faq_url::<?php echo $faqid?>}}" title="{{faq_title::<?php echo $faqid?>}}">{{faq_title::<?php echo $faqid?>}}</a></li>

    <?php else:
        echo 
    "Keine FAQ vorhanden.";
    endif; 
    ?>

    </ul>

    </div>
    <!-- indexer::continue -->

    <?php else: ?>

    <!-- indexer::stop -->
    <div class="<?php echo $this->class?> block"<?php echo $this->cssID?><?php if ($this->style): ?> style="<?php echo $this->style?>"<?php endif; ?>>
    <?php if ($this->headline): ?>

    <<?php echo $this->hl?>><?php echo $this->headline?></<?php echo $this->hl?>>
    <?php endif; ?>
    <?php 
    foreach($this->faq as $category): ?>

    <h2><?php echo $category['headline']; ?></h2>

    <ul class="<?php echo $category['class']; ?>">
    <?php foreach ($category['items'] as $faq): ?>

      <li class="<?php echo $faq['class']; ?>"><a href="<?php echo $faq['href']; ?>" title="<?php echo $faq['title']; ?>"><?php echo $faq['question']; ?></a></li>
    <?php endforeach; ?>
    </ul>
    <?php endforeach; ?>

    </div>
    <!-- indexer::continue -->

    <?php endif; ?>
    Gruß Alex

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
  •