Redirect after adding article to basket

hello guys,

first i installed a oxid esales shop version 4 with latest update.
After i changed the template of the “category” view of one category.

If you select “categoies” you get an overview of all categories.
After clicking on one category you see all articles of this category (with subcategories!)
original you see only articles of this direct attached category.

So all articles of the current category and all subcategories are shown.
No myproblem, if i add one article of them to the basket, the article is successful there but afterwards i only see a white page with header and footer but no articles.
On left side the category of the article direct is selected.
If i click again on the category the articles are shown again and all fine.

Why there are no articles shown direct after adding to basket?

Are the http-referer links after adding to basket maybe to modify? I thought this would be automatically to the page i was before clicking “add to basket”

regards
Michael

I think without knowing what you actually changed or at least a link to the shop it’s hard to tell what’s the problem.

Hallo,

ich glaube wir können den Thread auch auf Deutsch weiter fortführen.

Der Shop ist:

https://www.billigs-dorf.at

Dann gehst du auf Kategorien dann eine Kategorie auswählen und dann einen Artikel in den Warenkorb geben.

Dann passiert das Problem.

lg
Michael

[QUOTE=michael.wulz;156775]
ich glaube wir können den Thread auch auf Deutsch weiter fortführen.
[/QUOTE]

Natürlich. Aber nicht im englischsprachigen Forum. Verschoben :wink:

Gruß

https://www.billigs-dorf.at/

seite hat kein gültiges ssl-zertifikat und erzwingt ssl –> klicken die meisten gleich wieder weg, ich auch :wink:

Hallo

Zertifikat wurde gerade installiert. Jetzt kannst du bitte nachsehen.
Der Shop ist nur noch nicht produkiv und das generieren des Zertifikates hatte gedauert.

lg

Ich habe die Listenansicht der Kategorien so modifiziert, dass wenn ich eine Kategorie auswähle auch alle Unterkategorien angezeigt werden.

https://www.billigs-dorf.at/Fasching-oxid-11

Wenn ich dann hier einen Artikel in den Warenkorb geben möchte, dann kommt immer die Listenansicht - jedoch leer. Ohne einen Artikel.

Als Link im Browser ist folgender:
https://www.billigs-dorf.at/index.php?cl=alist&cnid=9e1cff327c8bbb6b2aae827c2a4b432a&anid=01ba0f69f9b16f7658794bd0b1969910

Warum kommt das so? Ich habe die Funktion welche die Daten für die Listenansicht baut um eine Klasse überlagert die eben mehr Artikel liefert.

Und woher kommt der andere Link? Normalerweise müsste er ja auf den (oberen) 1ten Link wieder zurückspringen?
Es scheint als ob er aus dem “shorturl” Schreibweise aussteigt.

Weiß einer von euch was “cnid” und “anid” sind?
cnid vermute ich die Kategorie?

vielen lieben Dank im Voraus
michael

Hallo Michael,

[QUOTE=michael.wulz;156910]Warum kommt das so? Ich habe die Funktion welche die Daten für die Listenansicht baut um eine Klasse überlagert die eben mehr Artikel liefert.[/QUOTE]

Offenbar hast Du mit Deinem (hoffentlich) Modul etwas falsch gemacht. Dann brauchen wir hier Quellcode.

[QUOTE=michael.wulz;156910]Weiß einer von euch was “cnid” und “anid” sind?[/QUOTE]

Klar: anid ist die Artikel ID und cnid die für die Kategorie.

Gruß

Hallo Leute,

so nun folgendes:
Ich rufe den Shop folgend auf:
http://www.billigs-dorf.at
Startseite > Kategorien
als Beispiel “Fasching” Ausgewählt bekomme ich dann folgende URL:
https://www.billigs-dorf.at/Fasching-oxid-11/?force_sid=7164cf91d345b399d0f668f1ac327385

Damit kommen alle Artikel incl. der Untekategorien angezeigt.
Der einzelne Artiel wird über das “listitem_infogrid.tpl” gerendert.

Dort scheint die Funktion:
[{ $oViewConf->getNavFormParams() }]

die “hidden” inputs zusammenzubauen welche für die Navigation dann verwendet werden.

