Post-Übersicht

Forum » mh_branchenbuch » Pagebrowser

Write a post ...

«« 1 »»

Author Message

mpoeschl

Offline Author

Level 3 (89 %)

 

Posts: 10

Hallo,
ich habe ein Problem mit dem Pagebrwoser (verwende momentan nur das alphabetische Menü)
ein Buchstabe hat insgesamt 18 Einträge. Ich habe die Anzahl an Einträgen per TypoScript auf 7 pro Seite angepasst.
Es wird mir auch angezeigt, dass nun 3 Seiten mit Einträge vorhanden sind, allerdings sind auf jeder Seite alle 18 Einzräge zu sehen.

Zum Test habe ich folgende Werte augeben lassen: (Hauptklasse Zeile 878)
echo "Limit: " . $limit ."<br />";
echo "this->piVars['page']: ". $this->piVars['page'] . "<br />";
echo "this->resultsPerPage: " . $this->resultsPerPage;

mit dem Ergbenis:
Limit: 0,7
this->piVars['page']: 0
this->resultsPerPage: 7

Ich hoffe mir kann jemand weiterhelfen?


--
Sysgrade GmbH - intelligent internet
http://www.sysgrade.de
info@sysgrade.de
Posted: 29.09.09, 12:04

Quote

Martin Hesse

Offline Moderator

Level 9 (60 %)

 

Posts: 154

Hallo,

so wie ich das sehe habe ich dort wohl vergessen das LIMIT im SQL-Statement einzubauen ... ^^

Zeile 830:

Language: PHP
  1. if (!isset($this->piVars['page'])) $this->piVars['page'] = 0;

  2.     $limit = $this->piVars['page'] * $this->resultsPerPage . "," . $this->resultsPerPage;

Einfügen wo platz ist ... und danach drunter das Query wird zu:
Language: PHP
  1. $res = $GLOBALS['TYPO3_DB']->sql(TYPO3_db,"

  2.        SELECT

  3.          firma

  4.        FROM

  5.          " . $this->dbTable1 . "

  6.        WHERE

  7.          deleted = 0

  8.        AND

  9.          hidden = 0

  10.        AND

  11.          pid IN (" . intval($pid) . ")

  12.        AND

  13.          substring(firma,1,1) = '" . $letter . "'

  14.        " . $query ."

  15.        LIMIT " . $limit;

  16.       );

Müsste funktionieren ...


Posted: 29.09.09, 13:15

Quote

mpoeschl

Offline Author

Level 3 (89 %)

 

Posts: 10

vielen Dank für die schnelle Antwort - aber wie bei allen Programmierarbeiten funktioniert es selten auf anhieb *schluchz*

na gut, zur Vollständigkeit halber der von mir gänderte Code zeile830 bis 851:

