Neu Eigene Smartyfunktion

Ugenmeister

Gut bekanntes Mitglied
28. August 2013
497
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.056
188
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
497
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.056
188
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
497
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.056
188
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
JT WAWI 1.9.6.1 Eigene Felder werden nicht mehr übertragen, bzw. gelöscht JTL-Wawi 1.9 0
Neu Eigene Kategorien für ebay Angebote oder JTL Wawi Kategorie Baum nutzen Einrichtung und Installation von JTL-eazyAuction 0
Neu List & Label - Eigene SQL-Abfrage als Grundlage für Tabelle im Berichtscontainer? User helfen Usern - Fragen zu JTL-Wawi 10
QR-Code Formel kann nicht in die eigene Vorlage hinzugefügt werden JTL-Wawi 1.9 1
Neu JTL Shop 5.4.0 eigene Inhalte/Seiten hinzufügen nicht möglich JTL-Shop - Fehler und Bugs 5
Neu SQL Eigener Export - Eigene Felder im Auftrag User helfen Usern - Fragen zu JTL-Wawi 7
Neu Eigene Felder aus dem Auftrag in der Packtisch+ / WMS Ausgabe JTL-WMS / JTL-Packtisch+ - Ideen, Lob und Kritik 4
Lieferscheine -versendet / Eigene Übersicht: Kundenkategorie aus den Kundenstammdaten JTL-Wawi 1.8 3
Neu Eigene Felder / Attribute spaltenweise exportieren JTL Ameise - Eigene Exporte 6
Neu Wie kann ich über eigene Felder eine Mehrfachauswahl erstellen? User helfen Usern - Fragen zu JTL-Wawi 4
Neu Eigene Übersichten - Beschaffung - Bestellvorschläge - nur Standardlieferant anzeigen Eigene Übersichten in der JTL-Wawi 4
Neu Eigene Übersicht Kunde QR Code Kundennummer Eigene Übersichten in der JTL-Wawi 4
Eigene USt-IdNr. fehlt in der Auftragsansicht bei Auslandsbestellungen (JTL-Wawi 1.8.12.2) JTL-Wawi 1.8 3
Neu Eigene Alerts im Template ausgeben bzw. hinzufügen Templates für JTL-Shop 0

Ähnliche Themen