Zum Inhalt springen

tt_products erweitern: markerArray will nicht

Erstellt am 19. Januar 2010 · 4 Antworten · letzte Antwort am 20. Januar 2011

Tags: Frage

tobyte ·

Hallo alle zusammen,

meine Programmierfähigkeiten sind gerade erst in der Entwicklung, daher bitte ich um Nachsicht 🙂 . Ich wollte tt_products um ein paar Felder erweitern und habe dazu die Tabellen von tt_products mit dem Kickstarter erweitert. In der neuen Extension habe ich nun eine neue Klasse angelegt:

<?php
class tx_extkey_marker {

function getRowMarkerArray ($pObj, &$markerArray, &$cObjectMarkerArray, $row, $imageNum, $imageRenderObj, &$forminfoArray, $theCode, $id, $linkWrap)
  {
  $row = &$item['rec'];
  $markerArray['###EXTAUTOR###'] = $row['tx_extkey_autor'];
  $markerArray['###EXTFORMAT###'] = $row['tx_extkey_format'];
  $markerArray['###EXTISBN###'] = $row['tx_extkey_isbn'];
  $markerArray['###EXTRELEASE###'] = $row['tx_extkey_releasedate'];
  $markerArray['###EXTCOVER###'] = $row['tx_extkey_cover'];
  $markerArray['###EXTCOMMENT###'] = $row['tx_extkey_comment'];
  $markerArray['###EXTPAGES###'] = $row['tx_extkey_pages'];
  }
}
?>

leider werden die Marker in meinem Template jetzt einfach nur direkt wieder ausgaben ... also steht dort z.B. ###EXTAUTOR###.

Wenn ich das ganze mit der Funktion getItemMarkerArray aufrufe:

<?php
class tx_extkey_marker {

function getItemMarkerArray (&$parent, &$markerArray, $item, $catTitle, $imageNum, $imageRenderObj, $forminfoArray, $theCode, $id) 
  {
  $row = &$item['rec'];
  $markerArray['###EXTAUTOR###'] = $row['tx_extkey_autor'];
  $markerArray['###EXTFORMAT###'] = $row['tx_extkey_format'];
  $markerArray['###EXTISBN###'] = $row['tx_extkey_isbn'];
  $markerArray['###EXTRELEASE###'] = $row['tx_extkey_releasedate'];
  $markerArray['###EXTCOVER###'] = $row['tx_extkey_cover'];
  $markerArray['###EXTCOMMENT###'] = $row['tx_extkey_comment'];
  $markerArray['###EXTPAGES###'] = $row['tx_extkey_pages'];
  }
}
?>

verschwinden zwar die Marker in meiner Ausgabe, sie werden allerdings auch nicht befüllt. Also erhalte ich gar keine Ausgabe. Die Verbindung etc. sollte allerdings klappen, wenn ich nämlich z.B.

 $markerArray['###EXTAUTOR###'] = $row['tx_extkey_autor'];

in

$markerArray['###EXTAUTOR###'] = $row['title'];

änder, wird der Marker korrekt mit dem Titel ausgeliefert.

Könnt ihr mir weiterhelfen?

Viele Grüße
Tobias

tobyte ·

Es will einfach nicht klappen ... evtl. reichen die Informationen ja auch noch gar nicht aus um das Problem erkennen zu können. Hier noch ein paar Infos: Ich benutze tt_products 2.6.0 und TYPO3 4.2.8. Ich gehe jetzt nochmal ganz von vorne ran und will erstmal nur einziges Feld hinzufügen, wenn das klappt kann man darauf aufbauen. Hier mein Vorgehen:

1. TYPO3 BE Erw-Manager auswählen
2. Create new Exttension
3. extension Key: prodexp -> Update
4. General Info: Title:prodexp; Category:Examples -> Update
5. Extend existing Tables:
Which table: tt_procuts (Produkte)
New Field: Name: test; field title: test; field type: string input -> Update
6. View result -> WRITE -> Info Box (OK)
7. Install extension -> Make Updates (ALTER TABLE tt_products ADD tx_prodexp_test tinytext😉
8. Anlegen von "class.prodexp.php" im Verzeichnis "EXT:prodexp"

Inhalt class.prodexp.php:

<?php
class tx_prodexp_marker {

function getItemMarkerArray (&$parent, &$markerArray, $item, $catTitle, $imageNum, $imageRenderObj, $forminfoArray, $theCode, $id) {
  $row = &$item['rec'];
  $markerArray['###MEINMAKRER###'] = $row['tx_prodexp_test'];
  }
}
?>

8. manuelles Anlegen von "ext_localconf.php" im Verzeichnis "EXT:prodexp"

Inhalt ext_localconf.php:

<?php
$TYPO3_CONF_VARS['EXTCONF']['tt_products']['PRODUCT'][] = 'EXT:prodexp/class.prodexp.php:tx_prodexp_marker';
$TYPO3_CONF_VARS['EXTCONF']['tt_products']['ARTICLE'][] = 'EXT:prodexp/class.prodexp.php:tx_prodexp_marker';
$TYPO3_CONF_VARS['EXTCONF']['tt_products']['extendingTCA'][] = 'prodexp';
?>

9. öffnen eines tt_products datensatz (Produkte) -> wechsel auf Reiter "Versand" -> ins Feld "test" einen wert eintragen bsp.: "Hallo Welt" -> Speichern schliessen
10. shop template datei öffnen und Marker hinzugfügt ###TEST###
11. FE / BE Cache leere
12. Seite auf welcher der Datensatz erscheint im FE aufrufen
13. Marker wird nicht angezeigt also kein ###MEINMARKER### wird ausgegeben, das zeigt mir ja, dass er etwas mit dem Marker anfangen kann ... aber er gibt mir auch kein "Hallo Welt" (Punkt 9) aus.

tobyte ·

Ich denke das Problem hängt irgendwie damit zusammen, dass ich in tt_products noch die neu angelegten Spalten anmelden muss, damit sie mir zur Verfügung stehen. Ich bin bisher davon ausgegangen das ich das in der ext_tables.php mache durch die Zeilen:

t3lib_div::loadTCA('tt_products');
t3lib_extMgm::addTCAcolumns('tt_products',$tempColumns,1);
t3lib_extMgm::addToAllTCAtypes('tt_products','tx_prodexp_test;;;;1-1-1');

gibt es noch eine weitere Stelle, an welcher ich die neuen Spalten angeben muss, damit sie mir in tt_products zur Verfügung stehen?

Viele Grüße
Tobias

tobyte ·

Ich hab eine "Lösung" für mein Problem gefunden, es schmeckt mir allerdings nicht so richtig muss ich zugeben. Wenn ich mein TypoScript erweiter im Setup um folgende Zeile:

plugin.tt_products.conf.tt_products.ALL.requiredFields:=addToList(tx_prodexp_test)

werden meine Marker korrekt ausgegeben. Mich stört an dieser Lösung allerdings, dass ich die Marker/Tabellen-Spalten über Typoscript Code freischalten muss? Da muss es doch auch einen eleganteren weg geben, direkt in der neuen Erweiterungs Extension die Marker/Tabellen-Spalten zur Verfügung zu stellen.

Wenn ich übrigens die tca.php von tt_products manuell erweiter um:

'tx_prodexp_test' => array (		
		'exclude' => 0,		
		'label' => 'LLL:EXT:prodexp/locallang_db.xml:tt_products.tx_prodexp_test',		
		'config' => array (
			'type' => 'input',	
			'size' => '30',
		)
	),

steht mir mein marker in der Single Ansicht auch zur Vefügung. Diese Gegebenheit untermauert nochmal meine Vermutung, dass mein Fehler irgendwo bei der Bereitstellung der Spalten liegt.

Ich werde jetzt allerdings erstmal gezwungenermaßen mit der Typoscript Lösung leben. Den Beitrag werde ich aber noch nicht als gelöst markieren, da ich mit der Lösung nicht wirklich zufrieden bin.

Viele Grüße
Tobias

sini ·

hallo tobi,

ich weiss nicht in welcher ansicht du deine Marker brauchst, aber ich hab da heut auch viel zeit mit verbracht, die im Warenkorb auszugeben.

ich hab statt dem hook $TYPO3_CONF_VARS['EXTCONF'][TT_PRODUCTS_EXTkey]['PRODUCT'][] am ende den verwendet:

für die ext_localconf.php in meiner Extension:

$TYPO3_CONF_VARS['EXTCONF'][TT_PRODUCTS_EXTkey]['addGlobalMarkers'][] = 'EXT:meine_extension/class.in_meiner_extension.php:klassen_name_in_meiner_extension';

und dann eben in meiner datei class.in_meiner_extension.php innerhalb der Klasse die Funktion:

public function addGlobalMarkers(&$markerArray){
}

vielleicht hilfts dir