Language: Text
  1.  

  2.     $alphabetic = array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');

  3.    

  4.         if (!isset($this->piVars['page'])) $this->piVars['page'] = 0;

  5.         $limit = $this->piVars['page'] * $this->resultsPerPage . "," . $this->resultsPerPage;

  6.    

  7.     foreach($alphabetic AS $letter) {

  8.       $res = $GLOBALS['TYPO3_DB']->sql(TYPO3_db,"

  9.         SELECT

  10.           firma

  11.         FROM

  12.           " . $this->dbTable1 . "

  13.         WHERE

  14.           deleted = 0

  15.         AND

  16.           hidden = 0

  17.         AND

  18.           pid IN (" . intval($pid) . ")

  19.         AND

  20.           substring(firma,1,1) = '" . $letter . "'

  21.         " . $query . "

  22.         LIMIT " . $limit

  23.       );

  24.  



wenn ich mir die Queries ausgeben lasse schaut das ganze scho ned schlecht aus:
echo <query auf seite 1> (seite 2 ergibt als limit 7,7 Seite 3 limit 14,7):
Language: Text
  1.  

  2. SELECT firma FROM tx_mhbranchenbuch_firmen WHERE deleted = 0 AND hidden = 0 AND pid IN (76) AND substring(firma,1,1) = 'a' AND FIND_IN_SET(1,kategorie) LIMIT 0,7 SELECT firma FROM tx_mhbranchenbuch_firmen WHERE deleted = 0 AND hidden = 0 AND pid IN (76) AND substring(firma,1,1) = 'b' AND FIND_IN_SET(1,kategorie) LIMIT 0,7 SELECT firma FROM tx_mhbranchenbuch_firmen WHERE deleted = 0 AND hidden = 0 AND pid IN (76) AND substring(firma,1,1) = 'c' AND FIND_IN_SET(1,kategorie) LIMIT 0,7 SELECT firma FROM tx_mhbranchenbuch_firmen WHERE deleted = 0 AND hidden = 0 AND pid IN (76) AND substring(firma,1,1) = 'd' AND FIND_IN_SET(1,kategorie) LIMIT 0,7 SELECT firma FROM tx_mhbranchenbuch_firmen WHERE deleted = 0 AND hidden = 0 AND pid IN (76) AND substring(firma,1,1) = 'e' AND FIND_IN_SET(1,kategorie) LIMIT 0,7 SELECT firma FROM tx_mhbranchenbuch_firmen WHERE deleted = 0 AND hidden = 0 AND pid IN (76) AND substring(firma,1,1) = 'f' AND FIND_IN_SET(1,kategorie) LIMIT 0,7 SELECT firma FROM tx_mhbranchenbuch_firmen WHERE deleted = 0 AND hidden = 0 AND pid IN (76) AND substring(firma,1,1) = 'g' AND FIND_IN_SET(1,kategorie) LIMIT 0,7 SELECT firma FROM tx_mhbranchenbuch_firmen WHERE deleted = 0 AND hidden = 0 AND pid IN (76) AND substring(firma,1,1) = 'h' AND FIND_IN_SET(1,kategorie) LIMIT 0,7 SELECT firma FROM tx_mhbranchenbuch_firmen WHERE deleted = 0 AND hidden = 0 AND pid IN (76) AND substring(firma,1,1) = 'i' AND FIND_IN_SET(1,kategorie) LIMIT 0,7 SELECT firma FROM tx_mhbranchenbuch_firmen WHERE deleted = 0 AND hidden = 0 AND pid IN (76) AND substring(firma,1,1) = 'j' AND FIND_IN_SET(1,kategorie) LIMIT 0,7 SELECT firma FROM tx_mhbranchenbuch_firmen WHERE deleted = 0 AND hidden = 0 AND pid IN (76) AND substring(firma,1,1) = 'k' AND FIND_IN_SET(1,kategorie) LIMIT 0,7 SELECT firma FROM tx_mhbranchenbuch_firmen WHERE deleted = 0 AND hidden = 0 AND pid IN (76) AND substring(firma,1,1) = 'l' AND FIND_IN_SET(1,kategorie) LIMIT 0,7 SELECT firma FROM tx_mhbranchenbuch_firmen WHERE deleted = 0 AND hidden = 0 AND pid IN (76) AND substring(firma,1,1) = 'm' AND FIND_IN_SET(1,kategorie) LIMIT 0,7 SELECT firma FROM tx_mhbranchenbuch_firmen WHERE deleted = 0 AND hidden = 0 AND pid IN (76) AND substring(firma,1,1) = 'n' AND FIND_IN_SET(1,kategorie) LIMIT 0,7 SELECT firma FROM tx_mhbranchenbuch_firmen WHERE deleted = 0 AND hidden = 0 AND pid IN (76) AND substring(firma,1,1) = 'o' AND FIND_IN_SET(1,kategorie) LIMIT 0,7 SELECT firma FROM tx_mhbranchenbuch_firmen WHERE deleted = 0 AND hidden = 0 AND pid IN (76) AND substring(firma,1,1) = 'p' AND FIND_IN_SET(1,kategorie) LIMIT 0,7 SELECT firma FROM tx_mhbranchenbuch_firmen WHERE deleted = 0 AND hidden = 0 AND pid IN (76) AND substring(firma,1,1) = 'q' AND FIND_IN_SET(1,kategorie) LIMIT 0,7 SELECT firma FROM tx_mhbranchenbuch_firmen WHERE deleted = 0 AND hidden = 0 AND pid IN (76) AND substring(firma,1,1) = 'r' AND FIND_IN_SET(1,kategorie) LIMIT 0,7 SELECT firma FROM tx_mhbranchenbuch_firmen WHERE deleted = 0 AND hidden = 0 AND pid IN (76) AND substring(firma,1,1) = 's' AND FIND_IN_SET(1,kategorie) LIMIT 0,7 SELECT firma FROM tx_mhbranchenbuch_firmen WHERE deleted = 0 AND hidden = 0 AND pid IN (76) AND substring(firma,1,1) = 't' AND FIND_IN_SET(1,kategorie) LIMIT 0,7 SELECT firma FROM tx_mhbranchenbuch_firmen WHERE deleted = 0 AND hidden = 0 AND pid IN (76) AND substring(firma,1,1) = 'u' AND FIND_IN_SET(1,kategorie) LIMIT 0,7 SELECT firma FROM tx_mhbranchenbuch_firmen WHERE deleted = 0 AND hidden = 0 AND pid IN (76) AND substring(firma,1,1) = 'v' AND FIND_IN_SET(1,kategorie) LIMIT 0,7 SELECT firma FROM tx_mhbranchenbuch_firmen WHERE deleted = 0 AND hidden = 0 AND pid IN (76) AND substring(firma,1,1) = 'w' AND FIND_IN_SET(1,kategorie) LIMIT 0,7 SELECT firma FROM tx_mhbranchenbuch_firmen WHERE deleted = 0 AND hidden = 0 AND pid IN (76) AND substring(firma,1,1) = 'x' AND FIND_IN_SET(1,kategorie) LIMIT 0,7 SELECT firma FROM tx_mhbranchenbuch_firmen WHERE deleted = 0 AND hidden = 0 AND pid IN (76) AND substring(firma,1,1) = 'y' AND FIND_IN_SET(1,kategorie) LIMIT 0,7 SELECT firma FROM tx_mhbranchenbuch_firmen WHERE deleted = 0 AND hidden = 0 AND pid IN (76) AND substring(firma,1,1) = 'z' AND FIND_IN_SET(1,kategorie) LIMIT 0,7

  3.  



Aber das limit greift nicht bei der ausgabe der Daten. Werden diese erneut an anderer Stelle ausgelesen?


--
Sysgrade GmbH - intelligent internet
http://www.sysgrade.de
info@sysgrade.de
Posted: 29.09.09, 14:33

Quote

mpoeschl

Offline Author

Level 3 (89 %)

 

Posts: 10

so, hab mich etz nocheinmal intensiev damit beschäftigt und den Fehler gefunden, es war so wie ich mir gedacht habe, die Daten werden 2 mal aus der DB gelesen, in Zeile 830 nur zum zählen für den Pagebrowser. Damit das Limit auch für den Output funktioniert den Code aus Zeile 891 um folgendes ergänzen:
(zur Übersicht poste ich das ganze Codefragment)

Language: Text
  1.  

  2.       $res2 = $GLOBALS['TYPO3_DB']->sql(TYPO3_db,"

  3.         SELECT

  4.           f.*,

  5.           k.name AS category

  6.         FROM

  7.           " . $this->dbTable1 . " f

  8.           LEFT JOIN " . $this->dbTable2 . " k ON k.uid = f.kategorie

  9.         WHERE

  10.           f.deleted = 0

  11.         AND

  12.           f.hidden  = 0

  13.         AND

  14.           f.pid IN (" . intval($pid) . ")

  15.           $subStr

  16.           $query

  17.         ORDER BY

  18.           f.firma

  19.         LIMIT " . $limit

  20.       );

  21.  


--
Sysgrade GmbH - intelligent internet
http://www.sysgrade.de
info@sysgrade.de
Posted: 02.10.09, 09:44

Quote

Martin Hesse

Offline Moderator

Level 9 (60 %)

 

Posts: 154

Sorry mpoeschl das ich dir nicht eher helfen konnte aber du hast die Ursacha ja selber gefunden. Habe zur Zeit ein haufen Arbeit vor mir ;-)


