Neu Eigene Smartyfunktion

Ugenmeister

Gut bekanntes Mitglied
28. August 2013
495
11
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.049
184
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
495
11
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.049
184
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
495
11
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.049
184
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
Neu Eigene Felder Checkbox Inhalt bzw. Text bei Mouseover anzeigen JTL-Wawi - Ideen, Lob und Kritik 0
Neu Eigene Seiten mit Plugin erstellen Technische Fragen zu Plugins und Templates 1
Neu Eigene Felder Lieferschein User helfen Usern - Fragen zu JTL-Wawi 1
Neu Eigene Felder (Kunde) in csv-Datei per Ausgabe (Auftrag oder Lieferschein) Druck-/ E-Mail-/ Exportvorlagen in JTL-Wawi 0
Neu Eigene Felder des Auftrages in der Druckvorlage Druck-/ E-Mail-/ Exportvorlagen in JTL-Wawi 2
Eigene Felder für Ebay-Listings verwenden JTL-Wawi 1.8 0
Neu Eigene Felder im Verkauf als Spalten anzeigen User helfen Usern - Fragen zu JTL-Wawi 4
Eigene Felder in alte Vorlagen JTL-Wawi 1.8 5
In Diskussion eigene CustomWorkflows anlegen JTL-Workflows - Ideen, Lob und Kritik 1
Neu Artikel - Sprachen - Alle eigene SEO URL? Smalltalk 1
Neu Barcode Anpassung in Artikeletikett anhand Eigene Felder Druck-/ E-Mail-/ Exportvorlagen in JTL-Wawi 2
Neu Eigene Übersicht Artikel - Zulaufsübersicht - Stückliste Eigene Übersichten in der JTL-Wawi 0
Neu Eigene Übersichten, Artikelhistorie Eigene Übersichten in der JTL-Wawi 4
Neu Sind eigene Felder im Artikel in einer neueren Wawi-Version von Anfang an sichtbar? User helfen Usern - Fragen zu JTL-Wawi 8
Eigene Auswertung JTL-Wawi 1.8 1
Neu Eigene Seiten Priority in der Sitemap ändern Allgemeine Fragen zu JTL-Shop 5

Ähnliche Themen