Tag Archives: osCommerce 2.2

Seitenleisten ändern in osCommerce 2.2

Standardmässig weist ein osCommerce 2.2 eine linke und eine rechte Seitenleiste auf, die ständig denselben Inhalt auf jeder Seite anzeigen.

Nun benötigt der Besucher aber nicht überall im Shop ständig dieselben Informationen:

  • Auf der Startseite genügen Navigation, evtl. Neuheiten, eine Suche und einige andere nützliche Dinge.
  • Auf der Artikelseite will der Besucher aber Informationen zu genau diesem Artikel sehen. Es wäre kontraproduktiv, den Kunden durch eine “Neuheiten”-Box abzulenken.
  • Im Checkoutprozess benötigt der Kunde keine Kategorienavigation oder die Box “Andere Kunden kauften…”: Ihn interessieren eher Dinge wie Lieferzeiten und Zahlungsmöglichkeiten.

 

Leider gibt es von Haus aus keine Möglichkeit dies bei einem osCommerce zu ändern, ausser man baut sich ein Modul ein. Manche funktionieren sogar… meist.

 

Es geht aber auch einfacher und ganz ohne sich ein Modul einzubauen.

Das erkläre ich heute hier:

  • Wo und wie wird die Seitenleiste zusammengebaut?
  • Wie erstelle ich eigene Boxen?
  • Wie erstelle ich eine eigene Seitenleiste?
  • Wie zeige ich meine Seitenleiste nur auf bestimmten Seiten an?

 

Als Beispiel verwende ich meinen eigenen Shop, der ein osCommerce 2.2 RC2 ist und mittlerweile seit 7 Jahren im Einsatz ist. Die Zeilenzahlen und einige CSS-Klassen werden also von Deinem Shop abweichen.

Hier erstmal meine Startseite. In beiden Seitenleisten sind die üblichen Boxen, sowie links und rechts je eine neue Box eingebaut:

Startseite mit geänderten Seitenleisten

Startseite mit geänderten Seitenleisten

Wer sich das ansehen will, hier der Link: http://www.seiden-handel.de/catalog/

Wie man sieht, wurden von mir einige Boxen entfernt (specials.php und andere), die Box information.php ist bei mir rechts, der Warenkorb ist nicht sichtbar, da er leer ist (wie das geht steht HIER) und unten wurde je eine neue Box hinzugefügt.

 

Zum Vergleich nun eine Artikelseite:

Artikelseite mit neuer rechter Seitenleiste

Artikelseite mit neuer rechter Seitenleiste

(zur vergrösserten Ansicht bitte anklicken, da das Bild über 1300px lang ist)

Da bei meinen Artikeln etwas Erklärungsaufwand zur Attributauswahl erforderlich ist, habe ich hier die rechte Seitenleiste durch einen Text ersetzt, der dem Kunden hilft.

 

So. Genug mit Beispielen und bunten Bildchen. Kommen wir zur Sache.

 

Wo und wie wird die Seitenleiste zusammengebaut?

 

Im Ornder /includes finden wir die beiden Dateien column_right.php und column_left.php.

Dort werden die Boxen und deren Reihenfolge in der jeweiligen Seitenleiste festgelegt.

Bei mir sieht das 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: column_left.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
*/

if ((USE_CACHE == 'true') && empty($SID)) {
echo tep_cache_categories_box();
} else {
include(DIR_WS_BOXES . 'all_categories.php');
}

//require(DIR_WS_BOXES . 'whats_new.php');
//require(DIR_WS_BOXES . 'search.php');
//require(DIR_WS_BOXES . 'faq.php');
//require(DIR_WS_BOXES . 'information.php');
include(DIR_WS_BOXES . 'werbung_2.php');
?>

Sichtbar sind demnach nur die Boxen “Categories” und “werbung_2″ die ich selbst eingebaut habe.

Die jeweiligen Dateien, in der die Boxen zusammengebaut werden, findet man, indem man den Pfad zurückverfolgt: DIR_WS_BOXES. Sie liegen also im Ordner includes/boxes/.

 

 

Wie erstelle ich eigene Boxen?

 

Die Datei  werbung_2.php im Ordner /includes/boxes/ sieht 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
<!-- werbung_2_anfang //-->
<tr>
<td>
<?php
$info_box_contents = array();
$info_box_contents[] = array('text' => BOX_HEADING_WERBUNG_2);

