Bildpfad

opflaum

Aktives Mitglied
4. Februar 2016
14
0
Hallo zusammen!

Ich arbeite gerade an einem eigenen Template. Ich lasse auf der Startseite 4 zufällige TOP-Produkte ausgeben. Soweit funktioniert auch alles wunderbar.
Nun möchte ich aber noch die Bilder entsprechend anzeigen lassen. Dazu lese ich aus der Datenbank den Bildpfad aus:
PHP:
<?php
class getTopArtikelPic
{
    public function getTopPic($aid)
    {
            $sqlselect = "SELECT 
                cPfad, 
                nNr
            FROM tartikelpict
            WHERE kArtikel = '$aid' AND nNr = 1 LIMIT 0,1";
            
            $dbarray = Shop::DB()->query($sqlselect, 1);
            
            return $dbarray;
    } 
}
?>
cPfad zeigt mir auch einen relativ langen Dateinamen an wie z.B. hier: 800_800_a42a7d6a21ca7a8c8ca0d15bd78efb73_f8b19a6e64da3438d96cd3fb175541a32647e994f5c008adfb5bc31207c688be288835f87b76c04a2526946dc7e6496c55739cc522b00426a3f11fb77a2cb3c5.png

Wie kann ich nun im Template das Bild auslesen bzw. wie finde ich den Pfad zu dem Bild? Auf dem FTP-Server kann ich nichts finden. Die Bilder werden "normalerweise" mit der JTL-Wawi abgeglichen?!.....

Ich habe es schon so versucht: <img src="{$ShopURL}/mediafiles/Bilder/{$topPic->cPfad}" alt="" width="200" height="200">, aber den Bildpfad gibt es so theoretisch gar nicht. Ich bin echt ratlos. Order weden die Bilder aus einem Temporären Ordner gezogen?!

LG
 

opflaum

Aktives Mitglied
4. Februar 2016
14
0
AW: Bildpfad

Also meine TPL-Datei für diesen Bereich sieht derzeit so aus:
HTML:
<div id="topprodukte">
    <div class="wrapper">
    {get_top_artikel top_count=4 assign='topprodukt'}
    {foreach name='topprodukt' from=$topprodukt item='produkt'}
        <div class="topProduktBox">
            {get_top_artikel_pic aid=$produkt->kArtikel assign='topPic'}
            <div class="topProduktBild"><img src="{$topPic->cPfad}" alt="test" width="200" height="200"></div>
            <div class="topProduktName">{$produkt->cArtNr}</div>
            <div class="topProduktPreis">&euro; {$produkt->fVKBrutto|string_format:"%.2f"}</div>
            <div class="topProduktUVP">bisher &euro; {$produkt->fUVP}</div>
            {get_top_artikel_bewertung_schnitt aid=$produkt->kArtikel assign='topBewertung'}
            {if $topBewertung->durchschnitt > 0}
                <div class="topProduktStars">
                    {for $cS=1 to $topBewertung->durchschnitt}
                        <i class="fa fa-star"></i>
                    {/for}
                    ({$topBewertung->anzahl})
                </div>
            {/if}
        </div>
    {/foreach}
    <div class="clearer"></div>
    </div>
</div>
Die Funktionen sehen dafür so aus:
PHP:
/* TOP-Artikel auslesen */
function get_top_artikel($params, &$smarty)
{
    $cc = 4;
    if (isset($params['top_count'])) {
        $cc = $params['top_count'];
    }
    
    $top_artikel = new GetTopArtikel();
    
    $smarty->assign($params['assign'], $top_artikel->getTopArtikel($cc));
}


function get_top_artikel_bewertung_schnitt($params, &$smarty)
{
    $aid = 0;
    if (isset($params['aid'])) {
        $aid = $params['aid'];
    }
    
    $bewertungTop = new getTopBewertung();
    
    $smarty->assign($params['assign'], $bewertungTop->getbewertungschnitt($aid));
}


