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.

Notice: This work is licensed under a BY-NC-SA. Permalink: Seitenleisten ändern in osCommerce 2.2

Comments are closed.