new infoBoxHeading($info_box_contents, false, false);

$info_box_contents = array();
$info_box_contents[] = array('text' => BOX_WERBUNG_2_LINK1 .
BOX_WERBUNG_2_LINK2 .
BOX_WERBUNG_2_LINK3 .
BOX_WERBUNG_2_LINK4 .
BOX_WERBUNG_2_LINK5);
new infoBox($info_box_contents);
?>
</td>
</tr>
<!-- werbung_2_eof //-->

Das habe ich mir natürlich nicht aus den Fingern gesaugt und ich bin auch kein PHP-Freak: Klickt mal die einzelnen Dateien im Ordner includes/boxes/ durch und ihr werdet feststellen, das sich bestimmte Elemente immer wiederholen.

Select Code
1
2
3
4
5
6
7
8
9
10
<?php
$info_box_contents = array(); //ein Array wird gebildet
$info_box_contents[] = array('text' => BOX_HEADING_ÜBERSCHRIFT); //das Array vom Typ Text mit der Überschrift gefüllt

new infoBoxHeading($info_box_contents, false, false); //das Array wird ausgegeben

$info_box_contents = array(); //ein Array wird gebildet
$info_box_contents[] = array('text' => DER INHALT DER BOX); //das Array vom Typ Text mit dem Content gefüllt
new infoBox($info_box_contents); //das Array wird ausgegeben
?>

Das ist der Grundaufbau einer Box.

Du kannst entweder eine deiner Boxen duplizieren und mit einem neuen Dateinamen versehen oder Du kannst einfach obigen Inhalt abkopieren und in eine neue PHP-Datei einfügen.

Nun müssen wir nachsehen, wo Überschrift und Content definiert werden.

Ich lege meine Texte immer da ab, wo auch alle anderen deutschen Texte liegen: in /includes/languages/german/german.php und mache dort den Eintrag für die Überschrift und den Content:

Select Code
1
2
3
4
5
6
7
// neue box text in includes/boxes/werbung_2.php
define('BOX_HEADING_WERBUNG_2', 'Kaufempfehlungen');
define('BOX_WERBUNG_2_LINK1', '<a href="http://www.seiden-handel.de/catalog/neue-farben-seidenjersey-meterware-c-184_185.html" target="_self" title="Seidenjersey">Seidenjersey, 100% Seide<br /><img src="http://images.seiden-handel.de/sidebars/seidenjersey-110cm.jpg" width="170px" height="113px" alt="Seidenjersey" border="0" /></a><br /><br />');
define('BOX_WERBUNG_2_LINK2', '<a href="http://www.seiden-handel.de/catalog/neue-farben-chiffon-meterware-c-184_186.html" target="_self" title="Meterware Chiffon">Meterware Chiffon<br /><img src="http://images.seiden-handel.de/sidebars/chiffon-emerald.jpg" width="170px" height="113px" alt="Meterware Seidenchiffon" border="0" /></a><br /><br />');
define('BOX_WERBUNG_2_LINK3', '<a href="http://www.seiden-handel.de/catalog/neue-farben-seidenjersey-meterware-c-184_185.html" target="_self" title="Meterware">Seidenjersey coloriert<br /><img src="http://images.seiden-handel.de/sidebars/seidenjersey-108.jpg" width="170px" height="113px" alt="Seidenjersey" border="0" /></a><br /><br />');
define('BOX_WERBUNG_2_LINK4', '<a href="http://www.seiden-handel.de/catalog/stoffe-unicolor-crepe-satin-c-23_53_153.html" target="_self" title="Seidensatin">Crepe Satin, 100% Seide<br /><img src="http://images.seiden-handel.de/sidebars/seide_satin_18403_bernstein.jpg" width="170px" height="113px" alt="Seidensatin" border="0" /></a><br /><br />');
define('BOX_WERBUNG_2_LINK5', '<a href="http://www.seiden-handel.de/catalog/stoffe-unicolor-ponge-c-23_53_58.html" target="_self" title="Meterware Ponge">Seidenstoff Ponge<br /><img src="http://images.seiden-handel.de/sidebars/seide_meterware_ponge05_17139_limone.jpg" width="170px" height="113px" alt="Seidenstoff Ponge" border="0" /></a><br /><br />');

