Monthly Archives: April 2014

Neue Seiten in einen osCommerce 2.2 – Shop einbauen

Da ich die letzten Jahre nur mit Magento-Shops rumgespielt habe, wollte ich kürzlich mal wieder meinen altehrwürdigen osCommerce 2.2 etwas aufhübschen und Ladezeitoptimieren.

Da alte Gäule nicht nur kotzen, sondern auch dazulernen können, habe ich mal mein mittlerweile angesammeltes Wissen in eine 7 Jahre alte osC 2.2RC-Version einfließen lassen, mit Augenmerk auf schnellere Ladezeiten und weniger MySQL-Abfragen.

Dabei stieß ich auf das kleine Problem, das es zwar Module zum Anlegen von Extraseiten gibt (z.B. dieses hier: Extrapages), diese sich aber kaum in meinen heftig modifizierten Shop einbauen ließen; zudem wurde der Shop spürbar langsamer, wie ich auf einer identischen Testinstallation feststellen mußte.

 

Wie werden manuell neue Seiten in einen osCommerce eingefügt?

 

An der Ordnerstruktur hat sich auch bei neueren osC-Version im Grunde nichts geändert:

Ordnerstruktur

Ordnerstruktur

Falls Du den Shop direkt in der root installiert hast, wird evtl. der Ordner catalog nicht vorhanden sein.

Ich habe mir nun einfach eine Seite gesucht, die ich kopieren konnte und nahm conditions.php. Dort stehen im allgemeinen die AGB in deutschen Shops.

Die Datei conditions.php finden wir unter /catalog/conditions.php.

Sehen wir uns diese Datei mal an:

Select Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
<?php
/*
$Id: conditions.php 1739 2007-12-20 00:52:16Z hpdl $

osCommerce, Open Source E-Commerce Solutions

http://www.oscommerce.com

Copyright (c) 2003 osCommerce

Released under the GNU General Public License
*/

require('includes/application_top.php');

require(DIR_WS_LANGUAGES . $language . '/' . FILENAME_CONDITIONS);

$breadcrumb->add(NAVBAR_TITLE, tep_href_link(FILENAME_CONDITIONS));
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html <?php echo HTML_PARAMS; ?>>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=<?php echo CHARSET; ?>">
<title><?php echo TITLE; ?></title>
<base href="<?php echo (($request_type == 'SSL') ? HTTPS_SERVER : HTTP_SERVER) . DIR_WS_CATALOG; ?>">
<link rel="stylesheet" type="text/css" async href="http://css.seiden-handel.de/stylesheet.css">
</head>
<body marginwidth="0" marginheight="0" topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0">
<!-- header //-->
<?php require(DIR_WS_INCLUDES . 'header.php'); ?>
<!-- header_eof //-->

<!-- body //-->
<table border="0" width="100%" cellspacing="3" cellpadding="3">
<tr>
<td width="<?php echo BOX_WIDTH; ?>" valign="top"><table border="0" width="<?php echo BOX_WIDTH; ?>" cellspacing="0" cellpadding="2">
<!-- left_navigation //-->
<?php require(DIR_WS_INCLUDES . 'column_left.php'); ?>
<!-- left_navigation_eof //-->
</table></td>
<!-- body_text //-->
<td width="100%" valign="top"><table border="0" width="100%" cellspacing="0" cellpadding="0">
<tr>
<td><table border="0" width="100%" cellspacing="0" cellpadding="0">
<tr>
<td><?php echo HEADING_TITLE; ?></td>
</tr>
</table></td>
</tr>
<tr>
<td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
</tr>
<tr>
<td><?php echo TEXT_INFORMATION; ?></td>
</tr>
<tr>
<td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
</tr>
</table></td>
<!-- body_text_eof //-->
<td width="<?php echo BOX_WIDTH; ?>" valign="top"><table border="0" width="<?php echo BOX_WIDTH; ?>" cellspacing="0" cellpadding="2">
<!-- right_navigation //-->
<?php require(DIR_WS_INCLUDES . 'column_right.php'); ?>
<!-- right_navigation_eof //-->
</table></td>
</tr>
</table>
<!-- body_eof //-->

<!-- footer //-->
<?php require(DIR_WS_INCLUDES . 'footer.php'); ?>
<!-- footer_eof //-->
<br>
</body>
</html>
<?php require(DIR_WS_INCLUDES . 'application_bottom.php'); ?>

Da ich diese Datei schon modifiziert habe, stimmen meine und Eure Zeilenangaben wahrscheinlich nicht überein.

Wichtig für uns sind die Zeilen 15 und 17

Select Code
1
2
3
require(DIR_WS_LANGUAGES . $language . '/' . FILENAME_CONDITIONS);

