Ankündigung

Einklappen
Keine Ankündigung bisher.

Automatischen Seitenumbruch erstellen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Automatischen Seitenumbruch erstellen

    Hallo,

    vielleicht eine etwas doofe Frage. Ich bastel als Übungsprojekt an einem kleinen Shop und möchte, dass z.B. alle 50 Produkte eine neue Seite beginnt.
    Ich finde viele Links, wie man die Seitennummerierung schön gestalten kann, z.b. hier.
    Mein Problem ist jetzt das dynamische Erstellen des Seitenumbruches.

    Ich denke, ein Algorithmus sähe ungefähr so aus:
    Code:
    List<Page> pages = new List<Pages>();
    List<Product> tmp = new List<Product>();
    
    for(int i = 0; i<productList.length; i++){
    
    	if(tmp.Size < 50){
    		tmp.Add(productList[i]);
    	} else {
    		pages.Add(tmp);
    		tmp.Clear();
    	}
    }
    
    
    foreach(Page page in pages){
    	foreach(Product product in page){
    		Console.WriteLine(product.Description + product.Price);
    	}
    }

    Meine Übersicht sieht bisher so aus (zum Testen der Darstellung einfach 50 mal dasselbe Produkt):
    PHP-Code:
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title></title>
        </head>
        <body>
            <ul id="product_list">
                <?php for ($i 0$i 50$i++): ?>                
                    <li><?php echo $view->render('AcmeShopBundle:Home:product.html.php',array());?></li> 
                <?php endfor; ?>
            </ul>
        </body>
    </html>
    Aber ich stehe gerade komplett auf dem Schlauch, wie ich diese beiden Codeschnipsel zusammenbringe.


  • #2
    Hallo,

    deine darstellung des "Alogrithmus" ist grundlegen "richtig". Aber:
    Es ist sinnvoller bereits bei der Abfrage der Datenbank die Anzahl der Produkte via LIMIT und OFFSET entsprechend zu laden.

    Was dein Templat betrifft - wenn das von der Template-Logik stimmt müsste das passen - du fügst Template "AcmeShopBundle:Homeroduct.html.php" -> 50x ein. Fraglich ist wenn du "array()" übergibst welche Daten dann übergeben werden? (Symfony2?)
    Gruß,
    SebTM

    Kommentar


    • #3
      Es tut mir leid, aber ich verstehe leider nicht, in wiefern eine begrenzte Abfrage mir hilft z.b. aus 500 Produkten automatisch 10 seiten zu generieren.
      Im Array wollte ich eigentlich eine Instanz von Produkt übergeben und mir die benötigten Daten erst im Template sortieren. Aber dazu muss ich nochmal lesen und probieren, ob und wie ich im Template auf Attribute zugreife.

      Kommentar


      • #4
        Die Logik dahinter ist das du genau die Einträge selektierst, die du auf der Seite ausgeben willst. Du benötigst natürlich zusätzlich noch einen z.B. GET-Parameter der die aktuelle Seite angibt die dir LIMIT und OFFSET ausrechnet sowie eine Pagination am ende der Seite ...
        Gruß,
        SebTM

        Kommentar


        • #5
          Such bei Google mit php mysql pagnierung
          Damit findest einige Tutorials dazu.

          Kommentar


          • #6
            Hallo,

            ich kenne das Namespace-Konzept eigentlich aus anderen Sprachen, trotzdem habe ich gerade ein kleines Problem.
            Ich versteh nicht so ganz, warum die Klasse "PaginationService" beim Interpretieren nicht gefunden wird, ich aber trotzdem per Intellisense die Funktionen vorgeschlagen bekomme.


            Project\SourceFiles\src\Acme\ShopBundle\Controller \HomeController.php
            PHP-Code:
            <?php

            namespace Acme\ShopBundle\Controller;

            use 
            Symfony\Bundle\FrameworkBundle\Controller\Controller;

            class 
            HomeController extends Controller
            {
                public function 
            indexAction($pageIndex)
                {
                    
            $paginationService = new \src\Services\PaginationService();               
                    
            $products $paginationService->getProductsOnPage($pageIndex);
                    return 
            $this->render('AcmeShopBundle:Home:index.html.php', array("products"=>$products));
                }      
            }
            Project\SourceFiles\src\Services\PaginationService .php
            PHP-Code:
            <?php
            namespace src\Services;

            class 
            PaginationService {
            [...]
                   
            }
            ?>

            Kommentar

            Lädt...
            X