Selbstverständlich kann man Links auch direkt in der Datei werbung_2.php bestimmen und auch die Bilder einfügen, aber ich war faul.

(Wer sich grade fragt, weshalb ich nicht einfach die Artikelfotos direkt aus dem /images – Ordner geholt habe, da die doch schon vorhanden sind:

Die sind zwar da… aber da sie größer sind als meine Seitenleiste breit ist, würden sie somit herunterskaliert werden. Ausserdem sind die Artikelbilder 40-80KB groß und die verkleinerten Bilder die ich eingefügt habe nur 4-9KB. Das spart bei 11 Bildern in den Seitenleisten einiges an unnötigen KB ein.

Nun haben wir also gelernt, wo die Seitenleisten zusammengebaut werden: /includes/column_right.php und column_left.php.
Wir haben auch eine Vorlage einer Box mit Überschrift und Content.
Und wir wissen, wo wir Überschrift und Content in unserer jeweiligen Sprache definieren: /includes/languages/german/german.php

 

 

Wie erstelle ich eine eigene Seitenleiste?

 

Die besten Freunde jedes Amateurfricklers sind Copy & Paste. (Fürs Mahnwesen kommen treten dann Smith & Wesson an deren Stelle)

Wir duplizieren erstmal eine vorhandene Seitenleiste. Ich nehme mal die rechte, also /includes/column_right.php.

Da ich nur eine Währung, eine Sprache habe, keine Reviews habe, keine Bestseller, Produktnachrichten, Specials oder Tell-a-friend-Dinge habe, sind die bei mir auch nicht vorhanden.

Die /includes/column_right.php, die so auf der Startseite benutzt wird und die wir nun duplizieren:

Select Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
/*
$Id: column_right.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(DIR_WS_BOXES . 'search.php');
if ($cart->count_contents() >0) include(DIR_WS_BOXES . 'shopping_cart.php');//hack um warenkorb nicht zu zeigen, wenn er leer ist
if (isset($HTTP_GET_VARS['products_id'])) include(DIR_WS_BOXES . 'manufacturer_info.php');
require(DIR_WS_BOXES . 'ust.php');
if (tep_session_is_registered('customer_id')) include(DIR_WS_BOXES . 'order_history.php');
require(DIR_WS_BOXES . 'faq.php');
require(DIR_WS_BOXES . 'information.php');
include(DIR_WS_BOXES . 'werbung_1.php');
?>

 

Diese Datei duplizieren wir und benennen sie um in column_right2.php.

Nun bestimmen wir noch, auf welchen Seiten wir diese neue Seitenleiste anzeigen möchten.

Ich möchte sie auf den Artikelseiten sehen: Also suchen wir uns die Datei product_info.php in der root heraus, denn dort werden die Artikelseiten zusammengebaut.

Ziemlich am Ende der Datei finden wir folgende Zeile

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

die wir in

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

abändern.

 

Meine neue Seitenleiste colum_right2.php sieht so aus:

Select Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
/*
$Id: column_right.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(DIR_WS_BOXES . 'search.php');
if ($cart->count_contents() >0) include(DIR_WS_BOXES . 'shopping_cart.php');//hack um warenkorb nicht zu zeigen, wenn er leer ist
if (tep_session_is_registered('customer_id')) include(DIR_WS_BOXES . 'order_history.php');
require(DIR_WS_BOXES . 'infoblock_rechts.php');
require(DIR_WS_BOXES . 'infoblock_rechts_farbauswahl.php');

?>

Die selbstgebastelten Boxen includes/boxes/infoblock_rechts.php

Select Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!-- Infoblock rechte Seitenleiste in Artikelansicht BOF //-->
<tr>
<td>
<?php
$info_box_contents = array();
$info_box_contents[] = array('text' => PRODUCT_CUSTOM_BLOCK);

new infoBoxHeading($info_box_contents, false, false);

$info_box_contents = array();
$info_box_contents[] = array('text' => CUSTOM_PRODUCT_BLOCK_CONTENT);
new infoBox($info_box_contents);
?>
</td>
</tr>
<!-- Infoblock rechte Seitenleiste in Artikelansicht EOF //-->

 

und includes/boxes/infoblock_rechts_farbauswahl.php

Select Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!-- Infoblock rechte Seitenleiste in Artikelansicht BOF //-->
<tr>
<td>
<?php
$info_box_contents = array();
$info_box_contents[] = array('text' => FARBAUSWAHL_BLOCK);

new infoBoxHeading($info_box_contents, false, false);

$info_box_contents = array();
$info_box_contents[] = array('text' => FARBAUSWAHL_CONTENT);
new infoBox($info_box_contents);
?>
</td>
</tr>
<!-- Infoblock rechte Seitenleiste in Artikelansicht EOF //-->

Die Definition der Texte erfolgt bei mir immer in der Datei /includes/languages/german/german.php wo ich es nach folgenden Schema eintrage

Select Code
1
2
3
/*rechte Seitenleiste auf Artikelseite - Farbauswahl*/
define('FARBAUSWAHL_BLOCK', 'Die Überschrift der Box');
define('FARBAUSWAHL_CONTENT', '&lt;p&gt;Hier kommt der Content der Box. Formatiert werden kann in normalem HTML.');

 

 

Wie zeige ich meine Seitenleiste nur auf bestimmten Seiten an?

 

Du benötigst eine bestimmte Hinweisbox z.B. im Warenkorb und sonst gar nichts?

 

Erstelle eine neue Box info_warenkorb.php. (includes/boxes/info_warenkorb.php)

Definiere Überschrift und Text in /includes/languages/german/german.php.

Erstelle eine neue Seitenleiste column_right_warenkorb.php (includes/column_right_warenkorb.php)

Select Code
1
2
3
<?php
include(DIR_WS_BOXES . 'info_warenkorb.php');
?>

und includiere die Box info_warenkorb.php.

 

Schau nach, wo der Warenkorb angezeigt wird: In der Seite shopping_cart.php

Ändere in der Datei shopping_cart.php den Eintrag (ziemlich am Ende)

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

in

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

um.

 

Nach demselben Schema können wir nun beliebig viele colums_rightX.php und column_leftX.php anlegen, sie mit selbstgebastelten Boxen bestücken (die wir nach obiger Vorlage machen und deren Content wir in /includes/languages/german/german.php definieren und diese Seitenleisten auf jeder beliebigen Seite im Shop anzeigen. Man kann auch Boxen und Seitenleisten nur eingeloggten Besuchern anzeigen. Oder eben nicht.

Leeren Warenkorb in osCommerce verbergen

Da mir die Anzeige des leeren Warenkorbes schon bei Magento auf die Nüsse ging (s. Leeren Warenkorb in Magento verbergen) habe ich das auch kurz in meinem osCommerce 2.2RC so gemacht.

Die zu bearbeitende Datei ist catalog/includes/column_right.php

Falls ihr den Warenkorb in der linken Seitenleiste habt, ist es column_left.php

 

Dort ändert man den Eintrag (ziemlich weit oben) zur Anzeige der Box Warenkorb ab:

Von

Select Code
1
require(DIR_WS_BOXES . 'shopping_cart.php');

zu

Select Code
1
if ($cart-&gt;count_contents() &gt;0) include(DIR_WS_BOXES . 'shopping_cart.php');

EDIT: Irgendwie scheint mir da das “Größer-als” Zeichen nicht richtig dargestellt zu werden.

Korrekt ist es so: if ($cart->count_contents() >0) include(DIR_WS_BOXES . ‘shopping_cart.php’);

Fertig.

 

Was macht die geänderte Zeile?

Ursprünglich stand da: Binde UNBEDINGT die Datei /boxes/shopping_cart.php ein.

Jetzt steht da: WENN der Inhalt des Warenkorbes größer Null ist DANN binde die Datei /boxes/shopping_cart.php ein.

 

Warum das besser ist?

Erstens spart man Platz in der Seitenleiste, der für sinnvollere Angaben genutzt werden kann.

Zweitens spart man Ladezeit, da ein neuer Besucher beim ersten Besuch des Shops sowieso nichts im Warenkorb hat.

Und ausserdem sieht es einfach doof aus…

 

Zum Vergleich:

Leerer Warenkorb

Leerer Warenkorb

Voller Warenkorb

Voller Warenkorb

 

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.