Zurück   WordPress Deutschland Forum > Support > Allgemeines

Antwort
 
Themen-Optionen Ansicht
Alt 13.01.2008, 20:54   #1 (permalink)
PostRank: 9
 
Benutzerbild von Ammaletu
 
Registriert seit: 14.07.2007
Beiträge: 1.432
Beiträge nach Unterkategorien gruppieren

Ich habe mal eine Frage zur Umsetzung eines speziellen Template-Wunsches. Es geht mir dabei nicht um schlüsselfertige Lösungen, sondern mehr darum mal zu hören, was andere zu dem Problem für Ideen haben.

Das Problem: Ich schreibe mir gerade für einige Kategorien meines Blogs spezielle Templates. In einer Kategorie habe ich Unterkategorien. Die Ausgabe möchte ich so gestalten, dass ich alle Beiträge angezeigt bekommen, gruppiert zuerst nach Unterkategorien und da drin dann alphabetisch nach Post-Titel. Die weitere Ausgabe passe ich dann noch an (nur Anzeige des Posttitels etc.), das wird quasi eine Liste der Beiträge.

Die Frage ist für mich, wie kriege ich das möglichst effizient hin? Wenn ich auf die Oberkategorie gehe, zeigt mir ja WP alle Beiträge an, auch die der Unterkategorien (denke ich, bei mir auf jeden Fall weil ich eh immer beide Kategorien anhake). Alphabetisch sortieren geht auch, kein Problem. Aber wie lege ich da oben drüber noch die Gruppierung?

Wenn die Oberkategorie-Seite angezeigt wird, macht ja WP automatisch seine Query. Könnte ich die anpassen, z.B. mit GROUP BY?!? Aber die Kategorie steht ja nicht in der Post-Tabelle.

Also doch lieber keine Unterkategorie, sondern die entsprechende Zuordnung in ein Custom-Feld schreiben? Das steht allerdings ja auch nicht in der Post-Tabelle, glaube ich?!

Oder kann man die Post-Liste nach Ausführung der Query in WP noch mal sortieren?

Ihr seht, ich bin über die mögliche Umsetzung noch etwas verwirrt. Unterkategorien wären halt schön einfach, weil ich schon so viel in Custom-Felder schreiben muss. Das vergisst man so leicht. Würde mich freuen, wenn jemand eine Idee dazu hätte.
__________________
"Life brings hope and pain, but revenge never brings redemption." || Mein Blog
Ammaletu ist offline   Mit Zitat antworten
Alt 14.01.2008, 11:49   #2 (permalink)
WPD-Team
 
Benutzerbild von Monika
 
Registriert seit: 04.06.2005
Ort: INET
Beiträge: 6.931
wenn Du unter *effizient* auch die etwaige Rechenleistung betrachtest
klick mal hier drauf

Sitemap

Sitemap alphabetisch geordnet -egal in welcher cat--
teile ich jetzt noch die Kategorien auf-
rattert das Ding sich zu tode...

bei 10 Beiträgen macht es wusch und flusch und jeder freut sich,
das Blog wird älter die Beiträge mehr und es *derlädt * sich nicht mehr ...

lg
Monika ist offline   Mit Zitat antworten
Alt 14.01.2008, 20:29   #3 (permalink)
PostRank: 9
 
Benutzerbild von Ammaletu
 
Registriert seit: 14.07.2007
Beiträge: 1.432
Mit "effizient" meinte ich tatsächlich Rechenleistung / Ladezeit etc. Die Seite ist jetzt schon nicht die schnellste, also wollte ich es da nicht übertreiben mit selbstgeschriebenen Querys.

Was die Zahl der Beiträge betrifft, ist das nicht so das Problem. Das ganze soll die Anzeige meiner Kurzgeschichten werden, und so viel schreibe ich leider nicht, dass das in absehbarer Zeit aus dem Ruder laufen würde. Im Moment sind es drei Unterkategorien und vielleicht zwanzig Beiträge.
__________________
"Life brings hope and pain, but revenge never brings redemption." || Mein Blog
Ammaletu ist offline   Mit Zitat antworten
Alt 02.03.2008, 12:34   #4 (permalink)
PostRank: 9
 
Benutzerbild von Ammaletu
 