Wenn ich nun im shop einen Artikel bestelle, als Beispiel:
“Federboa mit Leds” und ich klicke auf “In den Warenkorb” bekomme ich komplett andere Artikel zurück.
Es wird die URL:
https://www.billigs-dorf.at/index.php?cl=alist&anid=01ba0f69f9b16f7658794bd0b1969910&&&force_sid=7164cf91d345b399d0f668f1ac327385
angezeigt.

Es scheint da ja schon was komisch, weil die URL vorher ja die Kategorie “Fasching-oxid-11” in der URL hatte. Warum ist die plötzlich weg?

Wenn ich die URL wie oben wieder mit dem “/Fasching-oxid-11/” einfüge und alles andere bis auf “force_sid” rausnehme wird wieder die korrekte Kategorienansicht angezeigt.

Ich hätte nur leider nicht die Funktion gefunden, die die POST Daten der Form aus dem “listitem_infogrid.tpl” entgegennimmt und oben die URL dann baut. Da scheint was falsch zu sein, bzw. ich noch anpassen zu müssen?

mit der Bitte um einen Tip
vielen lieben Dank
Michael

Hi, du hast einen Fehler in deinem Formular (ich Quote mal nur einen Auszug):


<form method="post" action="https://www.billigs-dorf.at/index.php?force_sid=802c273e8fd401e3494b6cf5f29c658b&" name="tobasketproductList_2">
<input type="hidden" value="29480efe0cd092443cb2daa17c8eaf27" name="cnid">
<input type="hidden" value="alist" name="actcontrol">
<input type="hidden" value="87C5D312" name="stoken">
<input type="hidden" value="0" name="lang">
<input type="hidden" value="0" name="pgNr">
<input type="hidden" value="" name="cnid">
<input type="hidden" value="alist" name="cl">
<input type="hidden" value="tobasket" name="fnc">
<input type="hidden" value="10268ea3da6b48ebc0ad8007be617809" name="aid">
<input type="hidden" value="10268ea3da6b48ebc0ad8007be617809" name="anid">
<input type="hidden" value="24" name="am">

<input type=“hidden” value="" name=“cnid”> <-muss entfernt werden.
Du gibts ihn ja ein paar Zeilen darüber schon die Kategorie id an.
Der zweite Eintrag würde dann cnid wieder mit “” überschreiben…
Somit weiß der Shop dann nicht in welche Kategorie er springen soll.

/Fasching-oxid-11/ <-und wegen der Url würde ich auch nochmal schauen.
Wenn eine Seo Url schon existiert hängt der Shop “-oxid” ran.
Sofern die auch existiert, nummeriert er fortlaufend. Sieht halt blöd für den Kunden aus
und scheinbar hast du dann noch 11 Weitere ("/Fasching-oxid" - “/Fasching-oxid-10”) Urls.

Hallo und guten Morgen,

danke für den Tip!
Ist mir jetzt auch aufgefallen. Ich finde nur nirgends im Code warum die Kategorie
hier zweimal und noch dazu das zweite mal leer überschrieben wird:

<input type="hidden" value="" name="cnid">

Komisch?

Hat einer von euch eine Idee?

danke
lg

Ohne den code zu sehen nein. Vielleicht kannst du den Code schnippsel mal posten so können wir dir besser helfen.

Hallo,

uff. das wird viel :wink:

Was ich angepasst habe ist folgendes:

  • gesucht in welcher View diese Anzeige generiert wird
  • die Funktion die im Smarty Template die Artikel übermittelt im Controller gesucht und dort so angepasst, dass alle Artikel der aktuellen Kategorie incl. aller Unterkategorien angezeigt werden (standard mäßig ja nur die Artikel der aktuellen Gruppe ohne die Artikel der Unterkategorien)

Das wars.
Und das war in der Funktion im Controller irgendwo, finde es jetzt auf die Schnelle nicht mehr. Werde gleich suchen, wenn ich das flott finde poste ich den Code!

lg

Hallo,

jetzt hab ich es gefunden. In der Datei controllers/alist.php

