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
Liste der Anhänge anzeigen (Anzahl: 1)
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.
Liste der Anhänge anzeigen (Anzahl: 1)
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'] ?>
Liste der Anhänge anzeigen (Anzahl: 1)
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(); ?>