function get_top_artikel_pic($params, &$smarty)
{
    $aid = 0;
    if (isset($params['aid'])) {
        $aid = $params['aid'];
    }
    
    $topPic = new ArtikelPict();
    
    $smarty->assign($params['assign'], $topPic->loadFromDB($aid));
}
Und die Klassen so:
PHP:
<?php
class GetTopArtikel
{
    public function getTopArtikel($cc)
    {
            $sqlselect = "SELECT 
                a.kArtikel, 
                a.cArtNr, 
                (p.fVKNetto * 1.19) AS fVKBrutto, 
                a.fUVP
            FROM tartikel AS a 
            LEFT JOIN tpreise AS p ON p.kArtikel = a.kArtikel
            WHERE a.cTopArtikel = 'Y' ORDER BY rand() LIMIT 0,$cc";
            
            $dbarray = Shop::DB()->query($sqlselect, 2);
            
            return $dbarray;
    } 
}
?>
PHP:
<?php
class getTopBewertung
{
    public function getbewertungschnitt($aid)
    {
            $sqlselect = "SELECT COUNT(*) AS anzahl, 
                avg(nSterne) as durchschnitt
            FROM tbewertung
            WHERE kArtikel = $aid AND nAktiv = 1";
            
            $result = Shop::DB()->query($sqlselect, 1);
            
            return $result;
    } 
}
?>
Und die für das Bild ist die "Standardklasse":
PHP:
<?php
/**
 * @copyright (c) JTL-Software-GmbH
 * @license http://jtl-url.de/jtlshoplicense
 */

/**
 * Class ArtikelPict
 */
class ArtikelPict
{
    /**
     * @var int
     */
    public $kArtikel;

    /**
     * @var int
     */
    public $nNr;

    /**
     * @var string
     */
    public $cPfad1;

    /**
     * @var string
     */
    public $cPfad2;

    /**
     * @var string
     */
    public $cPfad3;

    /**
     * Setzt ArtikelPict mit Daten aus der DB mit spezifiziertem Primary Key
     *
     * @access public
     * @param int $kArtikel
     * @return $this
     */
    public function loadFromDB($kArtikel)
    {
        $obj = Shop::DB()->select('tartikelpict', 'kArtikel', intval($kArtikel));
        if ($obj->kArtikel > 0) {
            foreach (get_object_vars($obj) as $k => $v) {
                $this->$k = $v;
            }
        }

        return $this;
    }

    /**
     * Fügt Datensatz in DB ein. Primary Key wird in this gesetzt.
     *
     * @access public
     * @return mixed
     */
    public function insertInDB()
    {
        $obj = kopiereMembers($this);

        return (Shop::DB()->insert('tartikelpict', $obj));
    }

    /**
     * Updatet Daten in der DB. Betroffen ist der Datensatz mit gleichem Primary Key
     *
     * @return mixed
     */
    public function updateInDB()
    {
        $obj = kopiereMembers($this);

        return Shop::DB()->update('tartikelpict', 'kArtikel', $obj->kArtikel, $obj);
    }

    /**
     * setzt Daten aus Sync POST request.
     *
     * @return bool - true, wenn alle notwendigen Daten vorhanden, sonst false
     */
    public function setzePostDaten()
    {
        $this->kArtikel = intval($_POST['KeyArtikel']);
        $this->nNr      = 0;
        $this->cPfad1   = str_replace('\\', '/', StringHandler::htmlentities(StringHandler::filterXSS($_POST['Path1'])));
        $this->cPfad2   = str_replace('\\', '/', StringHandler::htmlentities(StringHandler::filterXSS($_POST['Path2'])));
        $this->cPfad3   = str_replace('\\', '/', StringHandler::htmlentities(StringHandler::filterXSS($_POST['Path3'])));

        return ($this->kArtikel > 0);
    }
}
 

opflaum

Aktives Mitglied
4. Februar 2016
14
0
AW: Bildpfad

Nun hatte ich eine Antwort veröffentlicht und sie wurde einfach gelöscht.... aaaaaahhhhh :) - Moment. Neuer Versuch.
 

