Tutorial: Zusätzliche Datenfelder sprachabhängig (modified shop 106)
(by Hendrik Koch, 05.2015)
Im Gegensatz zu den Datenwerten des ersten Tutorials (Buchautor, ISBN) gibt es Daten die in jede Sprache übersetzt vorliegen müssen.
Im zweiten Teil des Tutorials werden sprachabhängige Artikel- Datenfelder eingefügt. Wir ergänzen das Szenario aus dem ersten Tutorial indem wir ein Datenfeld für eine Kurzrezension einfügen.
Datenbank erweitern[Bearbeiten]
Als erstes muß ein neues Datenfeld in der Datenbank erstellt werden. Dieses Datenfeld setzen wir in die Tabelle products_description. Diese Tabelle enthält alle sprachabhängigen Artikeldaten.
products_review_title (varchar, 255 Zeichen, Überschrift)
products_review_text (text, unfeschränkter freier Text)
Mit phpmyadmin folgende SQL-Anweisung ausführen:
ALTER TABLE `products_description`
ADD `products_review_title` VARCHAR( 255 ) NOT NULL ,
ADD `products_review_text` TEXT NOT NULL;
Backend Eingabe[Bearbeiten]
Die Artikeladministration wird um die Eingabefelder erweitert.
Zuerst die Sprachdefinitionen. Kurzrezension-Überschrift und -Text.
lang/german/admin/categories.php
Füge ein:
// products_extrafield_lang define('TEXT_PRODUCTS_REVIEW_TITLE','Kurzrezension Überschrift'); define('TEXT_PRODUCTS_REVIEW_TEXT','Kurzrezension Text');
lang/english/admin/categories.php
Füge ein:
// products_extrafield_lang define('TEXT_PRODUCTS_REVIEW_TITLE','Review Title'); define('TEXT_PRODUCTS_REVIEW_TEXT','Review Text');
ggf. weitere Sprachen.
Nun der Patch der Artikeleingabe.
Datei admin/includes/modules/new_product.php
Finde:
$pInfo = new objectInfo($_POST);
$products_name = $_POST['products_name'];
$products_description = $_POST['products_description'];
$products_short_description = $_POST['products_short_description'];
$products_order_description = $_POST['products_order_description'];
Füge an:
// products extrafields lang
$products_review_title = $_POST['products_review_title'];
$products_review_text = $_POST['products_review_text'];
Finde:
<div width="100%" valign="top" class="main" style="padding: 3px; line-height:20px;">
<b><?php echo $lng_image . ' ' . TEXT_PRODUCTS_SHORT_DESCRIPTION; ?></b><br />
<?php echo xtc_draw_textarea_field('products_short_description_' . $languages[$i]['id'], 'soft', '103', '20', (isset($products_short_description[$languages[$i]['id']]) ? stripslashes($products_short_description[$languages[$i]['id']]) : $products_desc_fields['products_short_description'])); ?>
</div>
<div valign="top" class="main" style="padding: 3px; line-height:20px;">
<b><?php echo $lng_image . ' ' . TEXT_PRODUCTS_ORDER_DESCRIPTION; ?></b><br />
<?php echo xtc_draw_textarea_field('products_order_description[' . $languages[$i]['id'] . ']', 'soft', '103', '10', (isset($products_order_description[$languages[$i]['id']]) ? stripslashes($products_order_description[$languages[$i]['id']]) : $products_desc_fields['products_order_description']), 'style="width:100%; height:50px;"'); ?>
</div>
Füge an:
<!-- products_extrafield_lang -->
<div class="main" style="padding: 3px; line-height:20px;">
<?php echo $lng_image ?> <b><?php echo TEXT_PRODUCTS_REVIEW_TITLE; ?> </b><?php echo xtc_draw_input_field('products_review_title[' . $languages[$i]['id'] . ']', (($products_review_title[$languages[$i]['id']]) ? stripslashes($products_review_title[$languages[$i]['id']]) : $products_desc_fields['products_review_title']),'style="width:80%" maxlength="255"'); ?>
</div>
<div valign="top" class="main" style="padding: 3px; line-height:20px;">
<b><?php echo $lng_image . ' ' . TEXT_PRODUCTS_REVIEW_TEXT; ?></b><br />
<?php echo xtc_draw_textarea_field('products_review_text[' . $languages[$i]['id'] . ']', 'soft', '103', '10', (isset($products_review_text[$languages[$i]['id']]) ? stripslashes($products_review_text[$languages[$i]['id']]) : $products_desc_fields['products_review_text']), 'style="width:100%; height:250px;"'); ?>
</div>
Datei admin/includes/classes/categories.php
Finde (oben):
define('ADD_PRODUCTS_DESCRIPTION_FIELDS','products_order_description'); //products_order_description
Ergänze zu:
define('ADD_PRODUCTS_DESCRIPTION_FIELDS','products_order_description, products_review_title, products_review_text'); //products_order_description
Die neuen Eingabefelder erscheinen ab nun:
Frontend[Bearbeiten]
Die neuen Datenfelder sollen auf der Artikeldetailseite (products_info) platziert werden.
Nun die Platzhalter für den Templategenerator definieren.
Datei includes/modules/product_info.php
Finde:
// products name
$info_smarty->assign('PRODUCTS_NAME', $product->data['products_name']);
Füge an:
// products_extrafields lang
$info_smarty->assign('PRODUCTS_REVIEW_TITLE', $product->data['products_review_title']);
$info_smarty->assign('PRODUCTS_REVIEW_TEXT', $product->data['products_review_text']);
Datei templates/xtc4/module/product_info/product_info_v1_tabs.html
Datei templates/xtc4/module/product_info/product_info_v1.html
Datei templates/xtc4/module/product_info/product_info_v1_accordion.html
Finde:
{$PRODUCTS_DESCRIPTION}
Füge an:
<br />
<strong>{$PRODUCTS_REVIEW_TITLE}</strong><br />
{$PRODUCTS_REVIEW_TEXT}
(Namenstexte und Sprachplatzhalter siehe Teil 1: Tutorial: Zusätzliche Datenfelder Artikel (modified shop 106))