Neu Eigene Smartyfunktion

Ugenmeister

Gut bekanntes Mitglied
28. August 2013
498
12
Hallo an Alle.

Wenn in einem Child-Template (v4.06) bereits eine functions.php vorhanden ist - sie wurde so eingebunden:
Code:
<?php

include_once(__dir__ . '/../../Evo/php/functions.php');

HIER IST DER CODE...

?>

... wie kann ich hier noch weiteren Code / eigene Smarty-Funktionen integrieren? Kann ich einfach NACH dem o.g. Code nochmals
Code:
include realpath(__DIR__ . '/../../Evo/php/functions.php');
setzen und danach meine Funktionen einbauen?
Hab das gemacht, aber das Ergebnis war eine leere Seite im Shop.

Ein ehemaliger Händler vom Kunden hat die o.g. (erste) functions.php so eingebunden. Die existiert also schon im Child.

Vielen Dank für Eure Hilfe.

Gruß
 

MBesancon

Administrator
Mitarbeiter
1. Oktober 2010
2.080
215
Erkelenz
Huhu :),

wenn die functions.php bereits eingebunden ist musst du sie nicht erneut einbinden. Du kannst dann deine Smarty-Funktionen in diese Datei integrieren. Aber nicht vergessen die Funktion auch bei Smarty zu registrieren :).
 

Ugenmeister

Gut bekanntes Mitglied
28. August 2013
498
12
Huhu :) zurück.
Stimmt. Ich dachte nur, weil diese mit "include_once" eingebunden wurde... soweit ich weiß, wird die dann ja nur EINMAL aufgerufen.
Der Grund für mein tun ist es eigentlich, dass ich die Funktion (vom 3er) für "eigene Artikellisten" auf der Startseite einbinden wollte (wie hier im Forum erklärt). Das hatte ich schon bei einigen anderen Shops gemacht, wo´s auch funktioniert hat. Aber hier komm ich nicht weiter, da der ehemalige Händler seine Funktion mit "include_once" eingebunden hat.
Baue ich die Funktionen für die eigene Artikelliste noch dazu, ist mein Shop weg.
 

MBesancon

Administrator
Mitarbeiter
1. Oktober 2010
2.080
215
Erkelenz
Hast du die Fehlerausgabe (display_errors = 1) aktiviert? Wenn ja, was wird als Fehler ausgegeben? Oder wirf einen Blick ins error_log. Da sollte dann auch der Auslöser drinstehen :).

Das "include_once" sorgt dafür das die Datei nur einmal eingebunden wird. Erfolgt ein erneuter Aufruf von "include_once" für die Datei wird diese nicht erneut eingebunden. Baust du dagegen ein "include" ein wird es zu einem Serverfehler kommen da die Datei erneut eingebunden und die Funktionsdefinitionen nochmal durchgeführt werden. Das kann dann aber nicht funktionieren ;)
 

Ugenmeister

Gut bekanntes Mitglied
28. August 2013
498
12
Hab den Fehler gefunden. Ich wollte die eigenen Smartyfunktionen für get_product_list in die functions.php integrieren, da diese ja im 4er Shop nicht mehr integriert ist. Seltsamerweise aber ist sie bei mir enthalten; darum ging das auch nicht und erzeugte den Fehler. Soweit also erledigt. Meine Artikel werden auf der Startseite auch angezeigt.

ABER: Wenn ich den Parameter nSortierung=1 einbaue (oder welche Nummer von 1-12 auch immer) wird nichts umsortiert und es ändert sich nichts. Sprich, die Sortierung greift nicht.
Ich hab mir dann mal die im EVO enthaltene functions.php angeschaut. Die unterscheidet sich (bez. get_product_list) von dem 3er Shop. Bei mir sieht sie im 4.06 so aus:

