››› Erweiterung für OsCommerce MS2
Diese Erweiterung muss im OsCommerce MS2 eingepflegt werden, damit Bestellungen mit Artikeloptionen korrekt mit der Artikelnummer in die Warenwirtschaft übertragen werden können.
Unbedingt vor dem Einbau der Erweiterung eine Datenbanksicherung und
eine Sicherung der Dateien machen !!
Product Attribute Model version: 8/9/2006
Coder: Onno Steenbergen
Site: http://www.steenbe.nl
Contact: (email) owhno@steenbe.nl
Translated: Ralf Merz
Hier sind die Zeilennummern von einer modifizierten Version der Datei angegeben.
In dieser Version ist das Plugin “QTPro” und weitere Module installiert und wurde eigener Code hinzugefügt.
Das Plugin QTPro wird empfohlen.
Dieser Beitrag erlaubt nur die Speicherung der Modellnummer.
Wenn Sie diese verwenden möchten, müssen Sie Ihren eigenen Code schreiben.
Ein Beispiel ist am Dateiende angegeben (bei EOF): Add model to packingslip.
Erneuerungen: |
|
Schwierigkeit: | Mittel (Bitte erstellen Sie vorher ein Backup. Es wurde noch nicht auf anderen OsCommerce Installationen getestet) |
Datenbank Änderungen: | 2 (einfache) |
Führen Sie bitte folgende Schritte durch:
Schritt 1:
Backup: Bitte erstellen Sie ein vollständiges Backup von Ihrem Webshop.
Schritt 2:
Führen Sie folgende SQL-query aus:
1
|
ALTER TABLE |
2
|
ALTER TABLE |
Schritt 3:
Bearbeiten Sie die Datei “catalog/admin/products_attributes.php”
Suchen Sie die folgende Zeilen…
79
|
case 'add_product_attributes': |
80
|
$products_id = tep_db_prepare_input($HTTP_POST_VARS['products_id']); |
… und ergänzen Sie diese danach um folgende Code-Zeilen:
81
|
#Begin model |
82
|
$model = tep_db_prepare_input($HTTP_POST_VARS['model']); |
83
|
#End model |
Suchen Sie die folgende Zeile…
87
|
$price_prefix = tep_db_prepare_input($HTTP_POST_VARS['price_prefix']); |
… und ergänzen Sie diese danach um folgende Code-Zeilen:
88
|
#Begin model |
89
|
tep_db_query("insert into " . TABLE_PRODUCTS_ATTRIBUTES . " values ('', '" . (int)$products_id . "', '" . (int)$options_id . "', '" . (int)$values_id . "', '" . tep_db_input($value_price) . "', '" . tep_db_input($price_prefix) . "', '" . tep_db_input($model). "')"); |
90
|
#End model |
Suchen Sie die folgende Zeilen…
139
|
case 'update_product_attribute': |
140
|
$products_id = tep_db_prepare_input($HTTP_POST_VARS['products_id']); |
… und ergänzen Sie diese danach um folgende Code-Zeilen:
141
|
#Begin model |
142
|
$model = tep_db_prepare_input($HTTP_POST_VARS['model']); |
143
|
#End model |
Suchen Sie die folgende Zeile…
143
|
$attribute_id = tep_db_prepare_input($HTTP_POST_VARS['attribute_id']); |
… und ergänzen Sie diese danach um folgende Code-Zeilen:
144
|
#Begin model |
145
|
tep_db_query("update " . TABLE_PRODUCTS_ATTRIBUTES . " set products_id = '" . (int)$products_id . "', options_id = '" . (int)$options_id . "', options_values_id = '" . (int)$values_id . "', options_values_price = '" . tep_db_input($value_price) . "', price_prefix = '" . tep_db_input($price_prefix) . "', model = '" . tep_db_input($model) . "' where products_attributes_id = '" . (int)$attribute_id . "'"); |
146
|
#End model |
Suchen Sie die folgende Zeilen…
763
|
// Next |
764
|
if ($attribute_page != $num_pages) { |
765
|
echo '<a href="' . tep_href_link(FILENAME_PRODUCTS_ATTRIBUTES, 'attribute_page=' . $next_attribute_page) . '"> >> '; |
766
|
} |
767
|
?> |
768
|
</td> |
769
|
</tr> |
770
|
<tr> |
… und ergänzen Sie diese danach um folgende Code-Zeilen:
771
|
<?php #Begin Model : colspan =7 ?> |
772
|
<td colspan="8"><?php echo tep_black_line(); ?></td> |
773
|
<?php #End Model ?> |
Suchen Sie die folgende Zeile…
777
|
<td class="dataTableHeadingContent"> <?php echo TABLE_HEADING_PRODUCT; ?> |
… und ergänzen Sie diese danach um folgende Code-Zeilen:
778
|
<?php #Begin Model ?> |
779
|
<td class="dataTableHeadingContent"> <?php echo TABLE_HEADING_MODEL; ?> </td> |
780
|
<?php #End Model ?> |
Suchen Sie die folgende Zeilen…
785
|
<td class="dataTableHeadingContent" align="center"> <?php echo TABLE_HEADING_ACTION; ?> </td> |
786
|
</tr> |
787
|
<tr> |
… und ergänzen Sie diese danach um folgende Code-Zeilen:
788
|
<?php #Begin Model : colspan =7 ?> |
789
|
<td colspan="8"><?php echo tep_black_line(); ?></td> |
790
|
<?php #End Model ?> |
Suchen Sie die folgende Zeilen…
813
|
echo "\n" . '<option name="' . $products_values['products_name'] . '" value="' . $products_values['products_id'] . '">' . $products_values['products_name'] . '</option>'; |
814
|
} |
815
|
} |
816
|
?$gt; |
817
|
</select> </td> |
818
|
<td class="smallText"> <select name="options_id"> |
819
|
<?php |
820
|
$options = tep_db_query("select * from " . TABLE_PRODUCTS_OPTIONS . " where language_id = '" . $languages_id . "' order by products_options_name"); |
… und ersetzen Sie diese danach um folgende Code-Zeilen:
813
|
echo "\n" . '<option name="' . $products_values['products_name'] . '" value="' . $products_values['products_id'] . '">' . $products_values['products_name'] . '</option>'; |
814
|
} |
815
|
} |
816
|
?$gt; |
817
|
</select> </td> |
818
|
<?php #Begin Model ?> |
819
|
<td class="smallText"> <input type="text" name="model" value="<?php echo $attributes_values['model']; ?>"> </td> |
820
|
<?php #End Model ?> |
821
|
<td class="smallText"> <select name="options_id"> |
822
|
<?php |
823
|
$options = tep_db_query("select * from " . TABLE_PRODUCTS_OPTIONS . " where language_id = '" . $languages_id . "' order by products_options_name"); |
Suchen Sie die folgende Zeilen…
882
|
} elseif (($action == 'delete_product_attribute') && ($HTTP_GET_VARS['attribute_id'] == $attributes_values['products_attributes_id'])) { |
883
|
?> |
884
|
<td class="smallText"> <?php echo $attributes_values["products_attributes_id"]; ?></b> </td> |
885
|
<td class="smallText"> <b><?php echo $products_name_only; ?></b> </td> |
… und ergänzen Sie diese danach um folgende Code-Zeilen:
886
|
<?php #Begin Model : colspan =7 ?> |
887
|
<td class="smallText"> <b><?php echo $attributes_values["model"]; ?></b> </td> |
888
|
<?php #End Model ?> |
Suchen Sie die folgende Zeilen…
894
|
<?php |
895
|
} else {; |
896
|
?> |
897
|
<td class="smallText"> <?php echo $attributes_values["products_attributes_id"]; ?> </td> |
898
|
<td class="smallText"> <?php echo $products_name_only; ?> </td> |
… und ergänzen Sie diese danach um folgende Code-Zeilen:
899
|
<?php #Begin Model : colspan =7 ?> |
900
|
<td class="smallText"> <?php echo $attributes_values["model"]; ?></td> |
901
|
<?php #End Model ?> |
Suchen Sie die folgende Zeilen…
924
|
<?php |
925
|
$products = tep_db_query("select p.products_id, pd.products_name from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd where pd.products_id = p.products_id and pd.language_id = '" . $languages_id . "' order by pd.products_name"); |
926
|
while ($products_values = tep_db_fetch_array($products)) { |
927
|
echo '<option name="' . $products_values['products_name'] . '" value="' . $products_values['products_id'] . '">' . $products_values['products_name'] . '</option>'; |
928
|
} |
929
|
?> |
930
|
</select> </t> |
… und ergänzen Sie diese danach um folgende Code-Zeilen:
931
|
<?php #Begin Model ?> |
932
|
<td class="smallText"> <input type="text" name="model"> </td> |
933
|
<?php #End Model ?> |
Schritt 4a:
catalog/include/classes/order.php
Suchen Sie die folgende Zeilen…
137
|
$attributes_query = tep_db_query("select products_options, products_options_values, options_values_price, price_prefix from " . TABLE_ORDERS_PRODUCTS_ATTRIBUTES . " where orders_id = '" . (int)$order_id . "' and orders_products_id = '" . (int)$orders_products['orders_products_id'] . "'"); |
… und ersetzen Sie diese danach um folgende Code-Zeilen:
137
|
#Begin Model |
138
|
$attributes_query = tep_db_query("select products_options, products_options_values, options_values_price, price_prefix, model from " . TABLE_ORDERS_PRODUCTS_ATTRIBUTES . " where orders_id = '" . (int)$order_id . "' and orders_products_id = '" . (int)$orders_products['orders_products_id'] . "'"); |
139
|
#End Model |
Suchen Sie die folgende Zeilen…
143
|
'price' => $attributes['options_values_price']); |
… und ersetzen Sie diese danach um folgende Code-Zeilen:
143
|
#Begin Model |
144
|
'price' => $attributes['options_values_price'], |
145
|
'model' => $attributes['model']); |
146
|
#End Model |
Schritt 4b
catalog/admin/include/classes/order.php
Suchen Sie die folgende Zeilen…
97
|
$attributes_query = tep_db_query("select products_options, products_options_values, options_values_price, price_prefix from " . TABLE_ORDERS_PRODUCTS_ATTRIBUTES . " where orders_id = '" . (int)$order_id . "' and orders_products_id = '" . (int)$orders_products['orders_products_id'] . "'"); |
… und ersetzen Sie diese danach um folgende Code-Zeilen:
97
|
#Begin Model |
98
|
$attributes_query = tep_db_query("select products_options, products_options_values, options_values_price, price_prefix, model from " . TABLE_ORDERS_PRODUCTS_ATTRIBUTES . " where orders_id = '" . (int)$order_id . "' and orders_products_id = '" . (int)$orders_products['orders_products_id'] . "'"); |
99
|
#End Model |
Suchen Sie die folgende Zeilen…
103
|
'price' => $attributes['options_values_price']); |
… und ersetzen Sie diese danach um folgende Code-Zeilen:
103
|
#Begin Model |
104
|
'price' => $attributes['options_values_price'], |
105
|
'model' => $attributes['model']); |
106
|
#End Model |
Schritt 5:
catalog/checkout_process.php
On original file around line 180
Suchen Sie die folgende Zeilen…
286
|
$attributes_query = "select popt.products_options_name, poval.products_options_values_name, pa.options_values_price, pa.price_prefix, pad.products_attributes_maxdays, pad.products_attributes_maxcount , pad.products_attributes_filename |
… und ersetzen Sie diese danach um folgende Code-Zeilen:
286
|
#Begin Model |
287
|
$attributes_query = "select popt.products_options_name, poval.products_options_values_name, pa.options_values_price, pa.price_prefix, pa.model, pad.products_attributes_maxdays, pad.products_attributes_maxcount , pad.products_attributes_filename |
288
|
#End Model |
Suchen Sie die folgende Zeilen…
299
|
$attributes = tep_db_query("select popt.products_options_name, poval.products_options_values_name, pa.options_values_price, pa.price_prefix from " . TABLE_PRODUCTS_OPTIONS . " popt, " . TABLE_PRODUCTS_OPTIONS_VALUES . " poval, " . TABLE_PRODUCTS_ATTRIBUTES . " pa where pa.products_id = '" . $order->products[$i]['id'] . "' and pa.options_id = '" . $order->products[$i]['attributes'][$j]['option_id'] . "' and pa.options_id = popt.products_options_id and pa.options_values_id = '" . $order->products[$i]['attributes'][$j]['value_id'] . "' and pa.options_values_id = poval.products_options_values_id and popt.language_id = '" . $languages_id . "' and poval.language_id = '" . $languages_id . "'"); |
… und ersetzen Sie diese danach um folgende Code-Zeilen:
299
|
#Begin Model |
300
|
$attributes = tep_db_query("select popt.products_options_name, poval.products_options_values_name, pa.options_values_price, pa.price_prefix, pa.model from " . TABLE_PRODUCTS_OPTIONS . " popt, " . TABLE_PRODUCTS_OPTIONS_VALUES . " poval, " . TABLE_PRODUCTS_ATTRIBUTES . " pa where pa.products_id = '" . $order->products[$i]['id'] . "' and pa.options_id = '" . $order->products[$i]['attributes'][$j]['option_id'] . "' and pa.options_id = popt.products_options_id and pa.options_values_id = '" . $order->products[$i]['attributes'][$j]['value_id'] . "' and pa.options_values_id = poval.products_options_values_id and popt.language_id = '" . $languages_id . "' and poval.language_id = '" . $languages_id . "'"); |
301
|
#End Model |
Suchen Sie die folgende Zeilen…
305
|
'price_prefix' => $attributes_values['price_prefix']); |
… und ersetzen Sie diese danach um folgende Code-Zeilen:
305
|
#Begin Model |
306
|
'price_prefix' => $attributes_values['price_prefix'], |
307
|
'model' => $attributes_values['model']); |
308
|
#End Model |
Jetzt können Sie Ihre Anpassungen testen, indem Sie im Administrationsbereich in die Sektion Attribute gehen.
Dort sehen Sie eine Spalte model.
Ergänzen Sie diese Spalte um die entsprechenden Informationen.
Gehen Sie jetzt in Ihr Webshop-Frontend und bestellen Sie den Artikel mit den neuen Attributsinformationen.
Danach ergänzen Sie in der Datei catalog/admin/invoice.php nach dem folgenden Code…
1
|
include(DIR_WS_CLASSES . 'order.php'); |
2
|
$order = new order($oID); |
… um folgende Code-Zeilen:
3
|
#Begin Model TEST |
4
|
print "<pre>"; |
5
|
print_r($order); |
6
|
print "</pre>"; |
7
|
#End Model TEST |
Wenn Sie sich die Rechnung dieses Test-Auftrages anzeigen lassen, sollten Sie eine Ausgabe aller Bestelldaten in einem Array wie in dem folgenden Beispiel sehen.
[products] => Array(
[0] => Array
(
[qty] => 1
[name] => Test
[model] => 1234
[products_id] => 28
[manufacturers_name] =>
[tax] => 0.0000
[price] => 0.0000
[final_price] => 0.0000
[attributes] => Array
(
[0] => Array
(
[option] => Size
[value] => 4
[prefix] => +
[price] => 0.0000
[model] => 142467
Wenn [model] fehlt, überprüfen Sie bitte Schritt 4 (order class).
Ist der Wert von [model] leer, überprüfen Sie bitte den Schritt 4 und Schritt 5 (check order class / checkout process).
Programmierbeispiel:
Suchen Sie in der Datei catalog/admin/packingslip.php die folgenden Zeilen…
100
|
if (isset($order->products[$i]['attributes']) && (sizeof($order->products[$i]['attributes']) > 0)) { |
101
|
for ($j=0, $k=sizeof($order->products[$i]['attributes']); $j<$k; $j++) { |
102
|
echo '<br><small> <i> - ' . $order->products[$i]['attributes'][$j]['option'] . ': ' . $order->products[$i]['attributes'][$j]['value']; |
103
|
echo '</i></small></nobr>'; |
104
|
} |
105
|
} |
… und ergänzen Sie diese danach um folgende Code-Zeilen:
106
|
if(empty($order->products[$i]['manufacturers_name'])){ |
107
|
$manufacturer = "Model : "; |
108
|
} else { |
109
|
$manufacturer = $order->products[$i]['manufacturers_name'] . " > "; |
110
|
} |
111
|
|
112
|
$model = ""; |
113
|
if(empty($order->products[$i]['model']) && empty($order->products[$i]['attributes']['model'])){ |
114
|
$model .= "Not Found<br>"; |
115
|
}else{ |
116
|
if(!empty($order->products[$i]['model'])){ |
117
|
$model .= $order->products[$i]['model'] . "<br>\n"; |
118
|
|
119
|
for ($j=0, $k=sizeof($order->products[$i]['attributes']); $j<$k; $j++) { |
120
|
if(!empty($order->products[$i]['attributes'][$j]['model'])){ |
121
|
$model .= ' - ' . $order->products[$i]['attributes'][$j]['model'] . "<br>\n"; |
122
|
} |
123
|
} |
124
|
}else{ |
125
|
for ($j=0, $k=sizeof($order->products[$i]['attributes']); $j<$k; $j++) { |
126
|
$model .= '- ' . $order->products[$i]['attributes'][$j]['model'] . "<br>\n"; |
127
|
} |
128
|
|
129
|
} |
130
|
} |
Suchen Sie die folgende Zeilen…
136
|
echo ' </td>' . &qout;\n&qout; . |
137
|
' <td class=&qout;dataTableContent&qout; valign=&qout;top&qout;>' . $order->products[$i]['model'] . '</td>' . &qout;\n&qout; . |
138
|
' </tr>' . &qout;\n&qout;; |
… und ersetzen Sie diese danach um folgende Code-Zeilen:
136
|
echo ' </td>' . &qout;\n&qout; . |
137
|
' <td class=&qout;dataTableContent&qout; valign=&qout;top&qout;>' . $manufacturer .$model . '</td>' . &qout;\n&qout; . |
138
|
' </tr>' . &qout;\n&qout;; |
Originalanleitung zum Dowenload: product_attribute_model.zip