Ankündigung
Einklappen
Keine Ankündigung bisher.
Template: CC FIlter: Alphabetische Liste oder numerische Liste als Linkliste
Einklappen
X
-
-
Gehen tut alles. Muss man halt die Buchstaben vorher einzeln gegenprüfen und ggf. rauskicken.
Kommentar
-
Ich habe das jetzt so gelöst.
Eine 2 Liste anzeigen lassen.
Das Template dazu schaut so aus:
PHP-Code:<div class="cc_a-z_linklist_helper"><ul>
<?php foreach($this->entries as $entry): ?>
<li><?php echo substr($entry->field('Feldname')->value(), 0,1); ?></li>
<?php endforeach; ?>
</ul></div>
Das Template customcatalog_filter_linklist.html5 habe ich mit etwas JQuery erweitert. Jetzt werden nur noch die Einträge angezeigt die es gibt.
PHP-Code:<?php
/**
* Linklist (alphabetic or numeric) filter template
*/
?>
<?php
$arrInput1 = range(0,9);
$arrInput2 = range('A','Z');
$arrOptions = array();
foreach(array_merge($arrInput1,$arrInput2) as $key) // Beide Arrys ausgeben
{
$arrOptions[$key] = array
(
'id' => 'ctrl_'.$this->name.'_'.$key,
'href' => $this->addToUrl($this->name.'='.$key.'%'),
'label' => $key,
);
// check if filter is selected
if(\Input::get($this->name) == $key.'%')
{
$arrOptions[$key]['selected'] = true;
}
}
?>
<div <?php echo $this->cssID; ?> class="widget <?php echo $this->class; ?> block">
<fieldset class="linklist_container">
<?php if($this->label): ?><legend><?php echo $this->label; ?></legend><?php endif; ?>
<ul class="linklist">
<?php foreach($arrOptions as $option): ?>
<?php if($option['selected']): ?>
<li id="<?php echo $option['id']; ?>" class="sibling active"><a class="active" href="<?php echo $option['href']; ?>" title=""><?php echo $option['label']; ?></a>
<?php else: ?>
<li id="<?php echo $option['id']; ?>" class="sibling"><a href="<?php echo $option['href']; ?>" title=""><?php echo $option['label']; ?></a>
<?php endif;?>
<?php endforeach; ?>
</ul>
</fieldset>
<?php echo $this->field('myField')->value(); ?>
<?php if($this->description): ?><div class="description"><?php echo $this->description; ?></div><?php endif; ?>
</div>
<script type="text/javascript">
$( document ).ready(function() {
if ( $('.cc_a-z_linklist_helper').length) { // nur wenn der linklisten Helper auf der Seite ist ...
// alle Linklisten Links fürs erste verbergen
$('.cc_a-z_linklist_helper').parent().css('display','none');
$('.linkliste_alphabetisch .linklist_container ul.linklist li').each(function() {
$(this).css('display','none');
});
// Linklisten Helper in Array
var optionText = [];
$(".cc_a-z_linklist_helper ul li").each(function() { optionText.push($(this).text()) });
// Die vorhandenen Linklisten Links wieder einblenden
$.each( optionText, function( intValue, currentElement ) {
$(".linkliste_alphabetisch ul.linklist li").each(function() {
if ($(this).attr('id') == 'ctrl_linkliste_alphabetisch_'+currentElement.toUpperCase()) {
$(this).css('display','inline-block');
}
});
});
}
});
</script>
Was mir noch fehlt ist ein Alle anzeigen Link in der Linkliste.
LG
Erich
- 1 Likes
Kommentar
-
Knall nen Link mit nem leeren Filterwert dazu Das setzt den Filter zurück
PHP-Code:array_insert($arrOptions, 0, array(array('label'=>'Zurücksetzen','value'=>'','href'=>$this->addToUrl($this->name.'='))) );
Kommentar
-
Wenn hier ein Buchstabe gewählt wird, für den es keinen Eintrag gibt, werden alle Einträge angezeigt.
Wie kann man es erreichen, dass hier keine Einträge erscheinen bzw. eine Meldung angezeigt wird?
Könntest du mal darstellen, wie die Prüfung nach vorhandenen Einträgen aussieht. Ich würde den vorhandenen Buchstaben gerne eine Klasse vergeben um sie zu highlighten.
Kommentar
-
Im Liste Modul die Option ausstellen "Alle anzeigen bei leerem Filter".
* Könntest du mal darstellen, wie die Prüfung nach vorhandenen Einträgen aussieht. Ich würde den vorhandenen Buchstaben gerne eine Klasse vergeben um sie zu highlighten.
Da wirst du via DB Abfrage prüfen müssen oder wie bei den Tags und Co. die ->countValue() Methode nutzen.
Kommentar
-
Einen kleine Unregelmäßigkeit gibt es noch bei diesem Filter:
Bei einer Paginierung funktionieren die Buchstabenfilter ab der zweiten Seite nicht mehr:
URL der zweiten Seite
HTML-Code:http://domain.de/stichwortverzeichnis.html?page_c231=2
HTML-Code:http://domain.de/stichwortverzeichnis/page_c231/2/buchstabe/B%25.html
HTML-Code:http://domain.de/stichwortverzeichnis/buchstabe/B%25.html
Wie kann man dies im Template noch lösen?
Muss das im Template des alphabetischen Filters passieren?
Kommentar
-
Zweierlei Wege:
1. Weg per Smart Filtering (diese Methode gilt für alle Filter)
Du kannst CC allgemein mitteilen, das Paginationen aktiv im Filter gehalten werden (das sogn. Smart Filtering in CC):
initconfig.php
$GLOBALS['PCT_CUSTOMCATALOG']['urlCustomParameters'][] = 'page_c231';
Standardmäßig killt CC Paginationen bei Aktivierung eines Filters (hatten wir hier eine Diskussionsrunde zu)
2. Im Template die Urls entsprechend um den Parameter ergänzen. Damit erzwingt man die Pagination aktiv zu halten, musst aber ggf. die neue Seite manuell hochblättern.
Kommentar
Kommentar