Pager-Formatierung und -Positionierung
Eingetragen von Anonymous (0)
am 18.07.2006 - 13:50 Uhr in
am 18.07.2006 - 13:50 Uhr in
In meinem fixen Layout habe ich eine besondere Footerleiste. In einen Teilbereich darin würde ich gerne den Drupal-Pager bauen, nur weiß ich leider nicht,
- wie ich den pager in diesen Teilbereich (bei mir div id="bottomLinks") zuweise.
Schön wäre dann auch, wenn die
- Links zur ersten "go to first page" und zur letzten "go to last page" Seite überhaupt nicht auftauchen würden
- und die Links für vorherige und nächste Seite durch Pfeil-Grafiken links und rechts ersetzt würden.
Kann mir jemand sagen, was ich zu tun habe?
- Anmelden oder Registrieren um Kommentare zu schreiben
Ganz Allgemein erst mal. Den
am 18.07.2006 - 16:37 Uhr
Ganz Allgemein erst mal. Den Pager kannst Du mit mindestens einem Template beeinflussen.
Wie man den Pager in die Sektion "Footer" bekommt ist mir im Moment noch nicht klar und ob es überhaupt möglich ist.
Für letzteren Fall müsste man den Pager aus der Variable $content herausbekommen.
Wenn Du Dir mal den HTML-Quellcode einer Seite ansiehst steht der Pager mit dem eigentlichen Inhalt der Seite zwischen
<!-- begin content -->
<!-- end content -->
Erst einige Codezeilen tiefer befindet sich der Footer.
Innerhalb der Struktur der "page.tpl.php" sieht es genau so aus.
Aus der "page.tpl.php" ergibt sich, daß der Pager in
<?php print $content; ?>
befindet.
Deswegen hatte ich in Deinem ursprünglichen Thema auch mal den Gedanken entwickelt, die Region Footer zu eliminieren, wenn sie auch sonst keinen Inhalt hat. Damit würde sich dann der Pager als unterster Bereich einer Seite quasi wie ein Footer verhalten.
-------------
quiptime
Da geht noch was.
Ich muss nun mal auf
am 18.07.2006 - 16:44 Uhr
Ich muss nun mal auf drupal.org abtauchen, um Näheres zu den Möglichkeiten des Pager zu ermitteln.
Ein Template dazu ist kein Problem. Mir geht es dabei mehr um das Vereinzeln/Herauslösen des Pager aus $content und damit verbundenes Einsetzen an anderer Stelle.
Wenn hier Jemand mitliest, der einen Tip oder Lösungsansatz zum "Vereinzeln" des Pager hat, dann bitte ich herzlichst um einen Post.
@Hanna, Du kannst also jetzt erst mal aufatmen. Meine Postgeschwindigkeit wird sich wegen drupal.org verlangsamen.
-------------
quiptime
Da geht noch was.
Guter Gedanke...
am 18.07.2006 - 16:49 Uhr
Noch fix eine Antwort vorm Besuch. :) Also, den eigentlichen footer rauszunehmen, finde ich gut. Ich habe in meiner Seite jedoch einen Bereich (div id="bottomLinks") wo links der pager (div id="pager") (der ja nur dann auftaucht, wenn nötig) und rechts ein eigener Link "Downloads" (div id="downloadBtn") floaten soll. Dieser Bereich "bottomLinks" bildet auf die Linie genau den Abschluss des Designs auf der Seite und deshalb ist die Positionierung so wichtig. Bin zwar kein PHP-Profi, werde aber morgen mal versuchen, ihn irgendwie aus dem $content zu ziehen, ihn umzukopieren und dann nach unten zu verlagern oder so. Muss ich das dann eigentlich in der page.tpl.php oder der flexinode-1.tpl.php machen. Naja, du weißt schon. ;) Dir jetzt aber erstmal einen tollen Abend.
Stopp erst mal. Erstens
am 18.07.2006 - 16:59 Uhr
Stopp erst mal.
Erstens kommt es anders und Zweitens als man denkt.
Dies trifft gerade wieder mal zu. Ich habe eben (auf drupal.org) etwas entdeckt, was die bisherigen Überlegungen wenn nicht auf den Kopf so aber doch bezüglich der Möglichkeiten der Realisierung Deines Pager-Problemes erheblich erweitert und die Lösung Deines Pager-Problemes bringen könnte.
Theming with Views
http://drupal.org/node/42597
Views now comes with a new module, views_theme_wizard.module, which will allow you to generate a theming function and template for your views if you happen to be using a PHPTemplate theme.
Meine Version des Modules Views hat das Modul "views_theme_wizard.module" nicht. Ich muss als mein Modul Views upgraden und dazulernen.
-------------
quiptime
Da geht noch was.
@Hanna, kannst Du mir ein
am 18.07.2006 - 17:14 Uhr
@Hanna, kannst Du mir ein Screenshot einer Seite schicken?
-------------
quiptime
Da geht noch was.
Gleich geschafft!
am 18.07.2006 - 18:34 Uhr
quip, vielen Dank für deine Unterstützung. Super Zuarbeit von dir! Tatsächlich kann ich diese views über den template-wizard ausgeben. Ziemlich cool, wenn frau nur wüsste wie. ;) Jedenfalls bin ich nun direkt in die Formatierungen des Pagers gegangen (findet sich im include-Verzeichnis unter pager.inc) und habe statt des pagers nun direkt meine Klasse eingegeben (s. function theme_pager()). Das klappt jetzt auch. Schon mal wieder n Schritt weiter.
Verfolge eben einen anderen
am 18.07.2006 - 18:56 Uhr
Verfolge eben einen anderen Lösungsansatz. Denn das was Du mit dem Pager im Modul Views machst betrifft auch nur Seiten mit Views.
Alle anderen Seiten der Website dürften den Pager unabhängig von Deinen Arbeiten im Modul Views wie gewohnt zeigen.
Zur Info. Von so gut wie allen Modulen wird der Pager aus dem Modul heraus mit "theme('pager" aufgerufen.
Um das mal selbst zu sehen mache eine Volltextsuche nach dem String "theme('pager" über Deine gesamten Drupaldateien.
Du kannst also nicht in allen diesen Datei den Code hacken um den Pager zu beeinflussen.
Übrigens ist das Modul Views eines der wenigen Module, bei dem "theme('pager" innerhalb einer "function theme_", im konkreten Fall ist es "function theme_views_view()", aufgerufen wird.
Deshalb kann man mit dem Wizard tunen. Es würde auch ohne den Wizard gehen.
Um zu meinem Lösungsansatz zu kommen.
Mit dem Pager-Template den Output auf NULL setzen.
Vorher aber den Output in eine andere Variable ausgeben.
Diese andere Variable in der page.tpl.php im Footer ansprechen.
-------------
quiptime
Da geht noch was.
Ich werde das jetzt mal
am 18.07.2006 - 19:00 Uhr
Ich werde das jetzt mal praktisch selbst testen. Es wird 'nen Moment dauern.
Da in meiner Website der Footer ungenutzt ist werde ich den Pager in den Footer verlegen. Ich hoffe, Dir in kurzer Zeit den Example-Link posten zu können.
-------------
quiptime
Da geht noch was.
So, die normale
am 18.07.2006 - 19:21 Uhr
So, die normale pager.tpl.php steht erst mal.
Jetzt geht's an die Umsetzung meiner Überlegung.
-------------
quiptime
Da geht noch was.
das reicht mir eigentlich...
am 18.07.2006 - 19:27 Uhr
Wie machst du das? Bist du atemlos? Uff. Meinst du, der verändert sich wirklich, wenn ich ihn nicht in Zusammenhang mit views verwende? Schraube doch gerade am Drupal core. ;) Wir haben aber Glück, denn ich werde den pager so oder so nur in Verbindung mit views verwenden - hoffe ich jedenfalls. Es klappt ja jetzt genauso, wie ich es mir Tage erhofft hatte, dank deiner Hilfe! Das reicht mir doch völlig aus.
Ok, wenn Du Dein Ziel
am 18.07.2006 - 19:42 Uhr
Ok, wenn Du Dein Ziel erreicht hast. Freut mich für Dich.
Wenn der Inhalt der Website bei größerer Artikelanzahl sich auf den Nodetypen beschränkt, den Du mit dem Modul Views ausgibst, brauchst Du nicht weiter mit dem Pager für andere Fälle von Nodetypen rumschrauben.
Und da Du für andere Nodetypen den Minimalwert für die Anzeige des Pager unabhängig vom Minimalwert 1 für den Pager Deines View einstellen kannst, sollte es bei anderen Nodetypen erst dann zur Anzeige des Pager kommen wenn der allgemeine Minimalwert für die Anzeige des Pager erreicht wird.
Ich werde meinen Lösungsansatz noch zu Ende bringen - als generelle Lösung für den Pager im Footer.
Vergiss nicht, poste den Link wenn es soweit ist.
PS.
Waren weniger als 4 Tage. :-)
-------------
quiptime
Da geht noch was.
Super...
am 18.07.2006 - 19:54 Uhr
Ja, mit dem Löwenanteil wären wir durch. Es gibt natürlich noch ne Menge anderer Fragen, die ich dann ab morgen posten werde. :) Wenn du trotzdem eine Lösung hast, scheue dich nicht, sie mir mal zu zeigen, ja? :) Danke nochmal und dir einen schönen Abend.
So, es ist vollbracht. Pager auf allen Seiten direkt im Footer.
am 18.07.2006 - 21:55 Uhr
Ich werde meinen Lösungsansatz noch zu Ende bringen - als generelle Lösung für den Pager im Footer.
So, es ist vollbracht. Der Pager ist auf allen Seiten direkt im Footer. Egal ob die Seite ein View ist oder irgendein anderweitig ausgebener Node - immer.
bekanntes Beispiel mit Superstatik (ein View):
http://www.quiptime.de/qt/de/superstatik
anderes Beispiel:
http://www.quiptime.de/qt/de/taxonomy/term/115?page=3
Mein Footer ist natürlich nicht extra layoutet. Ich habe den Pager über die page.tpl.php "einfach" da unten reingepackt.
Das "einfach" muss ich Dir aber erklären.
-------------
quiptime
Da geht noch was.
Bloss nicht so machen wie
am 19.07.2006 - 05:11 Uhr
Bloss nicht so machen wie ich! Gott sei Dank! Toll sieht das aus! Und das geht echt mit Views und ganz normalen Seiten und so? Wow! Hier läuft mit meiner pager-Modifikation in den Modulen und der pager.inc.php überhaupt nichts mehr - meine ganze Installation ist mit der Fehlermeldung "warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\frp-latest\includes\common.inc:1) in C:\xampp\htdocs\frp-latest\includes\common.inc on line 139." und noch andere Zeilen hin. Und weil ich keine Lust mehr auf Fehlersuche habe, setze ich jetzt Drupal nochmal neu auf. Vielleicht magst du mir deine Vorgehensweise verraten? Das ist bestimmt der Schlüssel zum Glück. :)
Pager "vereinzeln" und im Footer wieder einfügen
am 19.07.2006 - 09:33 Uhr
Um den Pager generell aus allen ihn verwendenden Seiten herauszulösen musst Du über das Pager-Template an ihn ran.
Schritt 1
In der "template.tpl.php" in "themes/your_theme/" diesen Code einfügen:
<?php
function phptemplate_pager($tags = array(), $limit = 10, $element = 0, $parameters = array()) {
return _phptemplate_callback('pager', array('tags' => $tags, 'limit' => $limit, 'element' => $element, 'parameters' => $parameters ));
}
?>
Schritt 2
Die neue Template-Datei "pager.tpl.php" in "themes/your_theme/" erstellen und diesen Code einfügen:
<?php
//$Id: pager.tpl.php, v 1.0 2006/07/18 quiptime Exp $
global $pager_total;
$output = '';
if ($pager_total[$element] > 1) {
$output .= '<div id="pager">';
$output .= theme('pager_first', ($tags[0] ? $tags[0] : t('« first')), $limit, $element, $parameters);
$output .= theme('pager_previous', ($tags[1] ? $tags[1] : t('â?¹ previous')), $limit, $element, 1, $parameters);
$output .= theme('pager_list', $limit, $element, ($tags[2] ? $tags[2] : 9 ), '', $parameters);
$output .= theme('pager_next', ($tags[3] ? $tags[3] : t('next â?º')), $limit, $element, 1, $parameters);
$output .= theme('pager_last', ($tags[4] ? $tags[4] : t('last »')), $limit, $element, $parameters);
$output .= '</div>';
$pager_total = $output;
$output = NULL;
}
?>
Mit "$output = NULL;" wird die normale Anzeige des Pager unterdrückt.
Um den Pager an anderer Stelle verwenden zu können übergebe ich vorher seinen Inhalt der Variable $pager_total.
Diese Variable verwende ich in der "page.tpl.php", um den Pager an der gewünschten Stelle auszugeben.
Im Template kann man ganz normal auf die einzelnen Elemente des Pager Einfluss nehmen.
Links zur ersten "go to first page" und zur letzten "go to last page" Seite überhaupt nicht auftauchen würden
Um einzelne Elemente nicht zu verwenden werden einfach die betreffenden Zeilen gelöscht oder auskommentiert.
und die Links für vorherige und nächste Seite durch Pfeil-Grafiken links und rechts ersetzt würden.
Um verwendete Pagerelemente zu verändern würde ich für diese Elemente jeweils ein entsprechendes Template verwenden.
Schritt 3
Nun den Pager im Footer in der "page.tpl.php" in "themes/your_theme/" einfügen.
Der folgende Code zeigt einen Ausschnitt des Code der "page.tpl.php" mit dem Code, der den Pager einfügt:
<div id="footer">
<?php global $pager_total; if ($pager_total[0] != 1 ) print $pager_total; ?>
<?php print $footer_message ?>
</div>
<?php print $closure ?>
</body>
</html>
Der Code "if ($pager_total[0] != 1 )" vor der Ausgabe der Variable $pager_total ist erforderlich, um auf Seiten ohne Pager unerwünschte Ausgaben ('Array') zu verhindern.
Schritt 4
Fertig. Jetzt den "neuen" Pager testen.
Gedanke, Idee
Mit der beschrieben Vorgehensweise könnte man den Pager auch in die rechte Seite einfügen und ihn dort mittels CSS so formatieren, daß er senkrecht angezeigt wird.
Nachtrag
Nicht alle Pager werden mit der hier beschriebenen Vorgehensweise in den Footer verlagert.
Z. Bsp. haben Buchseiten einen eigenen Pager (mit eigener Usability), der auch über ein eigenes Template zu beeinflussen ist und demzufolge vom Pager-Template "pager.tpl.php" nicht erreicht wird.
-------------
quiptime
Da geht noch was.
Komisch...
am 19.07.2006 - 12:19 Uhr
Hallo quip, toll, dass es schon mal bei dir funktioniert. Bei mir leider irgendwie noch nicht, dabei bin ich genau analog der Anweisungen vorgegangen, hab es sogar mehrfach überprüft und trotzdem erhalte ich immer wieder das gleiche Ergebnis. Ausgegangen von diesem view, hab ich einen eigenen pager genau dafür und in dem Bereich, den ich für "deinen" pager vorgesehen hatte, steht nur "Array". Nehme ich nun Formatierungen in der pager.tpl.php vor, passiert leider rein gar nichts. Als ob darauf gar nicht zugegriffen würde. Gleiches gilt für die template.tpl.php. Setze ich dort das limit um Test auf 1, passiert auch nichts. Hast du eine Idee, woran das liegen könnte?
Meine Beschreibung für das
am 19.07.2006 - 12:36 Uhr
Meine Beschreibung für das Platzieren des Pager im Footer hat nichts mit einem View zu tun.
Du könntest mehrere Views mit der Ausgabe verschiedenster Inhalte anlegen - der Pager im Footer funktioniert unabhängig davon.
Zur Fehlersuche:
Wie sieht Deine "template.tpl.php" aus? Hat sie die beiden PHP-Tags?
-------------
quiptime
Da geht noch was.
Ja, alles da...
am 19.07.2006 - 12:44 Uhr
Habe die Dateien überprüft... alle nötigen PHP-Tags sind gesetzt und ansonsten hab ich ja copy/paste gemacht. Die template.tpl.php legte ich nur für den pager an. Sollte da noch etwas Anderes drin stehen, von dem ich bis jetzt nichts weiß?
Nö, nix anderes. Muss
am 19.07.2006 - 12:46 Uhr
Nö, nix anderes.
Muss weiter überlegen. Vermutlich was ganz simples - die Fehlerursache.
-------------
quiptime
Da geht noch was.
normale Templatefunktion testen
am 19.07.2006 - 12:56 Uhr
Hast Du das Pager-Template mal ohne das "Umleiten" getestet?
Um das Template normal zu verwenden muss es so aussehen:
<?php
//$Id: pager.tpl.php, v 1.0 2006/07/18 quiptime Exp $
global $pager_total;
$output = '';
if ($pager_total[$element] > 1) {
$output .= '<div id="pager">';
$output .= theme('pager_first', ($tags[0] ? $tags[0] : t('« first')), $limit, $element, $parameters);
$output .= theme('pager_previous', ($tags[1] ? $tags[1] : t('â?¹ previous')), $limit, $element, 1, $parameters);
$output .= theme('pager_list', $limit, $element, ($tags[2] ? $tags[2] : 9 ), '', $parameters);
$output .= theme('pager_next', ($tags[3] ? $tags[3] : t('next â?º')), $limit, $element, 1, $parameters);
$output .= theme('pager_last', ($tags[4] ? $tags[4] : t('last »')), $limit, $element, $parameters);
$output .= '</div>';
//$pager_total = $output;
//$output = NULL;
print $output;
}
?>
Entsprechend dazu die "page.tpl.php" ändern, damit dort kein Fehler wegen der Änderung in der "pager.tpl.php" verursacht wird:
<div id="footer">
<?php //global $pager_total; //if ($pager_total[0] != 1 ) //print $pager_total; ?>
Nach diesen Änderungen muss der Pager an der üblichen Stelle erscheinen.
-------------
quiptime
Da geht noch was.
Du solltest in die
am 19.07.2006 - 13:02 Uhr
Du solltest in die Drupalseite als User eingeloggt sein. Sonst kann Dir der Drupal-Cache einen Streich spielen.
Bei einem eingeloggten User wird der Drupal-Cache vom Grunde her für die HTML-Ausgaben nicht verwendet.
-------------
quiptime
Da geht noch was.
Welchen Browser verwendest
am 19.07.2006 - 13:04 Uhr
Welchen Browser verwendest Du?
-------------
quiptime
Da geht noch was.
Browser...
am 19.07.2006 - 13:09 Uhr
Hab dir eben nochmal gemailt. :) Also, Browser i.d.R. FF, checke das jetzt auch noch mal mit dem cache. Guter Hinweis. Wenn nicht, versuche ichs mit dem Schrecken aller Brower: IE6. ;) Übrigens verändert sich bisher rein gar nichts auf meiner Seite, außer, dass jetzt durch die Auskommentierung das "Array" fehlt.
Lass das mit dem IE, wird
am 19.07.2006 - 13:16 Uhr
Lass das mit dem IE, wird nichts bringen.
Den FF-Cache, der hat ja auch einen, kannst du übergehen in dem Du den FF zu einem Zwandsreload einer Seite zwingst. Dazu die Tate F5 drücken - manchmal hilft es.
Gar keine Veränderungen? Auch nicht mit der normalen Template-Verwendung kein Pager an der üblichen Stelle?
-------------
quiptime
Da geht noch was.
Nein - keine Veränderung
am 19.07.2006 - 13:20 Uhr
Absolut nichts passiert. Als ob nicht da wäre. Frechheit, oder? :) Aber gut, möchte dich jetzt nicht mit dem Debuggen aufhalten. Probiere hier noch weiter und sehe, ob mir noch irgendwas einfällt... Wenn du meinst, dein Lösungsweg stimmt, kanns ja nur hier irgendwo dran liegen.
Das Pager-Template in der
am 19.07.2006 - 13:37 Uhr
Das Pager-Template in der normalen Funktionsweise
print $output
muss funktionieren, bevor der folgende Debug richtig Sinn macht.
Mit der normalen Template-Funktion kannst Du die zusätzliche Zeile für die Anzeige des Pager im Footer erst mal löschen.
Wenn das Template nicht normal funktioniert, dann grenze Deine Fehlersuche auf "template.tpl.php" und "pager.tpl.php" ein.
Noch eine Idee zum Debuggen.
Versetze pager.tpl.php in den erforderlichen Zustand, um den Pager "umzuleiten"
$pager_total = $output;
$output = NULL;
Dann den Code in der page.tpl.php:
<div id="footer">
<?php global $pager_total; print_r($pager_total); ?>
print_r muss an Stelle von "Array" was ausgeben. Diese Ausgabe interessiert mich.
PS.
Welche Drupal-Version verwendest Du?
Ich denke, wir machen nachher mit ICQ weiter - melde mich an der Stelle.
-------------
quiptime
Da geht noch was.
Ausgabe
am 19.07.2006 - 13:56 Uhr
Also, deinen Anweisungen nach zufolge, erhalte ich bei der o.g. print_r-Funktion die Ausgabe: "Array ( [0] => 2 ) Array", die mir mal so überhaupt nichts sagt. :)
Ergänzung: Beim Aufruf von print $output; in der page.tpl.php erhalte ich übrigens auch keine Ausgabe. Also, ich bin sooo ratlos. Wahrscheinlich fehlt irgendwo ein Komma.
page.tpl.php vs. page-default.tpl.php
am 19.07.2006 - 14:12 Uhr
Du, quip, jetzt weiß ich nicht, ob diese Info überhaupt relevant ist, aber in meiner page.tpl.php mache ich einen arg(0)-check und wechsele darüber das Layout. Das Standard-Design bzw. dessen Angaben befinden sich in einer page-default.tpl.php, während admins und user eine page-admin.tpl.php bekommen. Kann das damit zusammenhängen? Nee, oder?
Die "page-default.tpl.php"
am 19.07.2006 - 14:26 Uhr
Die "page-default.tpl.php" verwende ich auch. Da ich es von Dir nicht wußte haben sich meine Angaben auf die "page.tpl.php" bezogen.
Wir müssen jetzt die normale Template-Funktion zum Laufen bringen. Vorher macht der ausgelagerte Pager keinen Sinn.
Poste mir bitte den Code von template.tpl.php, pager.tpl.php und aus der Datei includes/pager.inc den Code der theme_pager().
In der page-default.tpl.php entfernst Du bitte jeden zusätzlichen Code in Zusammenhang mit dem Pager im Footer.
Gibt es im Drupal-Log Fehlermeldungen?
Welche Drupal-Version läuft bei Dir?
Moment, kurze Kaffeepause.
-------------
quiptime
Da geht noch was.
Re: Die "page-default.tpl.php"
am 19.07.2006 - 14:29 Uhr
Poste mir bitte den Code von template.tpl.php, pager.tpl.php und aus der Datei includes/pager.inc den Code der theme_pager().
quiptime
Den Satz habe ich jetzt nicht so ganz verstanden. Vielleicht schicke ich dir die Dateien besser via Email? Der Thread wird sonst superfett. Und Kaffeepause finde ich auch sehr gut... Mein Kopf brennt.
Diese 3 Dateien von Deinem
am 19.07.2006 - 14:47 Uhr
Diese 3 Dateien von Deinem Drupal, "template.tpl.php", "pager.tpl.php" und "pager.inc". Sende sie bitte als Mail.
Un abhängig davon könntest Du den (normalen) Pager (ohne Template) testen. Erstelle 2 Beiträge, als Page oder Artikel, und linke sie ganz normal auf einen Menüeintrag. Stelle den Schwellwert für den Pager auf 1 - in admin -> settings -> node.
Deaktivere für diesen Test den Eintrag in Deiner "template.tpl.php" für die "pager.tpl.php" durch kommentieren der betreffenden Codezeilen !!
-------------
quiptime
Da geht noch was.
Fehler gefunden
am 19.07.2006 - 20:33 Uhr
Für alle die hier nachlesen. Fehler war folgender:
An Stelle des richtigen Dateinamens "template.php" wurde der Name "template.tpl.php" verwendet.
Dadurch konnten keine Funktionen angesprochen werden, die ein Template verwenden.
-------------
quiptime
Da geht noch was.
@Hanna, hier der Pager noch
am 20.07.2006 - 00:23 Uhr
@Hanna, hier der Pager noch weiter modifiziert. Er zeigt nun max. 3 Digits und einen Pipe als Delimeter.
http://www.quiptime.de/qt/de/taxonomy/term/115?page=1
-------------
quiptime
Da geht noch was.