Views blokkban a pager elemei linkelődjenek ugyanarra a pagerre ($_GET['page'])

Sk8erPeter képe

Sziasztok!

A topic címe elég furán hangzik, de most hirtelen nem tudtam értelmesebben megfogalmazni röviden.

Views-zal létrehozok pár blokkot, és ezek ugyanazon az oldalon jelennek meg. A blokkban alapvetően node-ok címeit sorolom fel, 10-re korlátozva a megjelenést, de mivel ennél több elemről van szó, megjelenik a pager a blokkoknál. Mindegyik view-nál szépen be van állítva a pagerhez tartozó különböző azonosító, annak a problémának az elkerülése érdekében, hogy egymást akarják lapozgatni a blokkok, mindegyiknek külön lapozása legyen.
Ebből következően a pagerek sok blokk esetén ilyesmik is lehetnek:
http://example.com/drupal/akarmi?page=0%2C0%2C0%2C0%2C1

tehát ez lenne a $_GET['page'] értéke:
'0,0,0,0,1'

Ez azt jelenti, hogy a 4-es lapozóazonosítót kapott pager (0-tól számozódik) a második oldalra lett lapozva (0-tól számozódik ez is, ezért 1-es az érték).

Viszont amint a júzer belekattint valamelyik blokkban lévő linkbe, akkor a lapozó már megint visszaáll az eredeti, első oldalra, tehát a $_GET['page'] üres lesz, "elfelejtődik", hogy hol is állt a pager.

Mi lenne ilyenkor a kerülő megoldás, hogy a blokkban lévő linkekre kattintva megjegyződjön a pager száma (hozzácsapódjon a ?page=XYZ query string)?
Ja, fontos, hogy ugyanez a blokk megjelenik a konkrét node-oknál is.

Minden egyes view-nál a title mezőnél pipáljam be a mező kimenetének felülírását, és manuálisan állítsam át?
Csak mert az nyilván nem megoldás, hogy MINDEN linkhez hozzácsapom az említett query stringet, mert akkor másik oldalakon lévő tök más blokkok is eleve lapozva lennének, az meg megint nem jó.
Egyelőre nem látok nagyon jobb megoldást, na meg esetleg ha nagyon akarom, még jQuery-vel is megoldható a dolog, de akkor már sztem szerveroldalon kéne.

Remélem, sikerült valamennyire érthetően fogalmazni. :D
Köszi!

Melyik modulhoz, modulokhoz kapcsolódik a téma?: 
Drupal verzió: 
Sk8erPeter képe

Itt még azon gondolkozom, melyik hook lenne a megfelelő a linkek hrefjének felülbírálására, ha mondjuk konkrétan csak két, Views által legenerált blokkban szeretném hozzácsapni a $_GET['page'] értékét (amennyiben be van állítva).

Ha theme-ből bírálom felül, akkor a theme_link() nem megfelelő, mert onnan még nem derül ki, hogy én most egy view blokkjának linkjét szeretném felülbírálni.
Minden linkhez hozzácsapni a $_GET['page']-et viszont megint nem jó, ahogy írtam is, mert akkor mindenhova be lenne drótozva, hogy hányadik oldalra lapozzon, olyan oldalaknál is, ahol tök más blokkok lapozhatók.

Még ilyeneket nézegettem, mint a template_preprocess_views_view() és hasonlók, de konkrét megoldásra még nem jöttem rá (hogy a linkek még ne legyenek komplett HTML-re legenerálva, de bele lehessen még szólni időben, hova mutassanak (href felülbírálása)).

Ötlet?

0
0
Sk8erPeter képe

A kérdést le lehetett volna egyszerűsíteni: a lényeg, hogy a Views által generált listában a node-okra hivatkozott címmezők href attribútumát szeretném felülbírálni.

Ide is felraktam a kérdést, hátha:

http://drupal.stackexchange.com/questions/51788/views-how-to-override-a-...

Aztán felraktam egy példaexportot a lehető legegyszerűbb blokk típusú view-ról, ami az Article típus node-jait listázza sima HTML-listában, a konkrét node-okra linkelve. Na, ezeknek a href-jeit szeretném én felülbírálni úgy, hogy hozzácsapok még egy query stringet.

http://pastebin.com/tmq0kZwT

0
0
aboros képe

annak is van tplje. aminek tplje van prerpocesse is. a nézeted szerkesztésekor a theme information linkre kattintva megkapod az összes abban a nézetben felhasználható tpl listáját. bogarászd ki a title meződét.

0
0

-
clear: both;

Sk8erPeter képe

Miért akarom mindig agyonbonyolítani? :D (költői kérdés)
Tényleg így a legegyszerűbb, köszönöm szépen.

Tehát a teendők:

views-view-field.tpl.php-ból lemásolni egy példányt, és ilyen módon elnevezni:
views-view-field--NEZET-MACHINE-NAME--BLOCK-NÉZET-MACHINE-NAME--title.tpl.php