opflaum

Aktives Mitglied
4. Februar 2016
14
0
AW: Bildpfad

Meine Template-Datei sieht so aus:
HTML:
<div id="topprodukte">
    <div class="wrapper">
    {get_top_artikel top_count=4 assign='topprodukt'}
    {foreach name='topprodukt' from=$topprodukt item='produkt'}
        <div class="topProduktBox">
            {get_top_artikel_pic aid=$produkt->kArtikel assign='topPic'}
            <div class="topProduktBild"><img src="{$topPic->cPfad}" alt="test" width="200" height="200"></div>
            <div class="topProduktName">{$produkt->cArtNr}</div>
            <div class="topProduktPreis">&euro; {$produkt->fVKBrutto|string_format:"%.2f"}</div>
            <div class="topProduktUVP">bisher &euro; {$produkt->fUVP}</div>
            {get_top_artikel_bewertung_schnitt aid=$produkt->kArtikel assign='topBewertung'}
            {if $topBewertung->durchschnitt > 0}
                <div class="topProduktStars">
                    {for $cS=1 to $topBewertung->durchschnitt}
                        <i class="fa fa-star"></i>
                    {/for}
                    ({$topBewertung->anzahl})
                </div>
            {/if}
        </div>
    {/foreach}
    <div class="clearer"></div>
    </div>
</div>
Meine Funktionen so:
PHP:
/* TOP-Artikel auslesen */
function get_top_artikel($params, &$smarty)
{
    $cc = 4;
    if (isset($params['top_count'])) {
        $cc = $params['top_count'];
    }
    
    $top_artikel = new GetTopArtikel();
    
    $smarty->assign($params['assign'], $top_artikel->getTopArtikel($cc));
}


function get_top_artikel_bewertung_schnitt($params, &$smarty)
{
    $aid = 0;
    if (isset($params['aid'])) {
        $aid = $params['aid'];
    }
    
    $bewertungTop = new getTopBewertung();
    
    $smarty->assign($params['assign'], $bewertungTop->getbewertungschnitt($aid));
}


function get_top_artikel_pic($params, &$smarty)
{
    $aid = 0;
    if (isset($params['aid'])) {
        $aid = $params['aid'];
    }
    
    $topPic = new ArtikelPict();
    
    $smarty->assign($params['assign'], $topPic->loadFromDB($aid));
}
 

opflaum

Aktives Mitglied
4. Februar 2016
14
0
AW: Bildpfad

Kann mir keiner weiterhelfen? Ich hatte es mal hinbekommen - da hat auch alles geklappt. Seit ca. 2 Tagen werden die Bilder aber plötzlich wieder nicht mehr angezeigt obwohl ich nichts geändert habe?!
Ich habe das Gefühl, dass die Bilder beim ersten Aufruf erst "generiert" werden müssen und dann auf dem Server abgelegt werden?! Wenn ja - wie kann / muss ich das machen?

Das Problem ist, wenn ich direkt in der Datenbank nach dem Bild schaue, steht der richtige Name drinn: PLUS550ED.jpg
Wenn ich den Pfad aber im Template auslese, erhalte ich das:
http://www.meineurl.de/1000_1000_12...e9e1a13f3d5bb9bee8a971fbcd5193546fd2d0ad9.jpg
 

martinwolf

Offizieller Servicepartner
SPBanner
6. September 2012
3.517
296
AW: Bildpfad

Du holst dir 4 Top Angebote? Wieso schreibst du dafür neue Funktionen, wenn du mit gibTopAngebote($nLimit) alles da hast?
 

Horus Sirius

Gut bekanntes Mitglied
9. März 2017
146
10
Oldenburg
Ich habe das gleiche Problem.

in der DB unter cPfad befinden sich Bildnamen die so auf der HDD nicht existieren.
Mit welcher Funktion php_functions.php könnte ich diesen Bildnamen zum echten Bildnamen auflösen?