Zuletzt angesehene Produkte immer sichtbar

Hallo,

ist es möglich, die “zuletzt angesehenen Produkte” immer anzuzeigen z. B. rechte Spalte im Layout? Bisher ist es ja so das diese nur in der Produktdetailseite angezeigt werden, und die dafür vorgesehene Methode erwertet als Parameter die ID des zuletzt angeguckten Produktes. Daraus schließe ich, dass eine neue Methode her muss, und zwar in einer View die immer aufgerufen wird (oxView?). Das Problem ist aber, dass oxNew (‘oxview’) nie wirklich aufgerufen wird - dass führt dazu dass das Ableiten einer neuen Klasse von oxView keine sinnvolle Vorgehensweise wäre.

Also, wo platziert man eine Methode getRecentlySeenProducts(), die man mit dem $oView Objekt immer zur Verfügung hat???

Okay,

habe folgendes probiert: Ich habe eine neue Klasse angelegt myUBase, diese erbt von oxUBase. Im Adminbereich habe das “erben” noch mal explizit angegeben oxubase => myviews/myubase.

In myUBase habe ich die Methode getRecentlySeenArticles() implementiert

class myUBase extends myUBase_parent {
public function getRecentlySeenArticles() {…}
}

… und in _right.tpl bricht das rendern der Seite an folgender stelle ab

[{ if $oView->getRecentlySeenArticles() }]…[{ /if }]

Jemand eine Idee???

Hallo fetzer,

von welcher Shopversion reden wir hier?

Gruß


Marco Steinhäuser
Community Guide
OXID eSales AG

Hallo Marco,

sorry, es handelt sich um die OXID eShop Community Edition 4.0.1 (OXID_CE_4.0.1.0_15990)

Gruß

f

Hallo fetzer,

eigentlich sollte es laufen, wenn Du die Funktion aus dem Start-Template in die _right.tpl übernimmst. Die Klasse sollte geladen werden.

Gruß


Marco Steinhäuser
Community Guide
OXID eSales AG

Hallo Marco,

welche Funktion aus dem start.tpl meinst du? Im Template start.tpl gibt es keine Funktion die die zuletzt angesehenen Produkte anzeigt.

In details.tpl gibt es [{oxid_include_dynamic file=“dyn/last_seen_products.tpl” type=“lastproducts” aid=$product->oxarticles__oxid->value aparentid=$product->oxarticles__oxparentid->value testid=“LastSeen” }]
aber diese Funktion funktioniert auch nur in details.tpl d.h. wenn ich diese Funktion in _right.tpl platziere, wird nur dann etwas angezeigt, wenn man sich in der Produktdetailansicht befindet.

Deshalb habe ich eine neue Methode geschrieben die auch wunderbar funktioniert, wenn ich sie in oxUBase platziere, nicht jedoch in der abgeleiteten Klasse myUBase.

Hallo fetzer,

die oxUBase ist eine Basisklasse, die möchtest du nicht überschreiben/erweitern :wink: Aber wenn du mir erklärst was du genau dort implementiert hast bzw. möchtests finden wir zusammen sicher nen guten “Platz” für deinen Code indem wir ihn in ein Modul verpacken.

Grüße

Mathias

Hi,

ich möchte dass immer (egal auf was für einer Seite ich bin) die “zuletzt angesehenen Produkte” auf der rechten Seite (_right.tpl) sichtbar sind, so wie z.B. die Kategorien auf der linken Seite immer sichtbar sind.

Meinem Verständnis nach benötige ich dafür eine Methode, die bei jedem Request aufgerufen wird. Eine Methode die z.B. über das $oView Objekt aufgerufen werden kann (z.B. $oView->getRecentlySeenArticles()).

Folgende Zeilen in das Template_right.tpl zu platzieren geht nicht!

[{include file=“dyn/last_seen_products.tpl” type=“lastproducts” aid=$product->oxarticles__oxid->value aparentid=$product->oxarticles__oxparentid->value testid=“LastSeen” }] … geth nicht

[{oxid_include_dynamic file=“dyn/last_seen_products.tpl” type=“lastproducts” aid=$product->oxarticles__oxid->value aparentid=$product->oxarticles__oxparentid->value testid=“LastSeen” }] … geth auch nicht.

Grüße

:f:

MaFi?

Hallo,

ich möchte den alten thread nochmal aufrollen.

hab auch probleme mit dem “zuletzt angesehene produkt”. Hab es zwar in der rechten spalte, doch die css Klasse für die rechte spalte wird nicht verwendet.

im firebug wird die klasse “product” angezeigt. im codegewurstel kann ich den fehler ledier nicht finden :slight_smile:

bei mir steht in der right.tpl

[{oxid_include_dynamic file="dyn/last_seen_products.tpl" type="lastproducts" aid=$product->oxarticles__oxid->value aparentid=$product->oxarticles__oxparentid->value testid="LastSeen" }]

und in der lastseenproducts.tpl:

[{if $aLastProducts && $aLastProducts->count() > 0 }]
  <strong id="test_LastSeenHeader" class="h2">[{ oxmultilang ident="DETAILS_PERSPARAM_LASTSEENPRODUCTS"}]</strong>
 [{foreach from=$aLastProducts item=lastproduct}]
 <div class=box>
    [{include file="inc/product.tpl" product=$lastproduct altproduct=$_lastproducts_aid sListType='' testid="LastSeen_"|cat:$lastproduct->oxarticles__oxid->value}]
  </div>
  [{/foreach}]
[{/if}]

Es wäre toll, wenn mir jmd sagen könnte, wo der Fehler steckt.

Hab auch schon versucht [{include file=“inc/product.tpl”— in [{include file=“inc/rightlist.tpl”---- umzubenennen, doch dann wird nix mehr angezeigt.

einiges wird anscheinend nicht übergeben…

aLastProducts beispielsweise.

Aber ist denn hier schon jemand weiter gekommen? Ich habe schon einiges in den Templates probiert.

[QUOTE=snooklan;19468]einiges wird anscheinend nicht übergeben…

aLastProducts beispielsweise.
[/QUOTE]

Würde mich auch interessieren.

Schade, daß in der Doku nicht mal erläutert ist, wo das aLastProducts-Array überhaupt gefüllt wird.

hab auch noch keine lösung gefunden :frowning:

Falls das noch jemand braucht, hätte ich was.

[QUOTE=leofonic;23706]Falls das noch jemand braucht, hätte ich was.[/QUOTE]

Hi Leo,

bitte bitte her damit!

Schöne Grüße,
Achim

Ist ein kleines Modul mit dem man last_seen_products.tpl auch in anderen Templates als details.tpl includen kann:

<?php
/*
* LASTSEEN PRODUCTS ANYWHERE
* Module to include last_seen_products.tpl anywhere
* Filename: modules/mylastseen.php
* Add this line to System/Modules: oxcmp_utils => mylastseen
*/

class mylastseen extends mylastseen_parent{
    public function render()
    {
        if (!$this->_aLastProducts){
            $mySession = $this->getSession();
            $aHistoryArticles = $mySession->getVar('aHistoryArticles');
            if (is_array($aHistoryArticles)){
                $aHistoryArticles = array_values($aHistoryArticles);
                if (count($aHistoryArticles) > 4) {
                    array_shift($aHistoryArticles);
                }
                $oHistoryArtList = oxNew( 'oxarticlelist' );
                $oHistoryArtList->loadIds($aHistoryArticles);
                $this->_oParent->_aViewData['aLastProducts'] = $oHistoryArtList;
            }
        }
        parent::render();
    }
}
?>

[QUOTE=leofonic;23866]Ist ein kleines Modul mit dem man last_seen_products.tpl auch in anderen Templates als details.tpl includen kann:
[/QUOTE]

Super - herzlichen Dank, ich schulde Dir 2 Bier!

Achim

[QUOTE=oxal;23868]ich schulde Dir 2 Bier!
[/QUOTE]
Ich komme drauf zurück! :wink:
Funktioniert es wie es soll?

[QUOTE=leofonic;23869]Ich komme drauf zurück! :wink:
[/QUOTE]

Gerne, vielleicht ja bei der Lahn-Party.

[QUOTE=leofonic;23869]Funktioniert es wie es soll?[/QUOTE]

Ja, Funktion hundertprozentig 1a superduper.

Aber folgender Fehler wird ausgegeben:

“Warning: Cannot modify header information - headers already sent by (output started at C:\xampplite\htdocs\modules\mylastseen.php:28) in C:\xampplite\htdocs\views\oxshopcontrol.php on line 313”

Ich vermute, dass der im Produktivmodus unterbleibt, wäre aber trotzdem schön, den zu vermeiden, oder?

Die Antwortzeit des Servers verlängert sich um 0,1 bis 0,3 Sekunden, das ist zu verschmerzen.

Schöne Grüße und Danke!
Achim

Mal gucken, München ist weit weg von Weilburg.
Um den Fehler wegzubekommen musst du einfach aus mylastseen.php alle Leerzeichen und Zeilenumbrüche außerhalb der PHP-Tags (also ganz am Anfang oder ganz am Ende) entfernen.