Code:
/**
* @param array     $params
* @param JTLSmarty $smarty
* @return array
*/
function get_product_list($params, &$smarty)
{
    $nLimit             = isset($params['nLimit'])
        ? (int)$params['nLimit']
        : 10;
    $nSortierung        = isset($params['nSortierung'])
        ? (int)$params['nSortierung']
        : 0;
    $cAssign            = (isset($params['cAssign']) && strlen($params['cAssign']) > 0)
        ? $params['cAssign']
        : 'oCustomArtikel_arr';
    $cMerkmalFilter_arr = isset($params['cMerkmalFilter'])
        ? setzeMerkmalFilter(explode(';', $params['cMerkmalFilter']))
        : null;
    $cSuchFilter_arr    = isset($params['cSuchFilter'])
        ? setzeSuchFilter(explode(';', $params['cSuchFilter']))
        : null;
    $cTagFilter_arr     = isset($params['cTagFilter'])
        ? setzeTagFilter(explode(';', $params['cTagFilter']))
        : null;
    $cParameter_arr     = [
        'kKategorie'             => isset($params['kKategorie']) ? $params['kKategorie'] : null,
        'kHersteller'            => isset($params['kHersteller']) ? $params['kHersteller'] : null,
        'kArtikel'               => isset($params['kArtikel']) ? $params['kArtikel'] : null,
        'kVariKindArtikel'       => isset($params['kVariKindArtikel']) ? $params['kVariKindArtikel'] : null,
        'kSeite'                 => isset($params['kSeite']) ? $params['kSeite'] : null,
        'kSuchanfrage'           => isset($params['kSuchanfrage']) ? $params['kSuchanfrage'] : null,
        'kMerkmalWert'           => isset($params['kMerkmalWert']) ? $params['kMerkmalWert'] : null,
        'kTag'                   => isset($params['kTag']) ? $params['kTag'] : null,
        'kSuchspecial'           => isset($params['kSuchspecial']) ? $params['kSuchspecial'] : null,
        'kKategorieFilter'       => isset($params['kKategorieFilter']) ? $params['kKategorieFilter'] : null,
        'kHerstellerFilter'      => isset($params['kHerstellerFilter']) ? $params['kHerstellerFilter'] : null,
        'nBewertungSterneFilter' => isset($params['nBewertungSterneFilter']) ? $params['nBewertungSterneFilter'] : null,
        'cPreisspannenFilter'    => isset($params['cPreisspannenFilter']) ? $params['cPreisspannenFilter'] : null,
        'kSuchspecialFilter'     => isset($params['kSuchspecialFilter']) ? $params['kSuchspecialFilter'] : null,
        'nSortierung'            => $nSortierung,
        'MerkmalFilter_arr'      => $cMerkmalFilter_arr,
        'TagFilter_arr'          => $cTagFilter_arr,
        'SuchFilter_arr'         => $cSuchFilter_arr,
        'nArtikelProSeite'       => isset($params['nArtikelProSeite']) ? $params['nArtikelProSeite'] : null,
        'cSuche'                 => isset($params['cSuche']) ? $params['cSuche'] : null,
        'seite'                  => isset($params['seite']) ? $params['seite'] : null
    ];
    if ($cParameter_arr['kArtikel'] !== null) {
        $oArtikel_arr = [];
        if (!is_array($cParameter_arr['kArtikel'])) {
            $cParameter_arr['kArtikel'] = [$cParameter_arr['kArtikel']];
        }
        foreach ($cParameter_arr['kArtikel'] as $kArtikel) {
            $article = new Artikel();
            $article->fuelleArtikel($kArtikel, Artikel::getDefaultOptions());
            $oArtikel_arr[] = $article;
        }
    } else {
        // Filter
        $NaviFilter = Shop::buildNaviFilter($cParameter_arr);
        if (isset($NaviFilter->Suche->cSuche) && strlen($NaviFilter->Suche->cSuche) > 0) {
            $NaviFilter->Suche->cSuche     = StringHandler::filterXSS($NaviFilter->Suche->cSuche, 1);
            $NaviFilter->Suche->kSuchCache = bearbeiteSuchCache($NaviFilter);
        }
        // Artikelattribut
        if (isset($cParameter_arr['cArtAttrib']) && strlen($cParameter_arr['cArtAttrib']) > 0) {
            $NaviFilter->ArtikelAttributFilter->cArtAttrib = $cParameter_arr['cArtAttrib'];
        }
        //Filter SQLs Objekte
        $FilterSQL = bauFilterSQL($NaviFilter);
        // Artikelliste
        $oArtikel_arr = gibArtikelKeys($FilterSQL, $nLimit, $NaviFilter, true, null);
    }

    $smarty->assign($cAssign, $oArtikel_arr);

    if (isset($params['bReturn'])) {
        return $oArtikel_arr;
    }
}