$breadcrumb-&gt;add(NAVBAR_TITLE, tep_href_link(FILENAME_CONDITIONS));

sowie Zeile 53

Select Code
1
<td><?php echo TEXT_INFORMATION; ?></td>

In Zeile 15 wird die Datei conditions.php in der jeweiligen Sprache includiert. In dieser Datei steht der Inhalt, der Content, der Seite catalog/conditions.php.

Darunter wird der Link zu catalog/conditions.php in den breadcrumbs definiert.

In Zeile 53 wird der eigentliche Content includiert.

 

Suchen wir also die Datei mit dem Text: catalog/includes/languages/german/conditions.php

Dassieht bei mir so aus:

Select Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
/*
$Id: conditions.php 1739 2007-12-20 00:52:16Z hpdl $

osCommerce, Open Source E-Commerce Solutions

http://www.oscommerce.com

Copyright (c) 2002 osCommerce

Released under the GNU General Public License
*/

define('NAVBAR_TITLE', 'Allgemeine Gesch&auml;ftsbedingungen');
define('HEADING_TITLE', 'Allgemeine Gesch&auml;ftsbedingungen');

define('TEXT_INFORMATION', 'Alle unsere Preise enthalten die gesetzliche Mehrwertsteuer der Republik Litauen.<br /><br />

Mit der Veröffentlichung von Artikeldaten und zugehörigen Preisen auf unseren Seiten verlieren alle vorherigen Angebote ihre Gültigkeit.<br /><br />

Viel Kleingedrucktes das ich hier im Beispiel mal auslasse.

Angeforderte, zugesandte Muster ohne Berechnung verbleiben in unserem Eigentum.<br />
Vertragssprache ist deutsch.');
?>

Der NAVBAR_TITLE (der breadcrumb) wird als “Allgemeine Geschäftsbedingungen” definiert. HEADING_TITLE ist die Seitenüberschrift und TEXT_INFORMATION ist der eigentliche Seiteninhalt, der ganz normal in HTML ausgezeichnet werden kann.

Wichtig ist nur, das man immer das Schema define(‘KONSTANTE’,’Inhalt der Konstante’); einhält. Ohne Leerzeichen, gerade Hochkommas (oben auf der Raute-Taste #) und ein Semikolon zum Abschluß.

 

Jetzt haben wir die eigentliche Seite und den Inhalt der Seite gefunden. Nun müssen wir noch herausfinden, woher der Shop weiß, das diese Seite überhaupt existiert und wie sie heißt.

Das steht unter catalog/includes/filenames.php:

Select Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php
/*
$Id: filenames.php 1739 2007-12-20 00:52:16Z hpdl $

osCommerce, Open Source E-Commerce Solutions

http://www.oscommerce.com

Copyright (c) 2003 osCommerce

Released under the GNU General Public License
*/

// define the filenames used in the project
define('FILENAME_ACCOUNT', 'account.php');
define('FILENAME_ACCOUNT_EDIT', 'account_edit.php');
define('FILENAME_ACCOUNT_HISTORY', 'account_history.php');
define('FILENAME_ACCOUNT_HISTORY_INFO', 'account_history_info.php');
define('FILENAME_ACCOUNT_NEWSLETTERS', 'account_newsletters.php');
define('FILENAME_ACCOUNT_NOTIFICATIONS', 'account_notifications.php');
define('FILENAME_ACCOUNT_PASSWORD', 'account_password.php');
define('FILENAME_ADDRESS_BOOK', 'address_book.php');
define('FILENAME_ADDRESS_BOOK_PROCESS', 'address_book_process.php');
define('FILENAME_ADVANCED_SEARCH', 'advanced_search.php');
define('FILENAME_ADVANCED_SEARCH_RESULT', 'advanced_search_result.php');
define('FILENAME_ALSO_PURCHASED_PRODUCTS', 'also_purchased_products.php');
define('FILENAME_CHECKOUT_CONFIRMATION', 'checkout_confirmation.php');
define('FILENAME_CHECKOUT_PAYMENT', 'checkout_payment.php');
define('FILENAME_CHECKOUT_PAYMENT_ADDRESS', 'checkout_payment_address.php');
define('FILENAME_CHECKOUT_PROCESS', 'checkout_process.php');
define('FILENAME_CHECKOUT_SHIPPING', 'checkout_shipping.php');
define('FILENAME_CHECKOUT_SHIPPING_ADDRESS', 'checkout_shipping_address.php');
define('FILENAME_CHECKOUT_SUCCESS', 'checkout_success.php');
define('FILENAME_CONTACT_US', 'contact_us.php');
define('FILENAME_CONDITIONS', 'conditions.php');

hier steht noch mehr...
?>

 

Wir müssen also nur 2 Dateien neu anlegen und eine Datei ergänzen, um eine neue Seite im Shop anzulegen!

Neu anlegen: catalog/neue-seite.php und catalog/includes/languages/german/neue-seite.php

Um einen Eintrag erweitern: catalog/includes/filenames.php

Die neue Seite anlegen

 

Da ich mit Dreamweaver arbeite, dupliziere ich einfach die jeweilige Seite. Falls Du einen anderen Editor verwendest, rate ich Dir trotzdem nicht einfach eine neue Seite zu erstellen und dann den Seiteninhalt reinzukopieren. Bei mir ergab das BOM-Fehler… aber vielleicht ist das bei Deinem Editor ja nicht der Fall.

Gut. Ich dupliziere also die Dateien catalog/conditions.php und catalog/includes/languages/german/conditions.php und benenne sie in meinem Beispiel um in muster.php.

Dann bearbeite ich die neue Datei catalog/muster.php:

Select Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php
/*
$Id: conditions.php 1739 2007-12-20 00:52:16Z hpdl $

osCommerce, Open Source E-Commerce Solutions

http://www.oscommerce.com

Copyright (c) 2003 osCommerce

Released under the GNU General Public License
*/

require('includes/application_top.php');

require(DIR_WS_LANGUAGES . $language . '/' . FILENAME_MUSTER);

$breadcrumb->add(NAVBAR_TITLE, tep_href_link(FILENAME_MUSTER));
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html <?php echo HTML_PARAMS; ?>>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=<?php echo CHARSET; ?>">
<title>Muster auf Seide</title>
<meta name="Description" content="Seidenmuster ab EUR 1.45 bestellen." />
<meta name="Keywords" content="Seidenmuster" />
<meta name="slurp" content="noydir" />
<meta name="robots" content="index, follow" />
<base href="<?php echo (($request_type == 'SSL') ? HTTPS_SERVER : HTTP_SERVER) . DIR_WS_CATALOG; ?>">
<link rel="shortcut icon" type="image/x-icon" href="http://css.seiden-handel.de/images/favicon.ico" />
<link rel="stylesheet" type="text/css" async href="http://css.seiden-handel.de/stylesheet.css">
</head>
<body marginwidth="0" marginheight="0" topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0">
<!-- header //-->
<?php require(DIR_WS_INCLUDES . 'header.php'); ?>
<!-- header_eof //-->

<!-- body //-->

Ich ersetze einfach FILENAME_CONDITIONS durch FILENAME_MUSTER. Fertig.

In der Datei catalog/includes/languages/german/muster.php ersetze ich die definierten Texte durch neue Texte:

Select Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
/*
$Id: muster.php 1739 2007-12-20 00:52:16Z hpdl $

osCommerce, Open Source E-Commerce Solutions

http://www.oscommerce.com

Copyright (c) 2002 osCommerce

Released under the GNU General Public License
*/

define('NAVBAR_TITLE', 'Farbmuster / Muster');
define('HEADING_TITLE', 'Farbmuster / Muster');

define('TEXT_INFORMATION', '<p>Sie ben&ouml;tigen eine Entscheidungshilfe vor dem Kauf? - Kein Problem.<br /><br />

&nbsp;

Hier kommt noch viel Text');

Zuletzt fügen wir noch einen Eintrag in catalog/includes/filenames.php hinzu:

Select Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php
/*
$Id: filenames.php 1739 2007-12-20 00:52:16Z hpdl $

osCommerce, Open Source E-Commerce Solutions

http://www.oscommerce.com

Copyright (c) 2003 osCommerce

Released under the GNU General Public License
*/

// define the filenames used in the project
define('FILENAME_ACCOUNT', 'account.php');
define('FILENAME_ACCOUNT_EDIT', 'account_edit.php');
define('FILENAME_ACCOUNT_HISTORY', 'account_history.php');
define('FILENAME_ACCOUNT_HISTORY_INFO', 'account_history_info.php');
define('FILENAME_ACCOUNT_NEWSLETTERS', 'account_newsletters.php');
define('FILENAME_ACCOUNT_NOTIFICATIONS', 'account_notifications.php');
define('FILENAME_ACCOUNT_PASSWORD', 'account_password.php');
define('FILENAME_ADDRESS_BOOK', 'address_book.php');
define('FILENAME_ADDRESS_BOOK_PROCESS', 'address_book_process.php');
define('FILENAME_ADVANCED_SEARCH', 'advanced_search.php');
define('FILENAME_ADVANCED_SEARCH_RESULT', 'advanced_search_result.php');
define('FILENAME_ALSO_PURCHASED_PRODUCTS', 'also_purchased_products.php');
define('FILENAME_CHECKOUT_CONFIRMATION', 'checkout_confirmation.php');
define('FILENAME_CHECKOUT_PAYMENT', 'checkout_payment.php');
define('FILENAME_CHECKOUT_PAYMENT_ADDRESS', 'checkout_payment_address.php');
define('FILENAME_CHECKOUT_PROCESS', 'checkout_process.php');
define('FILENAME_CHECKOUT_SHIPPING', 'checkout_shipping.php');
define('FILENAME_CHECKOUT_SHIPPING_ADDRESS', 'checkout_shipping_address.php');
define('FILENAME_CHECKOUT_SUCCESS', 'checkout_success.php');
define('FILENAME_CONTACT_US', 'contact_us.php');
define('FILENAME_CONDITIONS', 'conditions.php');
//neuer Eintrag
define('FILENAME_MUSTER', 'muster.php');
?>

 

Die neue Seite im Shop verlinken

 

So weit, so gut. Wir können die neue Seite muster.php nun durch Eingabe der URL im Browser aufrufen.

Aber wir wollen ja vielleicht, das auch Besucher die Seite erreichen können.

Wir müssen die neue Seite also irgendwo im Shop verlinken. Ich nehme dazu gerne die Information-Box. Dort stehen von Haus aus die Links zu conditions.php, privacy.php, delivery.php etc. drin. In der Grundinstallation von osC2.2 ist sie in der linken Seitenleiste.

Man findet sie unter catalog/includes/boxes/information.php

Dort können wir nun den Link zur neuen Seite muster.php einfügen:

Select Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?php
/*
$Id: information.php 1739 2007-12-20 00:52:16Z hpdl $

osCommerce, Open Source E-Commerce Solutions

http://www.oscommerce.com

Copyright (c) 2003 osCommerce

Released under the GNU General Public License
*/
?>
<!-- information //-->
<tr>
<td>
<?php
$info_box_contents = array();
$info_box_contents[] = array('text' => BOX_HEADING_INFORMATION);

new infoBoxHeading($info_box_contents, false, false);

$info_box_contents = array();
$info_box_contents[] = array('text' =>
'<a href="' . tep_href_link(FILENAME_MUSTER) . '">' . BOX_INFORMATION_MUSTER . '</a><br>' .
'<a href="' . tep_href_link(FILENAME_SHIPPING) . '">' . BOX_INFORMATION_SHIPPING . '</a><br>' .
'<a href="' . tep_href_link(FILENAME_PRIVACY) . '">' . BOX_INFORMATION_PRIVACY . '</a><br>' .
'<a href="' . tep_href_link(FILENAME_CONDITIONS) . '">' . BOX_INFORMATION_CONDITIONS . '</a><br>' .
'<a href="' . tep_href_link(FILENAME_CONTACT_US) . '">' . BOX_INFORMATION_CONTACT . '</a><br>' .
'<a href="' . tep_href_link(FILENAME_IMPRESSUM) . '">' . BOX_INFORMATION_IMPRESSUM . '</a><br>' .
'<a href="' . tep_href_link(FILENAME_DATENSCHUTZ) . '">' . BOX_INFORMATION_DATENSCHUTZ . '</a><br>');
new infoBox($info_box_contents);
?>
</td>
</tr>
<!-- information_eof //-->

Nun fehlt uns noch der Linktext BOX_INFORMATION_MUSTER.

Da die anderen Links der Informationsbox in der Datei catalog/includes/languages/german.php definiert sind, packen wir unseren doch auch gleich dazu mit einem freundlichen

Select Code
1
define('BOX_INFORMATION_MUSTER', 'Musteranfragen');

Und schon ist der Link im Shop.

 

Bei mir sieht es dann so aus (ich habe die Box Information allerdings in der rechten Seitenleiste.)

Box Information

Box Information

 

 

Eine neue Seite ohne Seitenleiste erstellen

Falls man sehr viel Content auf der Seite unterbringen muß oder man der Meinung ist, das eine oder beide Seitenleisten ablenken könnten, kann man auch sehr einfach eine oder beide Seitenleisten weglassen.

In der neu erstellten Datei catalog/muster.php finden wir 2 Einträge:

Select Code
1
<?php require(DIR_WS_INCLUDES . 'column_left.php'); ?>

und

Select Code
1
<?php require(DIR_WS_INCLUDES . 'column_right.php'); ?>

Man kann einfach einen oder beide auskommentieren oder löschen. Und schon ist Seitenleiste weg auf dieser Seite.