Franz Holzinger

Verse of the day

Denn es ist ein Gott und ein Mittler zwischen Gott und den Menschen, nämlich der Mensch Christus Jesus, der sich selbst gegeben hat für alle zur Erlösung, daß solches zu seiner Zeit gepredigt würde;
1 Timotheus 2:5-6

© Bible Gateway's Verse of the Day


autor  
26-08-11 10:09:33 ###PARENT_CATEGORY_TITLE### Fatal error
Andreas Weis
Hallo,

ich möchte in der Produktliste die Eltern Kategorie der Produkt
Kategorie mit anzeigen. Leider bekomme ich einen Fatal error:

Fatal error: Call to undefined method
tx_ttproducts_category_view::getRowCategory() in
/Pfad/Zur/Installation/typo3conf/ext/tt_products/view/class.tx_ttproducts_category_base_view.php
on line 88

wenn ich versuche mit dem Marker ###PARENT_CATEGORY_TITLE### auf den
Titel der Eltern-Kategorie zuzugreifen

In der Klasse tx_ttproducts_category_view wird versucht mit $this auf eine Methode zuzugreifen, die jedoch in der Klasse
tx_ttproducts_category, bzw tx_ttproducts_category_base liegt. Liegt hier ein Fehler vor, oder habe ich irgendwo eine Konfiguration
vergessen?

Meine Konfiguration:

TYPO3 4.5.5
tt_products 2.7.2
mbi_products_categories 0.1.4
nsb_cat2menu 0.0.1
26-08-11 20:44:00 Korrektur zu tt_products 2.7.2
Franz Holzinger
Die Datei view/class.tx_ttproducts_category_base_view.php muss geändert werden.

Statt '$this->' muss an 3 Stellen ein '$this->getModelObj()->' kommen:

---------------------------
$currentCategory = $this->getModelObj()->getRowCategory($row);
$parentCategory = '';