Laut dem (alten) Beitrag Eigene Artikellisten erzeugen allerdings, sollte der Code so ausschauen:
Code:
function get_product_list($params, &$smarty) {
    require_once(PFAD_ROOT . PFAD_INCLUDES . "filter_inc.php");

    $nLimit = intval($params['nLimit']);
    $nSortierung = intval($params['nSortierung']);

    $cAssign = "oCustomArtikel_arr";
    if (isset($params['cAssign']) && strlen($params['cAssign']) > 0)
        $cAssign = $params['cAssign'];

    $cMerkmalFilter_arr = setzeMerkmalFilter(explode(";", $params['cMerkmalFilter']));
    $cSuchFilter_arr = setzeSuchFilter(explode(";", $params['cSuchFilter']));
    $cTagFilter_arr = setzeTagFilter(explode(";", $params['cTagFilter']));

    $cParameter_arr = array("kKategorie" => $params['kKategorie'],
        "kHersteller" => $params['kHersteller'],
        "kArtikel" => $params['kArtikel'],
        "kVariKindArtikel" => $params['kVariKindArtikel'],
        "kSeite" => $params['kSeite'],
        "kSuchanfrage" => $params['kSuchanfrage'],
        "kMerkmalWert" => $params['kMerkmalWert'],
        "kTag" => $params['kTag'],
        "kSuchspecial" => $params['kSuchspecial'],
        "kNews" => $params['kNews'],
        "kNewsMonatsUebersicht" => $params['kNewsMonatsUebersicht'],
        "kNewsKategorie" => $params['kNewsKategorie'],
        "kUmfrage" => $params['kUmfrage'],
        "kKategorieFilter" => $params['kKategorieFilter'],
        "kHerstellerFilter" => $params['kHerstellerFilter'],
        "nBewertungSterneFilter" => $params['nBewertungSterneFilter'],
        "cPreisspannenFilter" => $params['cPreisspannenFilter'],
        "kSuchspecialFilter" => $params['kSuchspecialFilter'],
        "nSortierung" => $nSortierung,
        "MerkmalFilter_arr" => $cMerkmalFilter_arr,
        "TagFilter_arr" => $cTagFilter_arr,
        "SuchFilter_arr" => $cSuchFilter_arr,
        "nArtikelProSeite" => $params['nArtikelProSeite'],
        "cSuche" => $params['cSuche'],
        "seite" => $params['seite'],
        "cArtAttrib" => $params['cArtAttrib']);

    // Fix: gibArtikelKeys benutzt Variable
    $_SESSION["Usersortierung"] = $nSortierung;

    // Filter
    $NaviFilter = baueNaviFilter($NaviFilter, $cParameter_arr);

    // Artikelattribut
    if (isset($cParameter_arr['cArtAttrib']) && strlen($cParameter_arr['cArtAttrib']) > 0)
        $NaviFilter->ArtikelAttributFilter->cArtAttrib = $cParameter_arr['cArtAttrib'];

    //Filter SQLs Objekte
    $FilterSQL = bauFilterSQL($NaviFilter);

    // Artikelliste
    $oArtikel_arr = gibArtikelKeys($FilterSQL, $nLimit, $NaviFilter, true);

    $smarty->assign($cAssign, $oArtikel_arr);

    if ($params['bReturn'])
        return $oArtikel_arr;
}

$smarty->register_function("get_product_list", "get_product_list");

Vielleicht liegt es daran, dass die Sortierung bei mir nicht läuft?
Was ich will, ist eine "zufällige Ausgabe" der Artikelliste.
 

MBesancon

Administrator
Mitarbeiter
1. Oktober 2010
2.080
215
Erkelenz
Moin moin,

in meinem 4.06er ist die Funktion nach wie vor bei den Smarty-Funktionen enthalten. Das die Funktion im 4er anders aussieht als im 3er ist normal. Die Funktion wurde an die neuen Gegebenheiten des Shop4 angepasst. Selber getestet habe ich die Funktion noch nciht und kann daher zur Sortierung selbst nicht wirklich eine Aussage treffen. Vielleicht hat das aber schon jemand anderes mal so eingesetzt wie du :).
 
Ähnliche Themen
Titel Forum Antworten Datum
Eigene Felder im Block "Firmen- und E-Mail Einstellungen verwalten" JTL-Wawi 1.10 3
Neu Automatisch generierte Eigene Felder PAYPAL_FUNDING_SOURCE und AmazonPay-Referenz User helfen Usern - Fragen zu JTL-Wawi 0
Neu Eigene Bestellbestätigung User helfen Usern - Fragen zu JTL-Wawi 4
Neu Eigene Felder (Firma) in Mailvorlage User helfen Usern - Fragen zu JTL-Wawi 1
Neu "Eigene Felder" bei Lieferadresse anlegbar JTL-Wawi - Ideen, Lob und Kritik 3
Neu Wie füge ich dem News-System eigene Input-Felder hinzu? Technische Fragen zu Plugins und Templates 3
Eigene Inhalte - Inhalte im Backend nicht sichtbar Einrichtung JTL-Shop5 1
Neu Eigene Felder - Sortierung wird nicht in JTL Shop übernommen - Anzeige im Shop immer unterschiedlich User helfen Usern - Fragen zu JTL-Wawi 0
Neu Lieferzeiten für Dropshipping und eigene Artikel richtig in Shopware 6 bzw. Wawi anzeigen Schnittstellen Import / Export 1
Neu JTL Shop (anderes Template) eigene Felder aus Wawi als TAB im Shop User helfen Usern - Fragen zu JTL-Wawi 12
Neu Eigene Preislisten Vorlage erstellen User helfen Usern - Fragen zu JTL-Wawi 1
Neu Eigene Übersicht im Kundenstammblatt für durchschnittlichen Auftragswert/Röherlös/Zahlungsdauer Eigene Übersichten in der JTL-Wawi 3
Eigene Übersichten verschieben JTL-Wawi 1.9 1
Neu 5.5.2 eigene CSS-Anpassungen Installation / Updates von JTL-Shop 1

Ähnliche Themen