Modulshop - Eine große Auswahl an neuen und hilfreichen Modulen für die modified eCommerce Shopsoftware
Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: Shop 1.06 print_product_info.php bringt 404 wenn Artikel nicht zu finden

    FS72

    • Mitglied
    • Beiträge: 133
    Hallo zusammen,

    ich bin auf das Problem gestoßen, dass die Seite nicht aufgerufen werden kann, wenn es das Produkt nicht (mehr) gibt.
    Es wird ein 404 Error zurück geliefert. Aber eigentlich sollte doch die Suche angezeigt werden oder?
    Ich bekomme auch den Fehler in einem frisch installierten Shop mit Standard Template.

    Ist das schon bekannt?

    VG Frank

    Linkback: https://www.modified-shop.org/forum/index.php?topic=26378.0

    FS72

    • Mitglied
    • Beiträge: 133
    Hallo, könnte das bitte mal jemand testen, ob das auch bei ihm so ist.
    Danke.

    VG Frank

    Clever

    • Schreiberling
    • Beiträge: 257
    http://www.gunnart.de/tipps-und-tricks/doppelten-content-vermeiden-productredirect-fuer-xtcommerce/

    Die Lösung …

    … ist eigentlich ganz einfach. Man stellt fest, ob man sich auf einer Produkt-Detail-Seite befindet oder nicht. Wenn ja, ermittelt man den “gewünschten”, aktuellen Produkt-Link. Stimmt dieser nicht mit den entsprechenden Teilen aus $_SERVER['REQUEST_URI'] überein, leitet man via 301er (”Moved Permanently”) zur neuen Adresse um.

    Auf diese Weise teilt man den Suchmaschinen mit, dass sie in Zukunft bitteschön den neuen Link zu beachten haben, und doppelter Content kann für Artikel nicht mehr auftauchen.

    gunnart_productRedirect

    Ich hab für diese Problematik eine kleine Datei geschrieben, der Einbau kann komplett im Template stattfinden - Änderungen an System-Dateien sind nicht erforderlich.

        Dieses » ZIP-Archiv herunterladen und entpacken
        Dieses » ZIP-Archiv (Update!)
        Dieses » ZIP-Archiv (BugFix!) herunterladen und entpacken
        Die Datei “gunnart_productRedirect.inc.php” in den Ordner “source/inc” des aktiven Templates hochladen
        In der “boxes.php” einbinden …
        require_once (DIR_FS_CATALOG . 'templates/' . CURRENT_TEMPLATE . '/source/inc/gunnart_productRedirect.inc.php'); … am besten gleich ganz an den Anfang setzen
        … und fertig!

    FS72

    • Mitglied
    • Beiträge: 133
    Danke für Deine Antwort.

    Allerdings geht es mit nicht um die product_info.php sondern um die print_product_info.php.

    Mit Shopmitteln muss das doch auch funktionieren! Hier liegt evtl. ein Bug vor.
    Bitte testet mal bei euch die Druckfunktion, wenn der Artikel nicht mehr existent ist.

    VG Frank

    FS72

    • Mitglied
    • Beiträge: 133

    Hansi73

    • Frisch an Board
    • Beiträge: 84
    Hallo,

    dieser Fehler wenn ein Produkt nicht mehr vorhanden ist störte mich auch. Ich habe mir nun damit beholfen zumindest eine Umleitung einzubauen. Den ERROR_HANDLER habe ich nicht zum Laufen bekommen.

    in print_product_info.php etwa Zeile 38:
    Code: PHP  [Auswählen]
    if (!is_object($product) || !$product->isProduct()) {
      // product not found in database
      header("Location: ".HTTP_SERVER.DIR_WS_CATALOG."product_info.php?products_id=".$_GET['products_id']."");
      //$error = TEXT_PRODUCT_NOT_FOUND;
      //include (DIR_WS_MODULES.FILENAME_ERROR_HANDLER);

    Vielleicht hat jemand mittlerweile doch eine Lösung gefunden und der ERROR_HANDLER funktioniert wie auf allen anderen Seiten.

    vr

    • modified Team
    • Beiträge: 2.664
    Hallo Hansi73,

    hatte den selben Effekt in einem 1.06er shop auch, trotz canonical link im template. Im access.log des Webservers stellte sich raus, dass ein Googlebot direkt, durch ein

    GET /print_product_info.php?products_id=4711

    die print-Beschreibung eines Artikels anforderte, der auf inaktiv stand. print_product_info.php, speziell der errorhandler braucht aber etwas Kontext, u.a. eine übergeordnete $smarty-Variable, und die ist in diesem Fall nicht da. Deshalb ist Deine Fährte schon richtig. Ich hab das in einer Installation so gelöst:

    Code: PHP  [Auswählen]
    if (!is_object($product) || !$product->isProduct()) {
      // product not found in database
      // if this file was called directly - by a bot - redirect to product_info, since environment is incomplete
      if (!isset($smarty)) {
        xtc_redirect(xtc_href_link(FILENAME_PRODUCT_INFO, 'products_id=' . (int)$_GET['products_id'], 'NONSSL'));
      } else {
        $error = TEXT_PRODUCT_NOT_FOUND;
        include (DIR_WS_MODULES.FILENAME_ERROR_HANDLER);
      }  
    } else {
      // defaults
     

    im php-error.log steht in solchen Fällen nur sowas:

    PHP Fatal error:  Call to undefined function xtc_hide_session_id() in /var/www/shop/includes/modules/error_handler.php on line ...

    und man legt sich die Karten, wieso das include fehlt. Den Zusammenhang gibts dann über Vergleich des Zeitstempels des Eintrags mit dem access.log.

    Viele Grüße, Volker