product_info um weitere Abfragen und Felder ergänzen

  • Hallo!

    Folgendes:
    Im Moment stelle ich von OsCommerce auf CommerceSEO um.

    Da ich mehrere tausend Artikel über eine CSV-Datei meines Großhändlers einlesen ,und die darin befindlichen zusätzliche Angaben in der Produktbeschreibung darstellen möchte, hatte ich die Tabelle products_description um einige Felder erweitert, wie p_fassung, p_passende_Leuchtmittel usw. Was eben in der CSV des Großhändlers so alles an Daten mitgeliefert wurde.

    Also: In der Tabelle product_description mehrere Felder ergänzt.

    In der product_info.php von OsCommerce habe ich dann die MySQL-Abfrage um diese Felder erweitert und die product_info.php insoweit ergänzt, indem ich die zusätzlichen Felder auf vorhandene Werte abgefragt habe.

    Im Quelltext sah dass dann so aus:

    PHP
    // Erweiterte Produktdetails $product_info_query = tep_db_query("select p.products_id, pd.products_name, pd.products_description, pd.p_fassung, pd.p_leuchtmittel, pd.p_lieferumfang, pd.p_ausschnitt, pd.p_einbautiefe, pd.p_schwenkbereich, pd.p_laenge, pd.p_breite, pd.p_hoehe, pd.p_tiefe, pd.p_durchmesser, pd.p_pendellaenge, pd.p_gewicht, pd.p_spannung, pd.p_max_leistung, pd.p_schutzart, pd.p_material, pd.p_bemerkung_1, pd.p_bemerkung_2, pd.p_bemerkung_3, pd.p_lebensdauer, pd.p_lichtfarbtemperatur, pd.p_lichtstaerke, pd.p_lichtstrom, pd.p_energieeffizienzklasse, pd.p_passendes_leuchtmittel, pd.p_zubehoer_1, pd.p_zubehoer_2, pd.p_zubehoer_3, pd.p_ersatzteile_1, pd.p_ersatzteile_2, pd.p_ersatzteile_3, pd.p_katalogseite, p.products_model, p.products_quantity, p.products_image, p.products_image_med, p.products_image_lrg, p.products_image_sm_1, p.products_image_xl_1, p.products_image_sm_2, p.products_image_xl_2, p.products_image_sm_3, p.products_image_xl_3, p.products_image_sm_4, p.products_image_xl_4, p.products_image_sm_5, p.products_image_xl_5, p.products_image_sm_6, p.products_image_xl_6, pd.products_url, p.products_price, p.products_tax_class_id, p.products_date_added, p.products_date_available, p.manufacturers_id from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pdwhere p.products_status = '1' and p.products_id = '" . (int)$HTTP_GET_VARS['products_id'] . "' and pd.products_id = p.products_id  and pd.language_id = '" . (int)$languages_id . "'");

    und weiter unten dann:

    Dies möchte ich nun in Commerce:SEO ebenfalls nutzen. Nur leider unterscheidet sich die product_info.php von Commerce:SEO deutlich von der OsCommerce-Datei.

    Die Tabelle products_description habe ich bereits um die notwendigen Felder ergänzt und auch die Werte schon eingetragen.

    Nun möchte ich es realisieren, dass ich die Inhalte der erweiterten Tabellenfelder bei der Ansicht eines Artikels, zusätzlich zu dem Inhalt des Feldes products_description ,mit anzeigen kann. Also zusätzliche Informationen zum Produkt, welche nicht im Feld products_description der Tabelle products_description stehen..

    Wo müsste ich dafür den SQL-Query, wie oben gezeigt, bei SEO-:Commerce ergänzen (um schon mal die Variablen und Werte zu haben) und wo müsste ich die oben erwähnte Abfrage auf den inhalt dieser zusätzlichen Felder einfügen, damit mir bei den Artikeln(Produkten) diese zusätzlichen Inhalte, sowohl in der Produktvorschau wie auch in den Produktdetails, angezeigt werden?

    Vielen Dank für Eure Hilfe!

    Liebe Grüße
    Oettin

    3 Mal editiert, zuletzt von Oettin (10. April 2010 um 00:00)

  • Die Feldnamen hast Du ja alle. Die musst Du dem Smarty übergeben.

    Für die Produktübersichtsseiten ist die /includes/classes/product.php zuständig. Im unteren Teil innerhalb der buildDataFunction() werden die Zusammengesetzt. Das SQL ist dann schon da, von allen Feldern.

    Die ruft alle Felder ab und übergibt die so, ein Beispiel:

    PHP
    'FASSUNG' => $array['p_fassung'],

    Das machste mit alle neuen Feldern. Abrufen kannste das dann in der product_listing_v1.html so wie die anderen:

    HTML
    {$module_data.FASSUNG}

    Vorn das $module_data dahinter Deine neue Variable.

    Für die Produkt Detailseite ist die /includes/modules/product_info.php zuständig.

    Dort suchste mal nach dem PRODUCTS_DESCRIPTION. Ist fast das gleiche wie in der products.php:

    PHP
    $info_smarty->assign('PRODUCTS_DESCRIPTION', stripslashes($product->data['products_description']));

    Darunter legst Du für alle Deine Werte 'ne neue Zeile an. Ein Beispiel:

    PHP
    $info_smarty->assign('FASSUNG', stripslashes($product->data['p_fassung']));

    Das rufste dann in der product_info_v1.html so ab:

    HTML
    {$FASSUNG}

    Um die jeweiligen Ausgaben kannste dann noch ganz nach Gefallen in HTML verpacken.

    Einmal editiert, zuletzt von siekiera (11. April 2010 um 21:36)

  • Servus siekiera!

    Danke für Deine Antwort.
    Das meiste hatte ich schoin selbst rausgefunden und bin auch gerade drüber das einzupflegen. Nur habe ich nicht die Lösung über /includes/classes/product.php genommen, was jetzt, wo ich das sehe, sicherlich die bessere Lösung ist, sondern habe in den Dateien includes/modules/product_info.php und root/print_product_info.php (Die Daten sollen ja auch für den Ausdruck zur Verfügung stehen) einmal in der products_info.php

    PHP
    $info_smarty->assign('PRODUCTS_FASSUNG', stripslashes($product->data['p_fassung']));

    und in der print_products_info.php

    PHP
    $smarty->assign('PRODUCTS_FASSUNG', $product_info['p_fassung']);

    ergänzt. In der product_info_v1.html frage ich das dann über

    HTML
    <ul>{if $PRODUCTS_FASSUNG !=''}<li>Fassung: {$PRODUCTS_FASSUNG}</li>{/if}</ul>

    und in der print_product_info.html (zu finden im Template)

    HTML
    {if $PRODUCTS_FASSUNG != ''}
    		<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Fassung: {$PRODUCTS_FASSUNG}<br />
    	{/if}

    ab.


    Spricht etwas dagegen, es so zu lösen? Ich meine im Hinblick auf Erweiterung, Updates etc. ?

    Gruß
    Oettin

    Einmal editiert, zuletzt von Oettin (11. April 2010 um 21:56)

  • Die Feldnamen hast Du ja alle. Die musst Du dem Smarty übergeben.

    Für die Produktübersichtsseiten ist die /includes/classes/product.php zuständig. Im unteren Teil innerhalb der buildDataFunction() werden die Zusammengesetzt. Das SQL ist dann schon da, von allen Feldern.

    Die ruft alle Felder ab und übergibt die so, ein Beispiel:

    PHP
    'FASSUNG' => $array['p_fassung'],

    Das machste mit alle neuen Feldern. Abrufen kannste das dann in der product_listing_v1.html so wie die anderen:

    HTML
    {$module_data.FASSUNG}

    Vorn das $module_data dahinter Deine neue Variable.

    Habe das wie beschrieben getan, die zusätzlichen Inhalte werden jedoch nicht angezeigt.

    Habe in products.php

    PHP
    'PRODUCTS_FASSUNG' => $array['p_fassung'],

    ergänzt und möchte dies in product_listing_v1.html über

    HTML
    {$module_data.PRODUCTS_FASSUNG}

    anzeigen lassen. Alle bisher vorhandenen $module_data.xxxx Variablen werden dargestellt, von den neu hinzugefügten jedoch kein einziges.

    Muss eventuell doch noch woanders eine Änderung vorgenommen werden, dass die neu definierten Variablen auch in der product_listing_v1.html korrekt ausgegeben werden?

    Vielen Dank!

    Grüße
    Oettin

  • Ich würde jetzt mal noch auf einen Cache oder den vollen template_c Ordner tippen. Mach die mal beide leer.

  • Ich würde jetzt mal noch auf einen Cache oder den vollen template_c Ordner tippen. Mach die mal beide leer.



    Habe beide leer gemacht. Leider kein Erfolg.

    Zum Test

    HTML
    {$module_data.PRODUCTS_LEUCHTMITTEL} {$module_data.PRODUCTS_PRICE}

    in der products_listing_v1.html
    Definiert in der includes/classes/product.php:

    PHP
    'PRODUCTS_DESCRIPTION' => $array['products_description'],				// Erweiterung der Produktdetails 12.04.2010 				'PRODUCTS_FASSUNG' => $array['p_fassung'],				'PRODUCTS_LEUCHTMITTEL' => $array['p_leuchtmittel'],

    Angezeigt wird lediglich der Preis und nicht das zugehörige Leuchtmittel des Artikels obwohl ein Eintrag hierzu in der Datenbank vorhanden ist und der Platzhalter korrekt angegeben wurde. Alles andere funktioniert tadelslos - lediglich das product_listing nicht.

    Wo könnte ich noch ansetzen? Gibt es evtl. noch eine Datei, in der die zusätzlichen Felder erst noch definiert werden müssen?
    Eingelesen werden Sie ja über

    PHP
    $product_query = "select * FROM ".TABLE_PRODUCTS." p,
    										                                      ".TABLE_PRODUCTS_DESCRIPTION." pd
    										                                      where p.products_status = '1'
    										                                      and p.products_id = '".$this->pID."'
    										                                      and pd.products_id = p.products_id
    										                                      ".$group_check.$fsk_lock."
    										                                      and pd.language_id = '".(int) $_SESSION['languages_id']."'";

    Liebe Grüße
    Oettin

  • Zum testen:
    Wechsel mal in die /includes/modules/product_listing.php und suche:

    PHP
    $module_content[] = $product->buildDataArray(...);}

    Füge danach ein:

    PHP
    echo '<pre>';
    print_r($module_content);
    echo '</pre>';

    Speichern und im Shop die Produktübersichtsseite aufrufen. Dann kannst Du in der Ausgabe oben sehen, welche Deiner Variablen überhaupt gefüllt sind. Lösche das dann aber wieder ;)

    Aber ich denke mal in der includes/modules/default.php fehlen die Feldabfragen.

    In dieser Datei findest Du 4x $listing_sql. Felder aus der product_description haben ein pd.XXX davor. Ergänze das 4x und dann sollte es gehen. Denke an das Komma dahinter!


  • Aber ich denke mal in der includes/modules/default.php fehlen die Feldabfragen.

    In dieser Datei findest Du 4x $listing_sql. Felder aus der product_description haben ein pd.XXX davor. Ergänze das 4x und dann sollte es gehen. Denke an das Komma dahinter!

    Ja, das war der Grund. Nun funktioniert es.

    Vielen Dank für die Hilfe!

    Liebe Grüße
    Oettin