aufbau der Stratseite (index)

  • Guten Abend zusammen,

    brauche ein wenig Hilfe bei dem Aufbau meiner Startseite. Gerne hätte ich dort als erstes einen "festen Bereich", dessen Text ich über das Admin Menü auch jeder Zeit verändern kann. Da bietet sich zum Beispiel die Funktion "Seite als Startseite" an.

    Darunter wäre es schön, wenn die neusten Artikel auftauchen. Jene nach X Worten abgeschnitten. Es wäre dabei sinnvoll, dass kein Artikel doppelt auftaucht, aber trotzdem alle Kategorien berücksichtigt werden. Gerne hätte ich das auch in zwei Spalten.

    Der statische Aufbau sollte dann diesem Beispiel entsprechen. Das Layout als solches habe ich schon angefangen umzusetzten, wie man in meinem Blog sehen kann.

    Die Frage ist nun nur, wie ich mir diesen Aufbau der Startseite realisieren kann. Wenn ich die Funktion "Seite als Startseite" nutze, so könnte ich dort den festen Inhalt ganz normal über das Backend schreiben. Über eine Template Datei könnte ich dann eine Übersicht der Artikel erzeugen.

    Soweit müsste es doch klappen oder? Doch wie kann ich es machen, dass jeder zweite Artikel eine andere Class bekommt? Denn die "Spalten" habe ich durch gefloatete DIVs erzeugt. So habe ich die Möglichkeit, dass sich jene nämlich auch bei kleinen Auflösungen noch sichtbar bleiben usw. Daher habe ich für den ersten Artikel .bl (für box links) und für den zweiten .br (für box rechts), der dritte dann wieder .bl, der vierte .br usw.

    Habt ihr eine Idee, wie ich das umsetzten kann?

    Liebe Grüße
    Muckel/Tobias

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

  • Also eine statische Seite als Startseite zu verwenden war schon mal die richtige Idee, denke ich. Dieser gibst Du dann auch gleich mal ein Seitentemplate, z.B. die page.php als Kopie. Dann hast Du erstmal die Ausgabe des Seiteninhaltes und kannst den Rest darunter im Template ergänzen.


    Zitat

    Doch wie kann ich es machen, dass jeder zweite Artikel eine andere Class bekommt? Denn die "Spalten" habe ich durch gefloatete DIVs erzeugt. So habe ich die Möglichkeit, dass sich jene nämlich auch bei kleinen Auflösungen noch sichtbar bleiben usw. Daher habe ich für den ersten Artikel .bl (für box links) und für den zweiten .br (für box rechts), der dritte dann wieder .bl, der vierte .br usw.

    Das machst Du ganz einfach über eine Zählervariable. In etwa so:

    PHP
    $my_counter = 0;
    // Loop: if has posts while ...
      $my_class = ($my_counter % 2 == 0) ? 'bl' : 'br';
      $my_counter++;
      // Ausgabe der Klasse dann mit echo $my_class
    // end Loop

    Update: Es geht auch vielleicht etwas lesbarer als Boolean-Variable:

    PHP
    $is_left = true;
    // Loop: if has posts while ...
      $my_class = $is_left ? 'bl' : 'br';
      $is_left = !$is_left;
      // Ausgabe der Klasse dann mit echo $my_class
    // end Loop
  • Soweit müsste es doch klappen oder?


    Jap :)

    Habt ihr eine Idee, wie ich das umsetzten kann?


    Du musst doch gar nicht mit float left und right arbeiten. Eine float-Definition reicht doch :)
    Hab ich bei mir auch so gemacht ohne extra Klassen zu definieren.

    Beim Floaten werden ja die Objekte umflossen und wenn kein Platz mehr ist umgebrochen (wie bei Text eben). Dies kannst du bei dir ausnutzen:
    Gib allen Artikeln ein float:left und eine Breite, so dass beide nebeneinander passen (width: 50% z.B.) ;)

  • Hallo zusammen,

    danke für eure Tipps! Habe nun begonnen eine Template Datei für die "Startseite" zu erstellen. Habe mich damit auch an der page.php orientiert und es klappt. Habe darunter dann im Moment noch als reines html eine Ausgabe geschrieben, an dessen Stelle dann die Artikel auftauchen sollen. Den "Stand der Dinge" kann man in meinem Blog begutachten.

    Habe mir dann auch die index.php und weitere Dateien angeschaut. Doch mir ist leider noch nicht klar, wie ich die Artikel aufrufen kann. In den Dateien wird der Inhalt ja durch

    PHP
    <?php if (have_posts()) : ?>
    
    
    <?php while (have_posts()) : the_post(); ?>

    aufgerufen. Doch das steht sowohl in der index.php wie auch in den anderen Dateien.

    Habt ihr da vielleicht auch 'ne Lösung oder einen Ansatz?

    Liebe Grüße
    Muckel

  • Guten Abend,

    habe versucht es mit dem Inhalt der archiv Datei zu versuchen. Doch das Ergebnis war leider nur, dass die "Seite" nochmal angezeigt wurde...

    LG
    Muckel

  • Du musst vor den zweiten Loop eine eigene Query setzen, wenn möglich ohne die Originalquery zu überschreiben.

  • Hallo zusammen,

    habe das heute nun endlich ausprobiert (vorher ging es wg Krankenhaus aufenthalte leider nicht), aber irgendwie scheint es falsch zu sein, da ich folgende Meldung bekomme:

    Zitat

    Parse error: syntax error, unexpected T_IF in /mnt/web9/42/19/52391719/htdocs/blog/wp-content/themes/muckel-9/start.php on line 60

    Mein Versuch schaut so aus, da ich am Anfang den normalen Aufbau habe. Nach dem

    PHP
    <?php endwhile; endif; ?>

    hatte ich dann einen Test via html, wo dann diese Übersicht erscheinen sollte, was auch geklappt hatte. An dessen Stelle habe ich dann den Tipp mit dem neuen Loop ausprobiert:

    Doch dabei habe ich ja die oben gepostete Fehlermeldung bekommen.

    Kann mir jemand sagen, wo mein Fehler liegt?
    Vielen Dank
    Muckel

  • Hallo nochmal,

    in der englischen Erklärung ist ein Beispiel, für eigene Loops zu finden. Daraus habe ich folgendes Versucht:

    PHP
    <?php $my_query = new WP_Query(''); ?>
    
    
    <?php while ($my_query->have_posts()) : $my_query->the_post(); ?>
    
    
        <h1><?php the_title(); ?></h1>
    
    
    <?php endwhile; ?>

    Doch leider wird da kein Titel ausgegeben. Nun steht in der "Anleitung" bei dem Multiple Loops folgendes unter dem einen Beispiel:

    Zitat

    The query object my_query is used because you cannot use the global have_posts() and the_post() since they both use $wp_query. Instead, call into your new $my_query object.

    Heißt das nun, dass ich die Tags wie

    PHP
    <?php the_title(); ?>

    garnicht nutzen kann?

    Eine Fehlermeldung gibt es nun nicht mehr, wie man hier sehen kann. Wäre sehr gut, wenn ihr mir helfen könnt.

    Liebe Grüße
    Muckel

  • Fehler gefunden, aber keine Lösung

    Habe nun einen Fehler gefunden: wenn man bei dem Beispiel eine Kategorie angibt, dann funktioniert es, aber eben nur für diese eine Kategorie:

    PHP
    <?php $my_query = new WP_Query('category_name=rheuma&posts_per_page=10'); ?>
    
    
    <?php while ($my_query->have_posts()) : $my_query->the_post(); ?>
    
    
        <ol><?php the_title('<li>', '</li>'); ?></ol>
    
    
    <?php endwhile; ?>

    Wie man sehen kann, gibt dass nun die Artikel als Übersicht in einer Liste aus.

    Doch damit kann ich meinen Wunsch nicht umsetzten. Wie man hier sieht, möchte ich

    • von jeder Kategorie
    • den neusten Artikel haben
    • und dabei aber keine doppelt ausgeben.


    Doch wie kann ich das nun umsetzten, wenn man bei einem eigenen Query die Kategorie angeben muss? Denn wenn ich dann mal eine neue Kategorie anlege, müsste ich ja auch die Template-Datei editieren, was ungeschickt wäre.

    Hoffe daher sehr, dass ihr mir helfen könnt.
    Liebe Grüße
    Muckel

  • Ich arbeite in dem Fall mit include:

    lege eine neue Datei an z.B. tipps.php

    [COLOR=Red]Parameter anpassen[/COLOR], [COLOR=Red]cat=0 zeigt alle Kats[/COLOR]

    Dann füge in der index.php oder page.php den [COLOR=Red]neuen Code[/COLOR] ein:

    PHP
    <?php endwhile; else: ?> 
             <p><?php _e('Kein Eintrag in dieser Kategorie!'); ?></p> 
    <?php endif; ?> 
    
    
    [COLOR=Red]         <?php 
             if (get_the_title()=='Seitenname') include('tipps.php');
             ?>
    [/COLOR]

    Einmal editiert, zuletzt von bgeissler (6. August 2010 um 13:19)

  • Hallo,

    du hast mir schon mal weiter geholfen. Mit cat=0 werden alle Artikel angezeigt, auch in der "Lösung" von mir.

    Habe halt die start.php erstellt. Habe dann im Admin Menü eine Seite angelegt, die auch etwas inhalt hat und die Datei als Template nutzt. Dadurch wird unter dem Inhalt aus dem Admin Menü nun die Titel der Artikel ausgegeben.

    Nun muss ich es "nur" noch machen, dass ich den Inhalt dazu einfüge, abgekürzt und dann die einzelnen Artikel floate, damit ich das Ziel erreiche, wie ich es im statischen Aufbau habe.

    Vielen Dank
    Muckel

  • Die Lösung ist fast da

    Hallo zusammen,

    habe es nun fast hin bekommen, wie man hier sehen kann. Unter der im Admin-Bereich angelegten Seite habe ich die Template Datei ausgewählt. Durch jene wird unter dem selbst geschriebenen Inhalt nun auch die Artikel ausgegeben. Der Quellcode dafür sieht so aus:

    Den "Übersichts Artikeln" habe ich durch the_excerpt nur den Anfang gezeigt, wie ich es auch wollte. Das DIV des Artikel hat eine Class, die links gefloatet ist:

    Code
    .bl {
        display:block;
        float:left;
        margin:0.25em 0.25% 0.25em 0.25%;
        padding:0.25em;
        width:45%;
        border:0.15em dashed #DEDEDE;
    }

    Doch wie man sehen kann, sind leider nicht alle neben einander. In meiner "statischen Vorlage" habe ich das anders gelöst: erster Artikel links gefloatet, den zweiten rechts, den dritten links, den vierten rechts, den fünften links und so weiter.

    Nun ist aber die Frage, wie man das nun lösen kann. Hier im Thread gab es zwei Tipps dazu. Der eine meinte, dass man nur einen float bräuchte, was ja aber leider nicht so klappt, da die Höhe der "Blöcke" unterschiedlich ist. Der zweite Tipp war, dass man mit einem Counter arbeitet - doch wie kann ich den Code so umstellen, dass das funktioniert?

    Und ein letztes Problem bleibt noch. Es werden nun ja die neusten 10 Artikel angezeigt. Doch eigentlich wollte ich es etwas anders haben: und zwar so, dass aus jeder Kategorie der neuste Artikel angezeigt wird. Ist ein Artikel aber in mehreren Kategorien, so soll er nur einmal aufgeführt werden. Aber das ist wohl nur sehr schwer möglich, oder?

  • Wenn die Blöcke eine verschiedene Höhen haben (aber eine festgelegte Weite mit Vorkehrungen für zu breite Inhalte), ist ein Counter wahrscheinlich am einfachsten. Einfach eine Variable über der Schleife definieren ($my_count = 0;), am Schleifenende erhöhen ($my_count++;) und danach prüfen, ob ein Umbruch erfolgen soll:

    PHP
    if ($my_count %5 == 0) {
      echo "<br style="clear:left;" />";
    }

    Damit können dann alle Blöcke links gefloatet werden und nach 5 Blöcken wird eine neue Zeile angefangen.


    Zitat

    Es werden nun ja die neusten 10 Artikel angezeigt. Doch eigentlich wollte ich es etwas anders haben: und zwar so, dass aus jeder Kategorie der neuste Artikel angezeigt wird. Ist ein Artikel aber in mehreren Kategorien, so soll er nur einmal aufgeführt werden. Aber das ist wohl nur sehr schwer möglich, oder?

    Ich würde sagen, mache erst mal die Ansicht an sich fertig. Dann kannst Du sie auf die Kategorien umstellen. Hatte ich dazu schon Code gepostet?

    Auf meiner Seite habe ich das so gelöst: Array mit IDs von Kategorien angelegt, darüber iteriert und jeweils den neuesten Artikel ausgelesen und dargestellt. Bei mir untereinander, aber geht ja genauso gut mit mehreren Boxen nebeneinander. Bei mir kommt es allerdings nicht vor, dass ein Artikel in mehreren Top-Level-Kategorien enthalten ist.

    Du solltest zum einen überlegen, ob das Sinn macht, dass ein Artikel in zwei Kategorien ist. Falls ja, könnte man z.B. ein Array mit den IDs der gefundenen Artikel anlegen und dann zuerst schauen, ob der Artikel da schon enthalten ist. Falls ja, wird ein neuer Artikel gesucht (offset-Parameter an der Query?). Ansonsten wird die ID an das Array angehängt.

    Edit: Hier erst mal die Lösung für die Ausgabe der Beiträge pro Kategorie. Ich gebe immer 5 Beiträge aus, aber nur beim ersten den Teaser. Beachte dass im Code einige Funktionen aus meiner functions.php verwendet werden (alles mit "dor_" davor).

    Einmal editiert, zuletzt von Ammaletu (6. August 2010 um 19:57)

  • Zitat

    Ist ein Artikel aber in mehreren Kategorien, so soll er nur einmal aufgeführt werden. Aber das ist wohl nur sehr schwer möglich, oder?


    ist jedenfalls etwas aufwendiger:

    dazu hat query_posts auch einen parameter:

    [FONT=Courier New]'post__not_in' => array(6,2,8)[/FONT] - exclusion, lets you specify the post IDs NOT to retrieve

    http://codex.wordpress.org/Function_Refer…Page_Parameters

    ich wuerde das so machen:
    im loop einen array der schon gezeigten post IDs aufbauen;
    und den array mit dem obigen parameter in der query verwenden.

    ein aehnliches beispiel, diesen array aufzubauen, gibt's in:
    http://codex.wordpress.org/The_Loop#Multi…ple_3_-_Plugins

    besonders nach dieser ueberschrift:

    Zitat


    Note for Multiple Posts in the First Category
    If posts_per_page=2 or more, you will need to alter the code a bit. The variable $do_not_duplicate needs to be changed into an array as opposed to a single value. ...

  • Fast alles gelöst :)

    Hallo zusammen,

    habe es mit einem Counter nun hinbekommen, dass wie in meinem statischen Beispiel einmal die Class bl und einmal br verwendet wird. Jene sind im Grunde gleich, nur das die eine links und die zweite rechts gefloatet ist. Der PHP-Teil für den Counter schaut so aus und funktioniert auch:

    Der CSS-Teil schaut so aus:

    Doch leider ist es noch so, dass es trotzdem nicht wirklich klappt. Es ist nun fast alles so, wie im statischen Beispiel, nur die Länge der Artikel ist im Blog unterschiedlich, wodurch wahrscheinlich die Probleme kommen.

    Um das zu lösen habe ich eine zweite Variable angelegt und gebe nach jedem zweiten Artikel ein

    HTML
    <br style="clear:both;"/>

    aus. Die entsprechenden Zeilen schauen so aus:

    So weit bin ich mit dem Aufbau nun zu frieden, wie man in meinem Blog sehen kann.

    Nun habe ich nur noch das Problem, das eben chronologisch die neusten Artikel angezeigt werden. ich wollte es eigentlich anders haben und aus jeder vorhandenen Kategorie den neusten Artikel anzeigen lassen. Dabei sollte es aber so sein, dass ein Artikel der in mehreren Kategorien ist, nur einmal auftaucht.

    Es wurde schon gefragt, ob es Sinn macht, dass manche Artikel in mehreren Kategorien auftaucht - dem kann ich nur sagen ja. So habe ich zum Beispiel Artikel in denen ich über eine Reise geschrieben habe und in dem auch die Fotos sind. Somit ist der Artikel unter Fotos einsortiert, aber auch unter Fahrten (Reisen). Bei anderen Artikeln ist es ähnlich.

    Kennt jemand eine Lösung für das letzte Problem? Meine derzeitige Lösung schaut so aus:

    Vielen vielen Dank für eure Hilfe bis hierhin.

    Liebe Grüße
    Muckel

  • Valid?

    Hallo zusammen,

    habe das eben auch getestet, ob das alles CSS und XHTML Valid ist. Bei CSS funktioniert alles, doch bei xhtml bekomme ich diese Fehlermeldung:

    Zitat

    Sorry, I am unable to validate this document because on line 396 it contained one or more bytes that I cannot interpret as utf-8 (in other words, the bytes found are not valid values in the specified Character Encoding). Please check both the content of the file and the character encoding indication. The error was: utf8 "\xDF" does not map to Unicode

    Kann mir jemand sagen, was das bedeutet und woran es liegen kann?


    Vielen Dank
    Muckel

  • Hallo,

    komisch - weiß nicht, wieso da nicht mehr "ss" anstelle von "ß" stand...vielleicht lag es am Wechsel von Programmen oder so, ich weiß es nicht.

    Gibt aber noch zwei xhtml Fehler. Der erste bezieht sich auf das role atribut der Suche. Finde das nur leider in den Dateien meines Layouts nicht... Jemand eine Idee?

    Der zweite Fehler bezieht sich auf ein Plugin, mit dem man googlemaps einbinden kann:

    HTML
    <!-- Google Maps Plugin SEO -->
    <noscript>
    <link href="http://avi.alkalay.net/2006/11/google-maps-plugin-for-wordpress.html" rel="uses" type="text/html"/>
    </noscript>
    <!-- Google Maps Plugin (end) -->
    </body>
    </html>

    Das befindet sich noch im body der Seite und der Validator sagt aus, dass das Atribut dort nicht erlaubt ist. Der Link führt zu der Seite des PlugIns. Gesamt steht der Code vor dem schließenden Body:


    Wird das zwingend gebraucht? Hätte gern ein valides Blog...

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!