Suche |
Tutorial: Zusätzliche Datenfelder ArtikelAus xtc-wiki(by Hendrik Koch, 10.2009) Ein typisches Teilproblem vieler Projektarbeiten ist das Hinzufügen von weiteren Daten in die Artikeldatenbank. Der vorliegende Text beschreibt anhand eines typischen Problems beispielhaft die Vorgehensweise. Ein Shop verkauft Bücher. Jedes Buch hat einen Autor und eine ISBN Nummer. Diese Daten sollen in eigenen Datenfeldern im Backend erfasst und im Frontend, in der Artikeldetailansicht sowie der Artikelliste, an definierter Stelle dargestellt werden.
[Bearbeiten] Datenbank erweiternDie Datenbanktabelle products wird um 2 Text-Datenfelder erweitert. products_isbn (varchar, 30 Zeichen) Mit phpmyadmin folgende SQL-Anweisung ausführen: ALTER TABLE `products` ADD `products_isbn` VARCHAR( 30 ) NOT NULL , ADD `products_author` VARCHAR( 80 ) NOT NULL; [Bearbeiten] Backend EingabeDie Artikeladministration wird um die Eingabefelder Autor und ISBN erweitert. Direkt unter EAN. Bevor der Programmcode geändert wird, werden in den Sprachdefinitionen die Worte „Autor“ und „ISBN“ abgelegt um die Mehrsprachigkeit des Systems zu gewährleisten. lang/german/admin/categories.php // products_extrafield
define('TEXT_PRODUCTS_AUTHOR','Autor');
define('TEXT_PRODUCTS_ISBN', 'ISBN');
lang/english/admin/categories.php // products_extrafield
define('TEXT_PRODUCTS_AUTHOR','Author');
define('TEXT_PRODUCTS_ISBN', 'ISBN');
ggf. weitere Sprachen. Nun der Patch der Artikeleingabe. <tr>
<td><span class="main"><?php echo TEXT_PRODUCTS_EAN; ?></span></td>
<td><span class="main"><?php echo xtc_draw_input_field('products_ean', $pInfo->products_ean); ?></span></td>
</tr>Füge an: <!-- products_extrafield beginn -->
<tr>
<td><span class="main"><?php echo TEXT_PRODUCTS_AUTHOR; ?></span></td>
<td><span class="main"><?php echo xtc_draw_input_field('products_author', $pInfo->products_author); ?></span></td>
</tr>
<tr>
<td><span class="main"><?php echo TEXT_PRODUCTS_ISBN; ?></span></td>
<td><span class="main"><?php echo xtc_draw_input_field('products_isbn', $pInfo->products_isbn); ?></span></td>
</tr>
<!-- products_extrafield end -->Die neuen Eingabefelder erscheinen ab nun: Allerdings werden die Eingaben noch nicht gespeichert. Dazu muß die categories-Klasse leicht erweitert werden. Datei admin/includes/classes/categories.php $sql_data_array = array ('products_quantity' => xtc_db_prepare_input($products_data['products_quantity']), ........usw...usw..... Die gleiche Zeile etwas übersichtlicher formatiert: $sql_data_array = array ( 'products_quantity' => xtc_db_prepare_input($products_data['products_quantity']), 'products_model' => xtc_db_prepare_input($products_data['products_model']), 'products_ean' => xtc_db_prepare_input($products_data['products_ean']), 'products_price' => xtc_db_prepare_input($products_data['products_price']), 'products_sort' => xtc_db_prepare_input($products_data['products_sort']), 'products_shippingtime' => xtc_db_prepare_input($products_data['shipping_status']), 'products_discount_allowed' => xtc_db_prepare_input($products_data['products_discount_allowed']), 'products_date_available' => $products_date_available, 'products_weight' => xtc_db_prepare_input($products_data['products_weight']), 'products_status' => $products_status, 'products_startpage' => xtc_db_prepare_input($products_data['products_startpage']), 'products_startpage_sort' => xtc_db_prepare_input($products_data['products_startpage_sort']), 'products_tax_class_id' => xtc_db_prepare_input($products_data['products_tax_class_id']), 'product_template' => xtc_db_prepare_input($products_data['info_template']), 'options_template' => xtc_db_prepare_input($products_data['options_template']), 'manufacturers_id' => xtc_db_prepare_input($products_data['manufacturers_id']), 'products_fsk18' => xtc_db_prepare_input($products_data['fsk18']), 'products_vpe_value' => xtc_db_prepare_input($products_data['products_vpe_value']), 'products_vpe_status' => xtc_db_prepare_input($products_data['products_vpe_status']), 'products_vpe' => xtc_db_prepare_input($products_data['products_vpe'])); Einfügung der markierten Zeilen Autor und ISBN: $sql_data_array = array ( 'products_quantity' => xtc_db_prepare_input($products_data['products_quantity']), 'products_model' => xtc_db_prepare_input($products_data['products_model']), 'products_ean' => xtc_db_prepare_input($products_data['products_ean']), // products_extrafield 'products_author' => xtc_db_prepare_input($products_data['products_author']), 'products_isbn' => xtc_db_prepare_input($products_data['products_isbn']), 'products_price' => xtc_db_prepare_input($products_data['products_price']), 'products_sort' => xtc_db_prepare_input($products_data['products_sort']), 'products_shippingtime' => xtc_db_prepare_input($products_data['shipping_status']), 'products_discount_allowed' => xtc_db_prepare_input($products_data['products_discount_allowed']), 'products_date_available' => $products_date_available, 'products_weight' => xtc_db_prepare_input($products_data['products_weight']), 'products_status' => $products_status, 'products_startpage' => xtc_db_prepare_input($products_data['products_startpage']), 'products_startpage_sort' => xtc_db_prepare_input($products_data['products_startpage_sort']), 'products_tax_class_id' => xtc_db_prepare_input($products_data['products_tax_class_id']), 'product_template' => xtc_db_prepare_input($products_data['info_template']), 'options_template' => xtc_db_prepare_input($products_data['options_template']), 'manufacturers_id' => xtc_db_prepare_input($products_data['manufacturers_id']), 'products_fsk18' => xtc_db_prepare_input($products_data['fsk18']), 'products_vpe_value' => xtc_db_prepare_input($products_data['products_vpe_value']), 'products_vpe_status' => xtc_db_prepare_input($products_data['products_vpe_status']), 'products_vpe' => xtc_db_prepare_input($products_data['products_vpe'])); Damit auch das Dublizieren von Artikeln vollständig klappt muß noch eine zweite Stelle gepatcht werden. Finde (Zeile 743 ca.) $sql_data_array=array('products_quantity'=>$product['products_quantity'], 'products_model'=>$product['products_model'], 'products_ean'=>$product['products_ean'], 'products_shippingtime'=>$product['products_shippingtime'], 'products_sort'=>$product['products_sort'], 'products_startpage'=>$startpage, 'products_sort'=>$product['products_sort'], 'products_price'=>$product['products_price'], 'products_discount_allowed'=>$product['products_discount_allowed'], 'products_date_added'=>'now()', 'products_date_available'=>$product['products_date_available'], 'products_weight'=>$product['products_weight'], 'products_status'=>$products_status, 'products_tax_class_id'=>$product['products_tax_class_id'], 'manufacturers_id'=>$product['manufacturers_id'], 'product_template'=>$product['product_template'], 'options_template'=>$product['options_template'], 'products_fsk18'=>$product['products_fsk18'], ); Füge markierte Zeilen ein: $sql_data_array=array('products_quantity'=>$product['products_quantity'], 'products_model'=>$product['products_model'], 'products_ean'=>$product['products_ean'], // products_extrafield 'products_author'=>$product['products_author'], 'products_isbn'=>$product['products_isbn'], 'products_shippingtime'=>$product['products_shippingtime'], 'products_sort'=>$product['products_sort'], 'products_startpage'=>$startpage, 'products_sort'=>$product['products_sort'], 'products_price'=>$product['products_price'], 'products_discount_allowed'=>$product['products_discount_allowed'], 'products_date_added'=>'now()', 'products_date_available'=>$product['products_date_available'], 'products_weight'=>$product['products_weight'], 'products_status'=>$products_status, 'products_tax_class_id'=>$product['products_tax_class_id'], 'manufacturers_id'=>$product['manufacturers_id'], 'product_template'=>$product['product_template'], 'options_template'=>$product['options_template'], 'products_fsk18'=>$product['products_fsk18'], );
[Bearbeiten] FrontendDie neuen Datenfelder sollen auf der Artikeldetailseite (products_info) platziert werden. Zuerst wieder eine Definition in den Sprachdateien für die Textvorsätze „Autor“ und „ISBN“. Datei lang/german/lang_german.conf /* products_extrafield */ text_products_author = 'Autor' text_products_isbn = 'ISBN' sowie Datei lang/english/lang_english.conf /* products_extrafield */ text_products_author = 'Author' text_products_isbn = 'ISBN' ggf. weitere Sprachen
Finde: $info_smarty->assign('PRODUCTS_MODEL', $product->data['products_model']); $info_smarty->assign('PRODUCTS_EAN', $product->data['products_ean']); Füge an: // products_extrafield $info_smarty->assign('PRODUCTS_AUTHOR', $product->data['products_author']); $info_smarty->assign('PRODUCTS_ISBN', $product->data['products_isbn']);
Datei templates/xtc4/module/product_info/product_info_v1.html Finde: <tr valign="middle"> <td class="main">{#text_shippingtime#}</td> {if $SHIPPING_IMAGE}<td><img src="{$SHIPPING_IMAGE}" alt="{$SHIPPING_NAME}" /></td> {/if} <td class="main">{$SHIPPING_NAME}</td> </tr> Füge an: <tr valign="middle"> <td class="main">{#text_products_author#}</td> <td class="main">{$PRODUCTS_AUTHOR}</td> </tr> <tr valign="middle"> <td class="main">{#text_products_isbn#}</td> <td class="main">{$PRODUCTS_ISBN}</td> </tr> [Bearbeiten] ProduktlistingDatei includes/modules/default.php Finde 4 Zeilen beginnend mit "$listing_sql = "select ...usw..." p.products_author,
p.products_isbn,
(Diese Einfügung ist an 4 an Stellen vorzunehmen, also insgesamt 4 mal!)
Finde: return array ('PRODUCTS_NAME' => $array['products_name'], 'COUNT'=>$array['ID'], 'PRODUCTS_ID'=>$array['products_id'], 'PRODUCTS_VPE' => $this->getVPEtext($array, $products_price['plain']), Füge an: // products_extrafield 'PRODUCTS_AUTHOR' => $array['products_author'], 'PRODUCTS_ISBN' => $array['products_isbn'],
Finde: {if $module_data.PRODUCTS_VPE}<br />{$module_data.PRODUCTS_VPE}{/if}Füge an: {* ----- products_extrafield ----- *}
<br />{#text_products_author#}:{$module_data.PRODUCTS_AUTHOR}
<br />{#text_products_isbn#}:{$module_data.PRODUCTS_ISBN}[Bearbeiten] Produktsuche ListingDatei advanced_search_results.php //build query $select_str = "SELECT distinct p.products_id, p.products_price, p.products_model, Füge an: p.products_author, p.products_isbn, (Anmerkung: Der letzte Patch realisiert nur die Darstellung der Suchergebnisse. Eine Suche in den neuen Datenfeldern nicht!) |
![[Hauptseite]](/skins/common/images/wiki.png)