Registriert seit: 14.07.2007
Beiträge: 1.432
Nachdem hier ja nicht sonderlich viele Antworten kamen*g*, habe ich das Problem erst ein Weilchen ignoriert und dann halt doch selber gelöst. Für alle, die das vielleicht auch interessiert, will ich hier kurz schildern, wie ich es angegangen bin.

Noch mal kurz zum Problem: Auf der Seite einer Kategorie die Beiträge gruppiert nach Unterkategorien ausgeben. Innerhalb der Unterkategorien habe ich die Sortierung dann doch beim Standard gelassen, chronologisch absteigend. Alphabetisch wäre aber auch kein Problem gewesen.

Also zuerst mal: Template für die Oberkategorie anlegen, in meinem Fall die Datei "category-47.php". Und das sieht dann so aus, leicht gekürzt:

PHP-Code:
<?php
// change the loop query so that it stays intact but returns as few results as possible
$posts query_posts($query_string '&showposts=1');

// build an array of sub-category IDs
$dor_subcategories = array(484950);
?>

<!-- Page-Header, Seitenüberschrift etc. -->

<?php if (have_posts()) : ?>

<?php
// query posts of sub-categories
for ($dor_i 0$dor_i count($dor_subcategories); $dor_i++) {
  
// get the sub-category ID
  
$dor_subcat $dor_subcategories[$dor_i];
  
  
// query posts of the sub-category
  
$dor_query = new WP_Query('cat=' $dor_subcat '&showposts=50');
  
  
// output the result if anything was found
  
if ($dor_query->have_posts()) {
    
// output the headline
?>
          <h3 class="pagetitle"><?php dor_print_category_name($dor_subcat); ?></h3>
          <div class="entry"><ul class="categoryListExtended">
<?php
    
// output the posts
    
while ($dor_query->have_posts()) : $dor_query->the_post();
?>
            <li>
              <a href="<?php the_permalink(); ?>" rel="bookmark" title="Permanenter Link zu <?php the_title(); ?>"><?php the_title(); ?></a><br />
              <?php the_excerpt('weiterlesen''den ganzen Beitrag lesen'true'['']'); ?>
            </li>
<?php
    
endwhile;
?>
          </ul></div>
<?php
  
/* end if posts for category */
/* end for sub-categories */
?>
<?php 
endif; ?>

<!-- Sidebar & Footer -->
Ich ändere also die ursprüngliche Query, so dass sie nur einen Beitrag zurückgibt. Das mache ich, damit die Query an sich intakt bleibt. Sonst können wohl Seiteneffekte auftreten, habe ich gelesen.

Darunter kommt dann pro Unterkategorie eine eigene Query, mit neuem WP_Query-Objekt und 50 Beiträgen. Das ganze ist so angelegt, dass alle Beiträge der Unterkategorien ausgegeben werden, 50 ist ein willkürlicher Wert, der im Moment groß genug ist, dass alle Beiträge der Kategorie angezeigt werden.

dor_print_category_name ist eine eigene Funktion, die den Titel der Kategorie ausgibt:

PHP-Code:
/**
 * Prints the title of the category with the given ID. Equals the function
 * single_cat_title, but can print the title of any category.
 */
function dor_print_category_name($cat) {
  if (!empty(
$cat)) {
    
$my_cat_name apply_filters('single_cat_title'get_the_category_by_ID(intval($cat)));
    if (!empty(
$my_cat_name)) {
      echo 
strip_tags($my_cat_name);
    }
  }

Das ganze funktioniert soweit gut. Natürlich geht die Zahl der Queries auf der Seite etwas hoch, aber in vertretbarem Rahmen. Ansonsten ist die Seite meinem Empfinden nach nicht langsamer als alle anderen Seiten auch. Diese Lösung ist aber sicher nicht ohne Ende skalierbar. Ich habe im Moment zwei Testbeiträge in zwei Unterkategorien. Demnächst werden es um die 40 Beiträge in drei Kategorien sein. Da werde ich dann sehen, wie es sich mit den Ladezeiten verhält. Für viel größere Seiten würde ich das eher nicht verwenden.
__________________
"Life brings hope and pain, but revenge never brings redemption." || Mein Blog
Ammaletu ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist aus.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:37 Uhr.


Powered by vBulletin® Version 3.7.4 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0 | Impressum | Ein Inpsyde.com Projekt