OsCommerce MS2

››› 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:
  • Admin-side:
    • Modellnummer auf Attribut-Seite hinzufügen
  • speichert Modellnummer in den Aufträgen
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 products_attributes ADD model VARCHAR( 32 ) NOT NULL ;
2
ALTER TABLE orders_products_attributes ADD model VARCHAR( 32 ) NOT NULL ;

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) . '"> &gt;&gt; ';
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
&lt?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