Zum Inhalt springen

commerce: Weitere Felder für Artikel

Erstellt am 6. März 2008 · 2 Antworten · letzte Antwort am 10. September 2008

Tags: TCA, Frage

smilecloud ·

Hallo Forum,

wie geht man am besten vor, wenn man für einen Artikel weitere Felder braucht.
Konkretes Beispiel:
Die Artikel sind Bücher. Pro Buch soll u.a. Erscheinungsjahr, Seitenzahl, Autoren (1:n)-Beziehung (ss soll nach Autoren gefiltert werden) eingetragen werden.

Löst man dies alles über die Attribute? Laut Screendesign sind die Attribute nicht alle untereinander aufgelistet, sondern Autoren oberhalb des Beschreibungstextes, Seitenzahl unterhalb des Beschreibungstextes, usw.
Falls man dies nun über Attribute macht, wie kann man diese einzeln herauspicken und im Template darstellen?

Oder erstelle ich hier eine Extension, die die Tabelle des Artikels um weitere Felder erweitert? Wie werden diese dann in der Artikeldetailansicht dargestellt?

Fragen über Fragen :-)

Pro Autor soll es auch noch einen Link zu dessen Homepage geben. Ich denke trotzdem, dass dies immer noch eine relativ einfache Shopstruktur ist, daher sind solche Anforderungen doch sicher vorgesehen.

Wer weiß bescheid und teilt mit mir sein Wissen?

Gruß,
Peter

mischi ·

Hallo smilecloud,

hast du diese Problem gelöst? Möchte auch gern über das commerce-template die Artikelattribute extra ansprechen und ausgeben. Ist das eigentlich möglich? Steh da gerade voll an, vielleicht kannst du mir weiter helfen, wie man die "###ARTICLE_SELECT_ATTRIBUTES###" einzeln nach einander ausgeben kann!

Lg mischi

smilecloud ·

Hi mischi,

habe keine Lösung im Commerce selbst gefunden. Daher habe ich die Hooks der commerce-Extension angezapft:

Eigene Extension erstellt -> in der "ext_localconf.php" meine hook-funktion registriert:

$GLOBALS ['TYPO3_CONF_VARS']['EXTCONF']['commerce/lib/class.tx_commerce_pibase.php']['product'][] = 'EXT:user_mycommerce/class.user_mycommerce_hooks.php:user_mycommerce_hooks';

danach die Klasse "class.user_mycommerce_hooks.php" erstellt, die folgende funktion enthält:

<?php

class user_mycommerce_hooks {

	function additionalMarkerProduct($markerArray,$myProduct,$senderObj) { 

		$products = $this->getProducts('tx_commerce_products.uid='.$myProduct->getUid());
		if (is_array($products)) {
			$dataArray = $products[0];
		}
			
		if (is_array($dataArray)) {
			$productUid = $dataArray['uid'];
			$productImages = $dataArray['images'];
			$productTitle = $dataArray['title'];
			$productSubtitle = $dataArray['subtitle'];
			$productDescription = $dataArray['description'];
		} else {
		/*
			no product data found => error?
		*/
		}
		
		$additionalMarkers = array();
		if (is_array($dataArray)) {
			if (is_array($dataArray['attributes'])){
				foreach ($dataArray['attributes'] as $myAttributeTitle => $myAttributeValues) {
					$additionalMarkers = $this->makeAttributeMarker($additionalMarkers, $myAttributeTitle, $myAttributeValues);
				}
			}
			
			
		} else {
		   /*
		   error
	  		*/
		}
		
		//markers
		$tempMarkers = array();
		foreach ($additionalMarkers as $marker_title => $marker_value) {
			$tempMarkers[$marker_title] = $marker_value;
			$tempMarkers[$marker_title.'_NOBREAK'] = str_replace('_', ' ', str_replace(' ', ' ', $marker_value));
		}
		
		foreach ($tempMarkers as $marker_title => $marker_value) {
			$markerArray['###'.$marker_title.'###'] = $marker_value;
		}
		
		return $markerArray;
	}
	
	function makeAttributeMarker($markerArray, $attributeTitle, $values) {
	
		$orig_values = $values;

		$attributeTitle = strtolower($attributeTitle);

		$marker_name = 'MD_ATTRIBUTE_'.strtoupper(str_replace(' ', '_', $attributeTitle));
		
		//convert muliple values to commasep. string
		$marker_content = implode(', ', $values);

		$markerArray[$marker_name] = $marker_content;

		return $markerArray;
	}
	
}


?>

Damit werden für alle Attribute entsprechend neue Marker generiert, die man in der Produktansicht verwenden kann.

Ich hoffe, das hilft dir weiter.

Gruß,
Peter

http://www.rauber-service.de