Ankündigung

Einklappen
Keine Ankündigung bisher.

Einfache Galerie: auf AJAX Anfragen reagieren

Einklappen

Neue Werbung 2019

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

  • Einfache Galerie: auf AJAX Anfragen reagieren

    Hallo Leute,

    ich schreibe mir zum Lernen ein kleines Galeriescript, stecke jetzt aber bei der Bearbeitung von AJAX Anfragen fest.
    Das Problem besteht darin, dass - logischerweise - jeweils die komplette Seite (inkl. HTML Grundgerüst) nochmal in die bereits bestehende Seite geladen wird.

    Meine Frage ist: macht es überhaupt Sinn auf der Basis eine Lösung zu suchen, oder steckt der Fehler bereits im Aufbau meiner kompletten "Architektur"?


    Mein Code (gekürzt):
    index.php
    PHP-Code:
    <?php require_once 'bootstrap.php'?>
    <!doctype html>
    <html lang="de">
    <head>
        <script>
            $(document).ready(function() {
                $('#galleries a').click(function(e){
                    var url = $(this).attr('href');
                    $('#gallery').load(url);
                    e.preventDefault();
                });
            });
        </script>
    </head>
    <body>
    <div id="wrapper">
        <?php $Gallery->listGalleries(); ?>
        <hr />
        <?php $Gallery->showImages($galleryName); ?>
    </div>
    </body>
    </html>
    bootstrap.php
    PHP-Code:
    if (!empty($_GET[gallery])) {
        
    $galleryName $_GET[gallery];
    }

    require_once 
    '/Gallery.php';
    $Gallery = new Gallery($galleryRoot); 

    Gallery.php
    PHP-Code:
    class Gallery
    {
        protected 
    $galleryRoot;
        protected 
    $filesArray = array();
        protected 
    $dh;


        public function  
    __construct($galleryRoot)
        {
            
    $this->galleryRoot $galleryRoot;
        }


        public function 
    showImages($galleryName)
        {
            
    $galleryFolder $this->galleryRoot $galleryName;
            
    $this->imagesArray $this->readDir($galleryFolder);
            include 
    'templates/showImages.php';
        }


        protected function 
    readDir($dir)
        {
            unset(
    $this->filesArray);
            if (
    is_dir($dir)) {
                
    $this->dh opendir($dir);
                 while ((
    $file readdir($this->dh)) !== false) {
                    if ((
    $file != ".") && ($file != "..")) {
                        
    $this->filesArray[] = $file;
                    }
                }
                return 
    $this->filesArray;
            }
        }


        public function 
    __destruct()
        {
            
    closedir($this->dh);
        }


    templates/showImages.php
    PHP-Code:
    <div id="gallery">
        <h1>Gallery: </h1>
        <ul>
            <?php foreach ($this->imagesArray as $file): ?>
                <li><a href="<?php echo $galleryFolder "/" $file?>">
                    <img src="<?php echo $galleryFolder "/" $file?>" height="100" width="100" />
                </a></li>
            <?php endforeach; ?>
        </ul>
    </div>

    Vielen Dank für das Lesen
    Grüsse JohnT

  • #2
    übergeb beispielsweise noch einen Parameter, der dir sagt, ob die Seite mit Ajax geladen wurde und wenn dies der Fall ist, kannst du in deiner Template-Datei mit einigen If-Konstrukten alles ausschließen, was nicht geladen werden soll.

    Kommentar


    • #3
      Danke, das wäre eine Möglichkeit.
      Eine andere die mir noch einfällt wäre, in der bootstrap.php bei einem AJAX-Request die passende Methode der Klasse Gallery direkt aufzurufen, und dann das Skript abzubrechen.

      Aber irgendwie kommen mir beide Lösungen nicht wirklich sauber vor. Gibt's da nichts schönes?

      Kommentar


      • #4
        Gehört finde ich aber nicht in die Bootstrap. Aber sicherlich denkbar!

        Kommentar

        Lädt...
        X