[gelöst] views mini pager theming: image mit link statt einem '>>'
Eingetragen von 1kubik (903)
am 18.10.2011 - 17:43 Uhr in
am 18.10.2011 - 17:43 Uhr in
hallo und guten abend
ich bin gerade auf der suche nach der möglichkeit den views mini pager
zu themen. im prinzip ja auch ganz einfach der entsprechenden theme funtion
in der template.php
function mytheme_views_mini_pager($vars) {
//snipp
$li_next = theme('pager_next',
array(
'text' => (isset($tags[3]) ? $tags[3] : t('››')),
'element' => $element,
'interval' => 1,
'parameters' => $parameters,
)
);
///snapp
..
hier also statt der t('>>') eben ein img. aber das geht leider nicht so einfach:
'text' => (isset($tags[3]) ? $tags[3] : '<img src="images/pager-right.png">'),
fürht dazu das der link quellcode als text ausgegeben wird..
bei der variante
$li_nexts = theme('image',
array(
'path' =>'images/pager-right.png',
'alt' => 'ich bin garnicht alt!',
)
);
wird die grafik auch angezeigt, allerdings logischer weise ohne link
und immer da ja auch
isset($tags[3]) ? $tags[3]
fehlt..
ich weiss das das gut mit css zu machen wäre aber ich mir gehts auch n bisschen
um theming praxis..
vielen dank vorab
grüße
stef
.
- Anmelden oder Registrieren um Kommentare zu schreiben
CSS
am 19.10.2011 - 12:57 Uhr
ich weiss das das gut mit css zu machen wäre aber ich mir gehts auch n bisschen
um theming praxis..
Ähem, du fuchtelst lieber in der template.php herum, als das "eben" mit CSS zu machen? Wenn die Links im Pager eindeutige Klassen bekommen (habe ich nicht nachgeprüft, ist aus meiner Erinnerung aber so), kannst du da schnell mit CSS ein Bild statt des Linktextes einsehen. Insbesondere weil es über die template.php ja gerade nicht klappt.
hallo nicolai Zitat: Ähem,
am 19.10.2011 - 13:46 Uhr
hallo nicolai
Ähem, du fuchtelst lieber in der template.php herum, als das "eben" mit CSS zu machen?
ja genau. ich denke dazu ist doch die template.php / template functions da...
das beispiel ansich ist so vielleicht nicht sinnvoll aber ich möchte es grundsätzlich einfach hinbekommen
um das theming zu vertiefen statt einem text link eben eine grafik reinsetzen und zwar
innerhalb des drupal (pre)prozesses.
bei dem drupal design camp in berlin diesen jahres wurde das auch so
nahegelegt: inhalt aus- bzw einblenden nicht per css, das ist 'crime'..
leider finde ich die session bzw den titel oder den namen von dem der das
gesagt hat nicht. die http://drupaldesigncamp.net/ seite ist leider auch down.
grüße
stef
Wenn ich mir Dein Beispiel so
am 19.10.2011 - 14:27 Uhr
Wenn ich mir Dein Beispiel so anseheh, mußt die Funktion für "theme('pager_next'," überschrieben werden. Ich weiß jetzt nicht wo der Code herstammt und nehme das Stück Code jetzt einfach so, wie es da steht.
Ganz allgemein wird aus theme('pager_next',.... die Funktion theme_pager_next, die Du überschreiben mußt. Daraus wird in der template.php DeinTheme_pager_next(....
Du kannst nicht einfach den Text durch den HTML-Code für das Bild ersetzen. Vermutlich wird in der Themeing Routine die l-Funktion (Das ist ein kleines L) zum Bauen des Links benutzt. Die braucht aber einen speziellen Hinweis ('html' => TRUE), wenn ein Bild verwendet wird. Du wirst Dir den Code Deiner Theming-Funktion ansehen müssen, ob die vielleicht eine weitere Theming-Funktion aufruft, um zu sehen, wie Du mit passenden Argumenten im Aufruf der ersten Funktion das gewünschte Verhalten hinbekommst. Wird auf ein bischen graben im Code hinauslaufen, bist Du die Funktionsweise begriffen hast. Theme_pager_next scheint jedenfalls schon in Views für den Minipager irgenwo überschrieben zu werden, aber das habe ich jetzt nicht mehr überprüft.
Beste Grüße
Werner
Halb richtig
am 19.10.2011 - 15:33 Uhr
bei dem drupal design camp in berlin diesen jahres wurde das auch so
nahegelegt: inhalt aus- bzw einblenden nicht per css, das ist 'crime'..
So allgemein ist das nicht ganz richtig. Es kommt darauf an.
Wenn du in einem Benutzerprofil zum Beispiel die Adresse abfragst, diese aber nicht erscheinen soll, ist es blöd, die per CSS zu verstecken. Denn jeder kann dann trotzdem an die Adresse herankommen. Hier musst du die Ausgabe also per PHP unterbinden.
Aber: Es gibt ab und zu Elemente auf der Seite, die du nur aus gestalterischen Gründen nicht dort haben willst. Per CSS lassen die sich mitunter viel schneller ausschalten. Und ob die jemand trotzdem im Quelltext findet, kann dir egal sein. Zumindest dann, wenn es keine Informationen sind, die du eigentlich geheim halten möchtest/musst.
Dein Fall hier ist jedoch ganz anderer Natur: Texte per CSS durch Bilder zu ersetzen ist eine gängige Technik. Das kann man mit dem Logo einer Firma (Firmenname) so machen oder mit Menüpunkten. Man schiebt den Text zur Seite und setzt ein Hintergrundbild ein. Auch in deinem Beispiel ist das völlig legitim. Nicht nur legitim, ich würde das als Best Practice verstehen. Deine Methode ist an dieser Stelle eher "mit Kanonen auf Spatzen".
hallo werner ja danke
am 20.10.2011 - 12:28 Uhr
hallo werner
ja danke dir!!
die l() funktion
war die fehlende info für mich an der stelle.
und wie di ja schon vermutet hast, habe ich die theming functions für den
views mini pager überschrieben um an den page zu kommen.
im prinzip ganz einfach und recht schnell wenn mensch eben weiss wo und wie :)
function theme_views_mini_pager($vars)
//.... exemplarisch jetzt nur der pager_next
// ...satt dem t('>>') das bild einsetzen
$li_next = theme('pager_next',
array(
'text' => (isset($tags[1]) ? $tags[1] : '<img src="' . base_path() . path_to_theme().'/images/pager-right.png"/>'),
'element' => $element,
'interval' => 1,
'parameters' => $parameters,
)
);
jetzt wird der pager_net von der theme_pager_next verrabeitet, ebenso wie an anderer stelle
der theme_pager_previous.
die muss ich aber nicht anfassen, das beide theme_pager_link aufrufen um letzlich den link zu erzeugen mit der l().
und dort dann einfach eben die option html=>true setzen:
function theme_pager_link($variables) {
//.. ganz unten letzte zeile
return l($text, $_GET['q'], array('html'=>TRUE,'attributes' => $attributes, 'query' => $query));
}
das wars schon!
besten gruss
stef
Zitat: So allgemein ist das
am 20.10.2011 - 12:41 Uhr
So allgemein ist das nicht ganz richtig. Es kommt darauf an.
ja, sehe ich auch so
Texte per CSS durch Bilder zu ersetzen ist eine gängige Technik.
stimmt auch. am besten eben auch alscss image sprites (was ja mit drupal 7 leider
nicht umzusetzen ist http://groups.drupal.org/node/15399)
allerdings wenn eine grafik schon im markup ausgeliefert wird ist das doch aber performanter
oder?
den pager per css eine grafik zuverpassen ist ganz klar der
schnellere weg. das mit dem theming funktionen war wie gesagt
ja 'zum spielen'. ichhab jetzt wieder was gelernt darum ging es mir..:)
das problem jetzt mit den überschrieben theme hooks ist das
das natürlich jetzt bei allen pager_links und nicht nur im views_mini_pager
eingesetzt wird. das wäre mit der css variante nicht so.
grüße
stef