foreach ($parentArray as $key => $parent) {
do {
$parentRow = $this->getModelObj()->getParent($currentCategory);
$parentCategory = $parentRow['uid'];
$parentPid = $this->getModelObj()->getRowPid($parentRow);
$count++;
---------------------------
26-08-11 20:58:00 Fast am Ziel
Andreas Weis
Hallo Herr Holzinger, danke für die schnelle Hilfe. Der Fatal Error ist behoben (das hatte ich zwischenzeitlich auch schon korrigiert )

Allerdings wird der Marker leer ersetzt. D.h. ###PARENT_CATEGORY_TITLE### wird nicht mit dem Titel gefüllt?

Wenn ich mir in tx_ttproducts_list_view

$categoryTableView->getParentMarkerArray (
$catParentArray,
$row,
$categoryMarkerArray,
$displayCat,
$row['pid'],
$this->config['limitImage'],
'listcatImage',
$viewCatTagArray,
array(),
$pageAsCategory,
$theCode,
1,
''
);
print_r($catParentArray);
ausgeben lasse bekomme ich folgendes:
Array ( [0] => ) Array ( [0] => ) Array ( [0] => ) Array ( [0] => ) Array ( [0] => ) Array ( [0] => ) Array ( [0] => ) Array ( [0] => ) Array ( [0] => ) Array ( [0] => )

Das sollte nicht so sein, oder?
26-08-11 22:53:31 PARENT-Marker
Franz Holzinger
Das Array $catParentArray muss immer mit allen Kategoriefeldern befüllt sein, für die es einen PARENT-Marker im HTML Shop Template gibt. Der Inhalt des Arrays sieht sehr falsch aus.

Es wird in der Datei
marker/class.tx_ttproducts_marker.php
erzeugt.

26-08-11 23:06:10 getMarkerFields
Andreas Weis
ich schätze das problem liegt in dieser Routine:

$parentFound = strpos($tag, 'PARENT');
if ($parentFound !== FALSE) {
$parentEnd = strpos($tag, '_');
$parentLen = strlen('PARENT');
$temp = substr($tag, $parentLen, ($parentEnd - $parentFound) - $parentLen);
$parentArray[] = $temp;
}

dort wird der gesamte String gelöscht (statt nur des "PARENT", wie ich annehme)
Leider weiss ich nicht was am Ende rauskommen muss, sonst hätte ich die Lösung dazugepostet. Ich habe auch probiert, das PARENT einfach rauszuschneiden, dann bekomme ich folgenden Array:

Array ( [0] => CATEGORY_TITLE )

Allerdings tut sich in der Frontendausgabe trotzdem nichts. Wie muss der Array denn korrekt aussehen, damit der Marker dann auch mit den richtigen Daten befüllt wird?
27-08-11 12:08:13 Korrektur zu tt_products 2.7.2
Franz Holzinger
marker/class.tx_ttproducts_marker.php:

Am Ende:
$parentArray = array_unique($parentArray);
sort($parentArray);


$parentArray = array('0' ==> '');
ist richtig.


In der Datei view/class.tx_ttproducts_category_view.php sollte am Ende des Aufrufs von parent::getItemMarkerArray ($row, $markerArray, $variantFieldArray, $variantMarkerArray, $viewCatTagArray, $theCode, TRUE, '', $prefix, $imageRenderObj);
das $markerArray richtig für den PARENT_CATEGORY_TITLE ausgefüllt sein. Das $prefix wird als Parameter übergeben.
27-08-11 13:34:26 leider nicht
Andreas Weis
leider ist dieses Feature in dieser Version offensichtlich noch gar nicht vor gesehen, da der Aufruf:

$parentRow = $this->getModelObj()->getParent($currentCategory);

in model/class.tx_ttproducts_category_base_view->getParentMarkerArray() Zeile 93

ins Leere läuft, da die Methode tx_ttproducts_category->getParent folgendermaßen implementiert ist:

function getParent ($uid=0) {
$rc = array();
return $rc;
}



Haben Sie da ein funktionierendes Script? Oder ist das in der kostenlosen Version von tt_products einfach nicht vorgesehen?

Viele Grüße
27-08-11 14:00:37 Nachtrag
Andreas Weis
Ich habe jetzt die getParent() Funktion wie folgt erweitert:

function getParent ($uid=0) {
$rc = array();
if(count($this->dataArray[$uid]) && strlen(intval(trim($this->dataArray[$uid][$this->parentField])))){
$rc = $this->get($this->dataArray[$uid][$this->parentField]);
}
return $rc;
}

damit funktioniert es soweit, aber ich habe ehrlich gesagt nicht das Gefühl, dass das an dieser Stelle so richtig ist (also die direkte Abfrage des Datensatzes), da im Kommentar zur Funktion

/**
* gets the parent uid
*
* @param integer $uid
* @return integer parent
*/

steht. D.h. eigentlich sollte ja nur die UID der Elternkategorie zurückgegeben werden. Allerdings erwartet

$parentRow = $this->getModelObj()->getParent($currentCategory);

ja den kompletten Datensatz.

Wie auch immer - mit der Ergänzung funktioniert alles soweit, ich würde mich allerdings über eine kurze Rückmeldung Ihrerseits, bezüglich einer Korrektur, Optimierung, etc sehr freuen!

Vielen Dank für Ihre Bemühungen und viele Grüße aus Nürnberg
27-08-11 21:45:37 Korrektur zu tt_products 2.7.2
Franz Holzinger
Die Funktion getParent in model/class.tx_ttproducts_category.php fehlt noch.

function getParent ($uid=0) {
$result = FALSE;

$row = $this->get($uid);
if (isset($row) && is_array($row) && isset($row['parent_category'])) {
$result = $this->get($row['parent_category']);
}
return $result;
}

Das dataArray sollte an dieser Stelle nicht ausgelesen werden, sondern nur in der Basis Klasse tx_ttproducts_table_base.
< Zurück zum Forum