Ergebnis 1 bis 7 von 7

Thema: Einzelne FAQ "schützen" - Mitgliedergruppe

  1. #1
    Contao-Urgestein Avatar von Kahmoon
    Registriert seit
    22.06.2009.
    Ort
    München
    Beiträge
    5.280

    Standard Einzelne FAQ "schützen" - Mitgliedergruppe

    Servus beisammen,

    bei einem Kunden werden neue Kursmodelle eingeführt, bei denen ein paar der vorhandenen FAQ nicht zutreffen sind. Ich würde daher gerne einzelne FAQ schützen....aktuell scheint das nur mit einem kompletten Archiv zu gehen. Das würde aber eine extreme Doppelpflege mit sich bringen, denn 8 von 10 FAQs wäre für alle.

    Kann man das FAQ Modul hier entsprechend ein wenig aufbohren? Wenn es nicht über den Core Schutz geht vielleicht mit einem zusätzlichen Feld in der DCA und einer entsprechenden Abfrage im Template?

    VG Frank

  2. #2
    Contao-Urgestein Avatar von Kahmoon
    Registriert seit
    22.06.2009.
    Ort
    München
    Beiträge
    5.280

    Standard

    Ich habe es jetzt mal mit einem Custom Feld versucht aber irgendwie wird mir das nicht ausgegeben. Eigentlich habe ich das bei Member und Kalender auch schon Custom Fields im Einsatz....irgendwie mag es bei FAQ nicht.


    contao/dca/tl_faq.php
    Code:
    <?php
     #Custom Felder anlegen
    use Contao\CoreBundle\DataContainer\PaletteManipulator;
    
    
    $GLOBALS['TL_DCA']['tl_faq']['fields']['sichtbarkeit'] = [
        'label'         => ['Sichtbarkeit', 'Einstellung welche Kurstypen diese FAQ angezeigt bekommen.'],
        'exclude'       => true,
        'search'        => false,
        'default'        => 'Alle',
        'inputType'     => 'select',
        'options'       => array('Alle', 'Blockkurse', 'Gruppenkurse', 'Onlinekurse'),
        'eval'          => array('tl_class'=>'w25', 'includeBlankOption' => false, 'mandatory'=>true),
        'sql'           => "varchar(32)"
    ];
    
    
    PaletteManipulator::create()
    ->addLegend('Sichtbarkeit', 'title_legend', PaletteManipulator::POSITION_AFTER)
    ->addField('sichtbarkeit', 'Sichtbarkeit', PaletteManipulator::POSITION_APPEND)
    ->applyToPalette('default', 'tl_faq')
    ;
    Datenbank aktualisiert und Cache geleert.

    Im Backend ist das Feld funktionsfähig. Auch in der DB stehen Werte.

    In der Ausgabe im Template ist <?= $this->sichtbarkeit ?> allerdings leer. Getestet in Listing und Reader Modul. Ich bräuchte es im Listingmodul.
    Angehängte Grafiken Angehängte Grafiken

  3. #3
    Contao-Urgestein Avatar von Kahmoon
    Registriert seit
    22.06.2009.
    Ort
    München
    Beiträge
    5.280

    Standard

    Mit der Ausgabe der Templatevars finde ich die Variable. Aber meine Ausgabe müsste doch stimmen?

    Edit:
    Ich müsste irgendwie eine Stufe weiter rein. <?= $this->faq['sichtbarkeit'] ?> gibt den Wert im Reader aus. In der Liste ist es <?= $faq['sichtbarkeit'] ?>
    Angehängte Grafiken Angehängte Grafiken
    Geändert von Kahmoon (03.01.2023 um 09:17 Uhr)

  4. #4
    Contao-Urgestein Avatar von Kahmoon
    Registriert seit
    22.06.2009.
    Ort
    München
    Beiträge
    5.280

    Standard

    In der Abfrage im Listingtemplate habe ich es jetzt wie folgt gelöst. Die If Abfrage sind noch etwas mächtig.....aber mir fällt nichts schlankeres ein ;-)

    Code:
    <?php $this->extend('block_unsearchable'); ?>
    
    
    <?php $this->block('content'); ?>
    
    
      <?php foreach ($this->faq as $category): ?>
        <div class="mt-2 mb-5 faq">
            <?php
            $anker = str_replace(' ', '', trim($category['headline']));
            ?>
            <a id="<?= strtolower($anker) ?>" class="anker"></a>
        <h3><?= $category['headline'] ?></h3>
        
        <ul class="<?= $category['class'] ?> question">
          <?php foreach ($category['items'] as $faq): ?>
            <?php if($faq['sichtbarkeit'] == "Alle"): ?>
                <li class="<?= $faq['class'] ?>"><a href="<?= $faq['href'] ?>" title="<?= $faq['title'] ?>"><?= $faq['question'] ?></a></li>
            <!-- Frontend Mitgliedergruppe "Gruppenkurs" prüfen -->
            <?php elseif($faq['sichtbarkeit'] == "Gruppenkurse" && FrontendUser::getInstance()->isMemberOf(20)): ?>
                <li class="<?= $faq['class'] ?>"><a href="<?= $faq['href'] ?>" title="<?= $faq['title'] ?>"><?= $faq['question'] ?></a></li>
            <!-- Frontend Mitgliedergruppe "Onlinekurs" prüfen -->
            <?php elseif($faq['sichtbarkeit'] == "Onlinekurse" && FrontendUser::getInstance()->isMemberOf(133)): ?>
                <li class="<?= $faq['class'] ?>"><a href="<?= $faq['href'] ?>" title="<?= $faq['title'] ?>"><?= $faq['question'] ?></a></li>
            <!-- Frontend Mitgliedergruppe "BLockkurs" prüfen -->
            <?php elseif($faq['sichtbarkeit'] == "Blockkurse" && FrontendUser::getInstance()->isMemberOf(134)): ?>
                <li class="<?= $faq['class'] ?>"><a href="<?= $faq['href'] ?>" title="<?= $faq['title'] ?>"><?= $faq['question'] ?></a></li>
            <?php endif; ?>
          <?php endforeach; ?>
        </ul>
        </div>
      <?php endforeach; ?>
    
    
    <?php $this->endblock(); ?>

  5. #5
    Contao-Urgestein Avatar von Kahmoon
    Registriert seit
    22.06.2009.
    Ort
    München
    Beiträge
    5.280

    Standard

    Noch ein kleines Anliegen. Es kann sein das eine FAQ auf diesem Wege für 2 Kurstypen zur Verfügung stehen soll.....hier wären Checkboxen besser als ein Select. Ich habe es also noch mal etwas umgebaut.


    Code:
    $GLOBALS['TL_DCA']['tl_faq']['fields']['sichtbarkeit'] = [    'label'         => ['Sichtbarkeit', 'Einstellung welche Kurstypen diese FAQ angezeigt bekommen.'],
        'exclude'       => true,
        'search'        => false,
        'inputType'     => 'checkbox',
        'default'        => 'Alle',
        'options'       => array('Alle', 'Blockkurse', 'Gruppenkurse', 'Onlinekurse'),
        'eval'          => array('multiple' => true, 'mandatory'=>true),
        'sql'           => [
            'type' => 'blob',
        ],
    ];

    Hier werden die Daten jetzt allerdings als Blob gespeichert. Wie gebe ich das im Template aus?

    Code:
    "sichtbarkeit" => "a:2:{i:0;s:4:"Alle";i:1;s:10:"Blockkurse";}"

  6. #6
    Contao-Urgestein Avatar von Kahmoon
    Registriert seit
    22.06.2009.
    Ort
    München
    Beiträge
    5.280

    Standard

    Sorry für das Selbstgespräch hier :-)

    Anbei noch eine Lösung mittels mehrfacher Auswahl. Vielleicht kann das ja jemand brauchen.

    contao/dca/tl_faq.php
    Code:
    <?php
     #Custom Felder anlegen
    use Contao\CoreBundle\DataContainer\PaletteManipulator;
    
    
    
    
    $GLOBALS['TL_DCA']['tl_faq']['fields']['sichtbarkeit'] = [
        'label'         => ['Sichtbarkeit', 'Einstellung welche Kurstypen diese FAQ angezeigt bekommen.'],
        'exclude'       => true,
        'search'        => false,
        'inputType'     => 'checkbox',
        'default'        => 'Alle',
        'options'       => array('Alle', 'Blockkurse', 'Gruppenkurse', 'Onlinekurse'),
        'eval'          => array('multiple' => true, 'mandatory'=>true),
        'sql'           => [
            'type' => 'blob',
        ],
    ];
    
    
    
    
    PaletteManipulator::create()
    ->addLegend('Sichtbarkeit', 'title_legend', PaletteManipulator::POSITION_AFTER)
    ->addField('sichtbarkeit', 'Sichtbarkeit', PaletteManipulator::POSITION_APPEND)
    ->applyToPalette('default', 'tl_faq')
    ;
    mod_faqlist.html5
    Code:
    <?php $this->extend('block_unsearchable'); ?>
    
    
    <?php $this->block('content'); ?>
    
    
      <?php foreach ($this->faq as $category): ?>
        <div class="mt-2 mb-5 faq">
            <?php
            $anker = str_replace(' ', '', trim($category['headline']));
            ?>
            <a id="<?= strtolower($anker) ?>" class="anker"></a>
        <h3><?= $category['headline'] ?></h3>
        
        <ul class="<?= $category['class'] ?> question">
          <?php foreach ($category['items'] as $faq): ?>
            <?php $sichtbarkeit = unserialize($faq['sichtbarkeit']) ?>
    
    
            <?php if(in_array("Alle",$sichtbarkeit,TRUE)): ?>
                <li class="<?= $faq['class'] ?>"><a href="<?= $faq['href'] ?>" title="<?= $faq['title'] ?>"><?= $faq['question'] ?></a></li>
            
            <!-- Frontend Mitgliedergruppe "Gruppenkurse" prüfen -->
            <?php elseif(in_array("Gruppenkurse",$sichtbarkeit,TRUE) && FrontendUser::getInstance()->isMemberOf(20)): ?>
                <li class="<?= $faq['class'] ?>"><a href="<?= $faq['href'] ?>" title="<?= $faq['title'] ?>"><?= $faq['question'] ?></a></li>
                
            <!-- Frontend Mitgliedergruppe "Onlinekurse" prüfen -->
            <?php elseif(in_array("Onlinekurse",$sichtbarkeit,TRUE) && FrontendUser::getInstance()->isMemberOf(133)): ?>
                <li class="<?= $faq['class'] ?>"><a href="<?= $faq['href'] ?>" title="<?= $faq['title'] ?>"><?= $faq['question'] ?></a></li>
                
            <!-- Frontend Mitgliedergruppe "Blockkurse" prüfen -->
            <?php elseif(in_array("Blockkurse",$sichtbarkeit,TRUE) && FrontendUser::getInstance()->isMemberOf(134)): ?>
                <li class="<?= $faq['class'] ?>"><a href="<?= $faq['href'] ?>" title="<?= $faq['title'] ?>"><?= $faq['question'] ?></a></li>
            <?php endif; ?>
          <?php endforeach; ?>
        </ul>
        </div>
      <?php endforeach; ?>
    
    
    <?php $this->endblock(); ?>
    Angehängte Grafiken Angehängte Grafiken
    Geändert von Kahmoon (17.01.2023 um 16:06 Uhr)

  7. #7
    Contao-Urgestein Avatar von Kahmoon
    Registriert seit
    22.06.2009.
    Ort
    München
    Beiträge
    5.280

    Standard

    Kleines Update für die Sicherheit um nicht unserialize zu verwenden.

    PHP-Code:
    <?php $sichtbarkeit = \StringUtil::deserialize($faq['sichtbarkeit']) ?>
    statt
    PHP-Code:
    <?php $sichtbarkeit unserialize($faq['sichtbarkeit']) ?>

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
  •