gibt es die Funktion _loadArticles()

   protected function _loadArticles( $oCategory )
    {
        $myConfig = $this->getConfig();

        $iNrofCatArticles = (int) $myConfig->getConfigParam( 'iNrofCatArticles' );
        $iNrofCatArticles = $iNrofCatArticles?$iNrofCatArticles:1;

        // load only articles which we show on screen
        $oArtList = oxNew( 'oxarticlelist' );
        $oArtList->setSqlLimit( $iNrofCatArticles * $this->_getRequestPageNr(), $iNrofCatArticles );
        $oArtList->setCustomSorting( $this->getSortingSql( $this->getSortIdent() ) );

        if ( $oCategory->isPriceCategory() ) {
            $dPriceFrom = $oCategory->oxcategories__oxpricefrom->value;
            $dPriceTo   = $oCategory->oxcategories__oxpriceto->value;

            $this->_iAllArtCnt = $oArtList->loadPriceArticles( $dPriceFrom, $dPriceTo, $oCategory );
        } else {
            $aSessionFilter = oxSession::getVar( 'session_attrfilter' );

            $sActCat = oxConfig::getParameter( 'cnid' );

            $subCatList     = $this->getSubCatList();
            foreach($subCatList as $key => $val) {
                if( $val->oxcategories__oxactive->rawValue == 1 && $val->oxcategories__oxhidden->rawValue == 0 ) {
                    $subCats[]  = array(
                        'id'        => $val->oxcategories__oxid->value,
                        'pid'       => $val->oxcategories__oxparentid->value,
                        'name'      => $val->oxcategories__oxtitle->value,
                    );
                }
            #    $subCatsPlus    = $this->getCatSubcat($val);
            #    
            #    // Array Merge
            #    $subCats        = array_merge($subCats, $subCatsPlus);
            }
            #print_r($subCats);

#            //$this->_iAllArtCnt = $oArtList->loadCategoryArticles( $sActCat, $aSessionFilter );
            $this->_iAllArtCnt = $oArtList->loadCategoryArticles( $sActCat, $aSessionFilter, null, $subCats );
        }

        $this->_iCntPages = round( $this->_iAllArtCnt/$iNrofCatArticles + 0.49 );

        return $oArtList;
    }

Die hab ich wie oben angepasst, sodass die Unterkategorien auch mit berücksichtigt werden.

und in der Datei application/models/oxarticlelist.php


   public function loadCategoryArticles( $sCatId, $aSessionFilter, $iLimit = null, $subCats = array() )
    {
        $sArticleFields = $this->getBaseObject()->getSelectFields();

        $sSelect = $this->_getCategorySelect( $sArticleFields, $sCatId, $aSessionFilter );

        // calc count - we can not use count($this) here as we might have paging enabled
        // #1970C - if any filters are used, we can not use cached category article count
        $iArticleCount = null;
        #if ( $aSessionFilter) {
            $iArticleCount = oxDb::getDb()->getOne( $this->_getCategoryCountSelect( $sCatId, $aSessionFilter, $subCats) );
        #}

        if ($iLimit = (int) $iLimit) {
            $sSelect .= " LIMIT $iLimit";
        }

        if( !empty($subCats) && is_array($subCats) ) {
            $sSearch            = " and oc.oxcatnid = '". $sCatId ."'";
            $sReplaceList       = array();
            $sReplaceList[]     = "oc.oxcatnid = '". $sCatId ."'";
            foreach($subCats as $key => $val) {
                $sReplaceList[] = "oc.oxcatnid = '". $val['id'] ."'";
            }
            $sReplace           = " and ( ". implode(" OR ", $sReplaceList) ." )";
            $sSelect            = str_replace($sSearch, $sReplace, $sSelect);
        }

        $this->selectString( $sSelect );

        if ( $iArticleCount !== null ) {
            return $iArticleCount;
        }

        // this select is FAST so no need to hazzle here with getNrOfArticles()
        return oxRegistry::get("oxUtilsCount")->getCatArticleCount( $sCatId );
    }

so angepasst, dass die Unterkategorien mit dabei sind…

lg

Hi,

hast du auch was an den tpl’s geändert?

P.S.: Wäre es nicht einfacher die Artikel auch in die Übergeordneten Kategorien reinzulegen, anstatt am Code rumzuschrauben? Somit würdest du auch beim Oxid standard bleiben und hast weniger Stress bei Updates, zwecks Überprüfung was sich am Code geändert hat und ggf. in deinem Modul auch angepasst werden muss.

Hallo,

ja auch hier das Template welches mir die Produktliste generiert:
application/views/azure/tpl/widget/product/list.tpl

[{if !$type}]
    [{assign var="type" value="infogrid"}]
[{/if}]
[{if $type=="line" || $type=="infogrid" }]
    [{oxscript include="js/widgets/oxcenterelementonhover.js" priority=10 }]
    [{oxscript add="$( '.pictureBox' ).oxCenterElementOnHover();" }]