ezenbelül egyelőre ezt műveltem:

  1. $path = drupal_get_path_alias('node/'.$row->nid);
  2. $options = array(
  3. 'query' => ( isset($_GET['page']) ? array('page'=>$_GET['page']) : array() )
  4. );
  5. $output_as_link_pager_position_appended = l($row->node_title, $path, $options);
  6. <?php
  7. // print $output;
  8. print $output_as_link_pager_position_appended;
  9. ?>

direkt bent hagytam a kikommentezett összerakott $output változót, hogy látható legyen, hogy az az eredeti.

Az előbbi kód mindenesetre pont azt csinálja, amit kell.

-----------------
De meg fogom próbálni a preprocess-ben is összerakni, érzésem szerint ennek a kódnak inkább ott lenne a helye.

Arról viszont ezt találtam:

http://drupal.stackexchange.com/questions/22878/preprocess-views-view-sp...

--> http://drupal.org/node/939462#comment-4476264
eszerint valahogy így lehet workaroundot írni:

  1. /**
  2.   * Generic preprocess that is still working on D7
  3.   */
  4. function MYTHEME_preprocess_views_view_fields(&$vars) {
  5. if (isset($vars['view']->name)) {
  6. $function = 'MYTHEME_preprocess_views_view_fields__' . $vars['view']->name . '__' . $vars['view']->current_display;
  7.  
  8. if (function_exists($function)) {
  9. $function($vars);
  10. }
  11. }
  12. }
  13.  
  14. /**
  15.   * Then the specific preprocess that worked without the above code for D6
  16.   */
  17. function MYTHEME_preprocess_views_view_fields__VIEWNAME__block_1 (&$vars) {
  18. // my specific preprocess code
  19. }

Ha van még ezzel kapcsolatban valami meglátásod, azt előre is köszönöm.

===========

SZERK.:

ja, ez a views_view_fields-re vonatkozik, többesszámban, pedig nem mindegy, nekem most az egyesszámú kell. Lehet, hogy annál egyszerűbb.

0
0
Sk8erPeter képe

A korábban említett views-view-field--NÉZET-MACHINE-NAME--BLOCK-NÉZET-MACHINE-NAME--title.tpl.php fájlok feleslegesek, egyébként is hatékonyabb preprocess függvényekből felülbírálni ezeket a változókat, mint magából a template-fájlból. Cache-törlés után tehát töröltem őket, és felülbíráltam a template_preprocess_views_view_field() függvényt a saját theme-emben, majd az abban szereplő kódból csekkoltam, létezik-e az adott scope-ban olyan függvény, mely külön az adott nézet adott megjelenítésére vonatkozó preprocess, és ha igen, meghívtam azt is - mint kiderült, ezek a függvények speciel automatikusan nem hívódnak meg.

Az alábbi kód megfelelően működik tehát a "Content: Title" belinkelt fieldjénél, hozzácsapja a $_GET['page']-et, vagyis a pager adott pozícióját:

  1. /**
  2.  * Implements template_preprocess_views_view_field()
  3.  * @see http://api.drupal.org/api/views/theme!theme.inc/function/template_preprocess_views_view_field/7
  4.  * Process a single field within a view.
  5.  * This preprocess function isn't normally run, as a function is used by default, for performance. However, by creating a template, this preprocess should get picked up.
  6.  */
  7. // /* -- Comment out this line if you want to use this function
  8. function MYTHEME_preprocess_views_view_field(&$vars) {
  9. // $vars['output'] = $vars['field']->advanced_render($vars['row']);
  10.  
  11. // innen: http://drupal.org/node/939462#comment-4476264
  12. if (isset($vars['view']->name)) {
  13. $function = 'MYTHEME_preprocess_views_view_field__' . $vars['view']->name . '__' . $vars['view']->current_display;
  14.  
  15. if (function_exists($function)) {
  16. $function($vars);
  17. // visszatérhetünk, legyen külön preprocess...
  18. return;
  19. }
  20. }
  21. }
  22. // */
  23.  
  24. /**
  25.  * Implements template_views_view_field__VIEW_MACHINE_NAME__DISPLAY_MACHINE_NAME()
  26.  * @see template_views_view_field()
  27.  * @see MYTHEME_views_view_field()
  28.  */
  29. // /* -- Comment out this line if you want to use this function
  30. function MYTHEME_preprocess_views_view_field__VIEW_MACHINE_NAME__DISPLAY_MACHINE_NAME(&$vars) {
  31. // $vars['output'] = $vars['field']->advanced_render($vars['row']);
  32.  
  33. if (isset($vars['row']->nid, $vars['row']->node_title)) {
  34. $path = drupal_get_path_alias('node/' . $vars['row']->nid);
  35. $options = array();
  36. if (isset($_GET['page'])) {
  37. $options['query'] = array(
  38. 'page' => $_GET['page']
  39. );
  40. }
  41.  
  42. $vars['output'] = l($vars['row']->node_title, $path, $options);
  43. }
  44. }
  45. // */
1
0