Posted: 03.10.09, 14:54

Quote

mpoeschl

Offline Author

Level 3 (89 %)

 

Posts: 10

kein Problem - vielen Dank an dieser Stelle nochmal für die tolle Extension!


--
Sysgrade GmbH - intelligent internet
http://www.sysgrade.de
info@sysgrade.de
Posted: 12.10.09, 16:13

Quote

Guest/Gast

Offline

Level 1 (1 %)

 

Posts: 0

So, ich will ja ned so sein...

nein Scherz beiseite. Entweder funzt es nur bei mir ned oder so ein Fehler ist noch niemendem aufegfallen?!?

Naja, auch der Pagebrowser unter letter='all' spuckt nur die erste seite aus...

hier der "dirty" bugfixcode (zeilenangaben dürften leider mittlerweile nicht mehr stimmen - Zeile ca. 868)

Language: Text
  1.  

  2. /* PAGEBROWSER INIT */

  3.       $enableFields = $this->cObj->enableFields($this->dbTable1);

  4.      

  5.       if($postVarLetter != 'all') {

  6.               $res_c = $GLOBALS['TYPO3_DB']->exec_SELECTquery(

  7.                 'uid',

  8.                 $this->dbTable1,

  9.                 '`pid` IN(' . intval($pid) . ') ' . $query . ' AND substring(firma,1,1) = ' . $GLOBALS['TYPO3_DB']->fullQuoteStr($postVarLetter,$this->dbTable1) . ' ' . $enableFields

  10.               );

  11.       }

  12.       if($postVarLetter == 'all') {

  13.         $res_c = $GLOBALS['TYPO3_DB']->sql(TYPO3_db,"

  14.         SELECT

  15.           f.*,

  16.           k.name AS category

  17.         FROM

  18.           " . $this->dbTable1 . " f

  19.           LEFT JOIN " . $this->dbTable2 . " k ON k.uid = f.kategorie

  20.         WHERE

  21.           f.deleted = 0

  22.         AND

  23.           f.hidden  = 0

  24.         AND

  25.           f.pid IN (" . intval($pid) . ")

  26.           $subStr

  27.           $query

  28.         ");

  29.       }

  30.      

  31.       $count = $GLOBALS['TYPO3_DB']->sql_num_rows($res_c);

  32.      

  33.       if (!isset($this->piVars['page'])) $this->piVars['page'] = 0;

  34.       $limit = $this->piVars['page'] * $this->resultsPerPage . "," . $this->resultsPerPage;

  35.      

  36.       $pageBrowser = array(

  37.         'pid'   => $pid,

  38.         'limit' => $limit,

  39.         'page'  => $this->piVars['page'],

  40.         'table' => $this->dbTable1,

  41.         'count' => $count,

  42.       );

  43.  



Also wers denn brauchen kann... ich freu mich ja auch immer, wenn Leute nachdem Sie eine Hilferstellung erhalten haben nochmal eine finale Zusammenfassung schreiben ;-)


Posted: 15.10.09, 17:14

Quote

mpoeschl

Offline Author

Level 3 (89 %)

 

Posts: 10

oh, ich war wohl ausgeloggt, dann bitte den eintrag mir zuweisen und freischalten!!!

thx
Mario


--
Sysgrade GmbH - intelligent internet
http://www.sysgrade.de
info@sysgrade.de
Posted: 15.10.09, 17:16

Quote

Martin Hesse

Offline Moderator

Level 9 (60 %)

 

Posts: 154

Danke nochmal für deine Zusammenfassung!


Posted: 16.10.09, 15:21

Quote


«« 1 »»

Powered by MH-Dev.-Board (c) 2009 MH-Dev. - Webdevelopment.