[{/if}]

[{oxscript add="$('a.js-external').attr('target', '_blank');"}]
[{if $head}]
    [{if $header eq "light"}]
        <h3 class="lightHead sectionHead">[{$head}]</h3>
    [{else}]
        <h2 class="sectionHead clear">
            <span>[{$head}]</span>
            [{if $rsslink}]
                    <a class="rss js-external" id="[{$rssId}]" href="[{$rsslink.link}]" title="[{$rsslink.title}]"><img src="[{$oViewConf->getImageUrl('rss.png')}]" alt="[{$rsslink.title}]"><span class="FXgradOrange corners glowShadow">[{$rsslink.title}]</span></a>
            [{/if}]
        </h2>
    [{/if}]
[{/if}]
[{if $products|@count gt 0}]
    <ul class="[{$type}]View clear" id="[{$listId}]">
        [{assign var="currency" value=$oView->getActCurrency() }]
        [{foreach from=$products item=_product name=productlist}]
            [{assign var="_sTestId" value=$listId|cat:"_"|cat:$smarty.foreach.productlist.iteration}]
            <li class="productData">
                [{oxid_include_widget cl="oxwArticleBox" _parent=$oView->getClassName() nocookie=1 _navurlparams=$oViewConf->getNavUrlParams() iLinkType=$_product->getLinkType() _object=$_product anid=$_product->getId() sWidgetType=product sListType=listitem_$type iIndex=$_sTestId blDisableToCart=$blDisableToCart isVatIncluded=$oView->isVatIncluded() showMainLink=$showMainLink recommid=$recommid owishid=$owishid toBasketFunction=$toBasketFunction removeFunction=$removeFunction altproduct=$altproduct inlist=$_product->isInList() skipESIforUser=1}]
            </li>
            [{if ($type eq "infogrid" AND ($smarty.foreach.productlist.last) AND ($smarty.foreach.productlist.iteration % 2 != 0 )) }]
                <li class="productData"></li>
            [{/if}]
        [{/foreach}]
    </ul>
[{/if}]

und hier dann das Item:
application/views/azure/tpl/widget/product/listitem_infogrid.tpl

[
(....SNIP....)
    <form name="tobasket[{$iIndex}]" [{if $blShowToBasket}]action="[{ $oViewConf->getSelfActionLink() }]" method="post"[{else}]action="[{$_productLink}]" method="get"[{/if}]>
        [{ $oViewConf->getNavFormParams() }]
        [{ $oViewConf->getHiddenSid() }]
        <input type="hidden" name="pgNr" value="[{ $oView->getActPage() }]">
        [{if $recommid}]
            <input type="hidden" name="recommid" value="[{ $recommid }]">
        [{/if}]
				<input type="hidden" name="cnid" value="">
        [{if $blShowToBasket}]
            [{oxhasrights ident="TOBASKET"}]
                <input type="hidden" name="cl" value="[{ $oViewConf->getTopActiveClassName() }]">
                [{if $owishid}]
                    <input type="hidden" name="owishid" value="[{$owishid}]">
                [{/if}]
                [{if $toBasketFunction}]
                    <input type="hidden" name="fnc" value="[{$toBasketFunction}]">
                [{else}]
                  <input type="hidden" name="fnc" value="tobasket">
                [{/if}]
(....SNIP....)

und da hab ich dann den Eintrag gefunden:

        <input type="hidden" name="cnid" value="">

und entfernt. Dieser ist jetzt im HTML Code der Seite auch nicht mehr zu finden.

Allerdings das Problem besteht weiterhin!

Ok auf den ersten Blick habe ich festgestellt das der Parameter “anid” der angehängt wird an die URL wenn ein Artikel in den Warenkorb gelegt wurde bei dir dafür sorgt das eine Leere Kategorie angezeigt wird, sofern es diese anid auch gibt. Änder ich den “anid” Parameter ab (in irgendeine id die es noch nicht gibt) zeigt er wieder alles richtig an. Hoffe das hilft dir bei der Fehlersuche weiter.

Und nochmal die Frage: Wäre es nicht einfacher einen Artikel auch in die übergeordneten Kategorien zu legen? Sonst solltest du auch die Articelcount Funktionen, die Filterfunktionen usw. anpassen.