Nextpage per php automatisch einfügen

  • Hallo Wordpress-Freunde,

    ich lese den Inhalt einer Datenbank mittels einer while-Schleife in meine statischen Wordpress-Seiten ein. Das klappt auch super. Nun möchte ich die sehr langen Seiten aber automatisch splitten und habe dazu in der php-Schleife einen echo-Befehl eingefügt, der den nextpage-tag einfügt.
    Leider werden die Seiten aber nicht geteilt, im Quellcode des Browsers erscheint lediglich der Text "<!--nextpage-->.
    Wenn ich zur Gegenprobe auf einer Testseite den Befehl direkt eingebe, funktioniert alles.

    Weiß jemand, wie man den Befehl in dem Datenbank-Script so eingibt, dass er auch ausgeführt wird :confused:
    Ich habe was von hooks und filter gelesen, werde aber nicht so richtig schlau draus.

    Vielen Dank für eure Hilfe im voraus!

    Gruß
    Andreas

    • 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

  • Hallo Shadow, danke für deine Antwort. Aber auf der Seite geht es ja um das Styling der Blätter-Funktionalität. Bei mir ist das Problem, dass der nextpage-Befehl einfach nicht umgesetzt wird, sondern als Text ausgegeben wird.

  • auf der codex Seite ist der wichtige Hinweise :
    [COLOR=#000000][FONT=sans-serif](you need to use the html-mode of the editor to do so)
    also nicht im Visual sonder HTML Editormodus eintragen, dann funktionierts
    bzw wenn du im PHP verwenden willst ist nicht der <!--nextpage--> Text verwendbar, sondern die funktion muss du einbauen[/FONT][/COLOR]

    Wordpress weil es spass macht, besonders beim WordPress Meetup in Linz

    Einmal editiert, zuletzt von Shadow (8. Februar 2013 um 20:46)

  • Wie man statt des nextpage-Befehls direkt die Paginierungs-Funktion an der entsprechenden Stelle einfügt weiß ich nicht. Aber ich habe jetzt statt des echo-Befehls return benutzt. Jetzt beendet er die Seite an der gewünschten Stelle. Aber es fehlen die Paginierung sowie die Folgeseiten. Hier der Code für die Datenbankansprache:

    if(mysql_num_rows($Ergebnis)>0) {

    $counter=0;

    while ($Datensatz) {
    echo "... Inhalt der Datenbankzeilen... ";
    $Datensatz = mysql_fetch_array($Ergebnis);

    $counter++;
    if( ($counter%30)==0) {
    return "<!--nextpage-->";
    }

    }
    }
    else { echo "Keine Datens&auml;tze gefunden..."; }

    Hat jemand eine Idee?

  • Ich versuch mal zu verstehen und wiederzugeben, was ich mir aus deinen Fragen zusammenreimen kann. Bitte korrgier mich, wenn ich das falsch verstehe:

    1.) du hast eine Datenbank (oder DB Tabelle) die nix mit WordPress zu tun hat.
    2.) die Inhalte dieser Tabelle (Anzahl) ist bei weitem größer als 30 Einträge.
    3.) du möchtest alle Einträge per WordPress statischer Seite blätterbar machen in Schritten zu 30 Datenbankeinträgen.
    4.) du hast dazu ein eigenes WordPress Template für eine spezielle statische Seite angelegt und diese mit o.g. Code modifiziert.

    Wenn das o.g. stimmt, dann wirst du das auf diese Weise nicht zum Blätterns bringen können. In so einem Falle kommst du nur mit einem eigenen Plugin dahin, das auf eine spezielle statische Page während des Erstellen des eigentlichen Datenbankinhaltes der WordPress Seite eingreift und deren Inhalt noch vor Benutzung als Loop im Template so modifiziert, das schon ein paginierbares Ergebnis vorliegt.

    Sollte ich was falsch verstanden haben, dann ist o.g. kurzer Anriss einer Lösungsmöglichkeit hinfällig. Deswegen hab ich den noch nicht detaillierter ausgeführt.

  • W weiß ich nicht. Aber ich habe jetzt statt des echo-Befehls return benutzt. Jetzt beendet er die Seite an der gew
    ne Idee?


    hast du schon mal etwas von PHP gehört, das ist eine scriptsprache und diese befehle habe ganz bestimmte funktionen, eine vielleicht variation gibt es dabei nicht, wie bei jeder Programmiersprache,
    und eine funktion ruft man auch so auf, wie man mit Programmiersprachen eine funktion aufruft, aber vielleicht hast du nichtmal die von mir verwiesene codex seite gelesen, das ist schade, denn dort wäre es genauso angeführt wie man es einbaut.

    daher wichtige Seiten http://www.php.net codex.wordpress.org,

    Wordpress weil es spass macht, besonders beim WordPress Meetup in Linz

    Einmal editiert, zuletzt von Shadow (9. Februar 2013 um 13:15)

  • Hallo codestyling, danke für deine Antwort.

    Du hast es genau richtig verstanden. Ich habe eine mysql-Datenbanktabelle mit mehreren tausend Zeilen, die ich über die genannte Schleife in eine statische Wordpress-Page einlesen möchte. Funktioniert alles wie gesagt tadellos, bis auf das Problem mit der Seitenteilung. Die existierende Wordpress-Blätterfunktion, welche ja auch mit statischen Seiten funktioniert, würde ich gern nutzen. Aber wordpress arbeitet den <!--nextpage-->-Befehl innerhalb der PHP-Schleife nicht ab.

    Leider habe ich den Lösungsansatz von dir nicht ganz begriffen :oops:

    Einmal editiert, zuletzt von Andreas 2012 (9. Februar 2013 um 13:16)

  • Hallo Andreas,

    vielleicht hilft dir dies weiter. Zuerstmal eine Tabelle, die ich zusätzlich zu WordPress Tabellen in meiner Datenbank habe:

    Code
    CREATE TABLE IF NOT EXISTS `cs_xt_counter_userinfostat` (
      `id` int(14) NOT NULL AUTO_INCREMENT,
      `lang` varchar(255) COLLATE latin1_german2_ci NOT NULL DEFAULT '',
      `os` varchar(255) COLLATE latin1_german2_ci NOT NULL DEFAULT '',
      `browser` varchar(255) COLLATE latin1_german2_ci NOT NULL DEFAULT '',
      `robot` varchar(255) COLLATE latin1_german2_ci NOT NULL DEFAULT '',
      `hits` int(14) NOT NULL DEFAULT '0',
      PRIMARY KEY (`id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci AUTO_INCREMENT=184 ;


    Bei mir hat dieses Tabelle im Test über 180 Einträge, die Betriebssystem, Browser etc. als Statistiken enthält. Diese möchte ich nun mit 10 Zeilen pro blätterbarer Seite auf einer WP static Page anzeigen, ohne mir jemals wieder Gedanken darüber zu machen und vollautomatisch je nach Zustand der "externen Tabelle".

    Zuerst habe ich einen neue Testseite angelegt. Diese hat bei mir die ID=43. Kannst deine existierende Seite auch benutzen.

    Danach habe ich in die functions.php meines Themes folgendes eingebaut. Man kann es auch als Plugin verpacken, dann geht es mit jedem Theme:


    Die einzigen Änderungen, die du machen müsstest, wären $per_page (Anzahl Zeilen pro Page), $affected_page_id (die betroffend statische WordPress Seite) , natürlich die entspechende Datenbanktabelle in beiden SQL Abfragen und ggf. das Markup, in das du die Daten verpacken willst.

    Dann läuft das ganz ohne weiteres Zutun mit einem stinknormalen Page Template, ich hatte Twenty Twelfe im Einsatz. Hier ein Screenshot:

  • Hallo codestyling, vielen Dank erst mal für deine Hilfe :razz:

    Habe den Code in meine functions.php übertragen und die entsprechenden Variablen ersetzt. Die Frage ist jetzt: wie bzw. wo genau rufe ich die Funktion auf? Könntest du das anhand meines Scriptes sagen? Vielen Dank im voraus!

  • Sobald du die von mir genannten Variablen (Seiten ID, Anzahl pro Seite) und die entsprechende Datenbanktabelle in den 2 SQL Anfragen angepasst hast (sowie in der enthalten Schleife über die Zeilen aus der anderen Tabelle das markup und die Daten so generiert hast, dann erscheint es in der Seite, die du mit Seiten ID festgelegt hast automatisch).

  • Das Script funktioniert bei mir irgendwie nicht, die Seite wird mit allen Einträgen ohne Teilung gezeigt. Muss ich denn nur das script in die functions.php nachtragen und das war's?

    Mein Code für die DB-Abfrage sieht übrigens so aus:

    $Ergebnis = mysql_db_query("datenbankname", $SQLString, $Verbindung);
    $Datensatz = mysql_fetch_array($Ergebnis);
    if(mysql_num_rows($Ergebnis)>0) {
    while ($Datensatz) {
    echo "... Tabellenzellen werden mit den DB-Inhalten befüllt ...";
    $Datensatz = mysql_fetch_array($Ergebnis);
    }
    }
    else {
    echo "Keine Datensätze gefunden...";
    }

    Einmal editiert, zuletzt von Andreas 2012 (9. Februar 2013 um 23:51)

  • Ich glaub, du liest nicht, was ich geschrieben hab.

    Mein statische Seite heißt "Testpage für Externen Inhalt" und hat die ID 43. Das sollte bei dir schon mal anders sein. In meinem Codeschnipsel beziehe ich mich weiterhin auf meine Datenbanktabelle "cs_xt_counter_userinfostat", die zwar in der gleichen Datenbank steht, aber nicht zu WordPress gehört.
    Die Struktur meiner Tabelle hab ich ja beschrieben, die Struktur deiner Tabelle solltest du selbst kennen.
    Also muß das noch an deine Tabelle angepasst werden und die Ausgabe der eingelesenen Zeilen entsprechend deinen Wünschen angepasst werden.
    Wenn das samt deiner Anpassungen dann in deiner functions.php steht, dann bekommst du automatisch auf deiner statischen Seite die Fremdinformationen zum blättern angezeigt.

  • Die Änderungen, die du gerade erwähnst, hatte ich original umgesetzt und in die functions.php geschrieben, also inkl. ID-Nr., Tabellennamen etc. Trotzdem passiert bei mir nichts.

  • Ja, das ist der Grund.
    Anbei die ganze Sache als Plugin.

    Die Sektion, wo Änderungen zu machen sind, ist markiert und dieses hier:

    Code
    //------------ configuration starts here ---------------------------------------
        //additional entries per paginated page from foreign table
        $per_page = 10;
        //define the static WordPress Page ID should contains the additional content
        $affected_page_id = 43;
        //external database settings
        $db_user = 'root'; $db_password = ''; $db_name = 'purity'; $db_host = 'localhost';
        //------------ configuration ends here -----------------------------------------

    Und natürlich den Tabellennamen in den 2 SQL Abfragen darin anpassen (und Ausgabe deiner Columns, was immer du da auslesen magst).

    Dort kannst du auch die Daten für die andere Datenbank angeben und mit der anderen DB arbeiten. Hab ich auch testet.
    Wenn du es als Plugin einsetzt, dann muß es aus der functions.php wieder raus :-)

    page-with-external-content-paginated.zip

Jetzt mitmachen!

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