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  
8-05-14 14:56:46 Fehlermeldung
Christian M
Hallo,

ich benutze TYPO3 4.7.15 mit ttproducts 2.7.8 und allen nötigen Extensions in aktuelle Version.
PHP ebenfalls aktuellste Stable Version.

Ich bekomme beim Aufruf meines Shops (Produktliste) folgende Fehlermeldung angezeigt:

Warning: Illegal string offset 'name' in /var/www/web256/html/meineseite.de/typo3conf/ext/tt_products/view/class.tx_ttproducts_info_view.php on line 301
In Zeile 301 fragt er irgendetwas mit delivery & billing ab.
Die Sachen benutze ich jedoch gar nicht und sie sind auch nicht in meinem Template enthalten.
8-05-14 16:02:47 PHP
Franz Holzinger
Welche PHP Version ist im Einsatz?

requiredInfoFields enthält 'name', oder?

---------------
if (trim($this->infoArray['billing'][$fName]) == '' || ($type != 'billing') && trim($this->infoArray['delivery'][$fName]) == '' && $bBillingTo) {

--------------------
Am besten diese Debug Anweisung eine Zeile vorher einfügen und das Ergebnis mitteilen (z.B. über die Extension fh_debug).

debug ($this->infoArray['billing'], '$this->infoArray[\'billing\']');
debug ($infoFields, '$infoFields');

8-05-14 17:28:00 Antwort
Christian M
PHP Version 5.4.8

requiredInfoFields finde ich wo?
8-05-14 19:13:07 Setup
Franz Holzinger
requiredInfoFields = name, address, telephone, email

Am besten sollte diese Debug Anweisung eingefügt werden:

debug ($this->infoArray, '$this->infoArray');

8-05-14 19:55:13 Felder
Christian M
Wo genau finde ich diese felder?
8-05-14 20:24:37 Typoscript Setup
Franz Holzinger
Das ist Bestandteil des Typoscript Setups für tt_products. Die Feldnamen stammen aus der Datenbank Tabelle fe_users.
9-05-14 10:34:20 Debugging
Christian M
Mit dem Debug Code:

"if (trim($this->infoArray['billing'][$fName]) == '' || ($type != 'billing') && trim($this->infoArray['delivery'][$fName]) == '' && $bBillingTo) {}"

(Die Andere Debug anweisung erwirkt gar nichts)

kommt nur eine zweite Fehlermeldung:

"Warning: Illegal string offset 'email' in /var/www/web256/html/meineseite.de/typo3conf/ext/tt_products/view/class.tx_ttproducts_info_view.php on line 300


Warning: Illegal string offset 'name' in /var/www/web256/html/meineseite.de/typo3conf/ext/tt_products/view/class.tx_ttproducts_info_view.php on line 302"


im TS steht folgendes:

plugin.tt_products {
templateFile = fileadmin/templates/tt_products/products_de.html
pid_list = 207
wrapInBaseClass = 0
debug = 1

requiredInfoFields = name, address, telephone, email
separateImage = 1
}

Und in den Constanten:

## tt_products Constants
plugin.tt_products.pid_list = 207
plugin.tt_products.PIDitemDisplay = 287
plugin.tt_products.PIDlistDisplay = 287
plugin.tt_products.orderByItemNumberSg = 0
plugin.tt_products.orderEmail_order2 = 0
plugin.tt_products.showNotinStock = 0
plugin.tt_products.displayCurrentRecord = 1
plugin.tt_products.clickIntoBasket = 1
plugin.tt_products.separateImage = 1
plugin.tt_products.PIDagb = 7
plugin.tt_products.PIDbasket = 292
plugin.tt_products.PIDfinalize = 294
plugin.tt_products.file.templateFile = fieleadmin/templates/tt_products/products_de.html
plugin.tt_products.color1 = #CCCCCC
plugin.tt_products.editLockedLoginInfo = 0
plugin.tt_products.debug = 0
plugin.tt_products.ajaxDebug = 0
plugin.tt_products.getDiscountPrice = 0
plugin.tt_products.quantityIsFloat = 0
plugin.tt_products.clickIntoList = 0
plugin.tt_products.clickItemsIntoSubmenu = 0
plugin.tt_products.alwaysAdvanceOrderNumber = 0
plugin.tt_products.usePageContentImage = 0
plugin.tt_products.NoSingleViewOnList = 0
plugin.tt_products.loginUserInfoAddress = 0
plugin.tt_products.PIDbilling = 296
9-05-14 11:54:24 Debug Ausgabe
Franz Holzinger
Wo ist nun die Debug Ausgabe? Womit ist diese erstellt worden?

Änderungsvorschlag:
Das gesamte 2. Foreach der "function checkRequire" ersetzen durch:

---------------------------
foreach($infoFields as $k => $fName) {
if (
(
is_array($this->infoArray['billing']) &&
trim($this->infoArray['billing'][$fName]) == ''
) ||
(
$type != 'billing' &&
$bBillingTo &&
is_array($this->infoArray['delivery']) &&
trim($this->infoArray['delivery'][$fName]) == ''
)
) {
$rc = $fName;
break;
}
}
9-05-14 12:46:38 Debugger
Christian M
Die änderung verschiebt den Fehler nur im PHP

Warning: Illegal string offset 'name' in /.../typo3conf/ext/tt_products/view/class.tx_ttproducts_info_view.php on line 239


if (!trim($this->infoArray['delivery'][$field])) {
$bMissingField = TRUE;
break;
}
}

Die aktuelle Debug extension fh_debug (0.4.0-0.5.0) ist in Verbindung mit der Typo3 version 4.7.15 nicht kompatibel. Die fh_debug (0.3.6) unterstützt leider nicht die PHP Version 5.4.8. Gibt es eine andere extension gibt die gut zum Debuggen ist?
9-05-14 14:30:22 Korrektur
Franz Holzinger
An obiger Stelle muss dieselbe Änderung gemacht werden:
-------
if (!$this->bDeliveryAddress) {
foreach ($requiredInfoFieldArray as $field) {
if (
isset($this->infoArray['delivery']) &&
!trim($this->infoArray['delivery'][$field])
) {
$bMissingField = TRUE;
break;
}
}
}
----------

Ggf. muss auch in fh_debug eine is_array Prüfung an denjenigen Stellen eingebaut werden, an welchen es zu error_log Einträgen kommt.
Es gibt mehrere Debug Extensions im TYPO3 TER. Ich habe diese aber seit Jahren nicht mehr verwendet.
9-05-14 14:31:35 is_array
Franz Holzinger
Korrektur zu oben (is_array muss verwendet werden):

if (!$this->bDeliveryAddress) {
foreach ($requiredInfoFieldArray as $field) {
if (
is_array($this->infoArray['delivery']) &&
!trim($this->infoArray['delivery'][$field])
) {
$bMissingField = TRUE;
break;
}
}
}
9-05-14 14:49:19 function init
Franz Holzinger
Hier kommt eine Lösung, die nur hinter der init Funktion der Datei view/class.tx_ttproducts_info_view.php gemacht werden muss. Damit werden die vorherigen Änderungen überflüssig.

$this->infoArray = array();

if (isset($formerBasket) && is_array($formerBasket)) {
$this->infoArray['billing'] = $formerBasket['personinfo'];
$this->infoArray['delivery'] = $formerBasket['delivery'];
}
if (!$this->infoArray['billing']) {
$this->infoArray['billing'] = array();
}
if (!$this->infoArray['delivery']) {
$this->infoArray['delivery'] = array();
}
9-05-14 15:03:46 is_array
Daniel Pfisterer
Hallo Franz,

ich habe den selben fehler der mir bei jedem Seitenaufruf einen Datenbank eintrag in das syslog ("sys_log") schreibt. Die fehlermeldung sieht wie folgt aus.
Core: Error handler (FE): PHP Warning: Illegal string offset 'name' in /.../.../typo3conf/ext/tt_products/view/class.tx_ttproducts_info_view.php line 301

- Typo3 6.1.7
- PHP 5.4.9
- tt_products 2.7.8
- div2007 1.1.4
- table 0.3.0

ich ersetze also in Zeile 301 mit:
________________________________
foreach($infoFields as $k => $fName) {
if (
(
is_array($this->infoArray['billing']) &&
trim($this->infoArray['billing'][$fName]) == ''
) ||
(
$type != 'billing' &&
$bBillingTo &&
is_array($this->infoArray['delivery']) &&
trim($this->infoArray['delivery'][$fName]) == ''
)
) {
$rc = $fName;
break;
}
}


und Zeile 237 mit:
_________________________
if (!$this->bDeliveryAddress) {
foreach ($requiredInfoFieldArray as $field) {
if (
is_array($this->infoArray['delivery']) &&
!trim($this->infoArray['delivery'][$field])
) {
$bMissingField = TRUE;
break;
}
}
}

soll ich das ganze nochmal Debuggen?

Ganz liebe Grüße
9-05-14 15:41:28 function init
Daniel Pfisterer
Habe das in die function init eingefügt (einmal Zeile 71 und Zeile 202) und bekomme weiterhin die selbe fehlermeldung.
______________________________

$this->infoArray = array();

if (isset($formerBasket) && is_array($formerBasket)) {
$this->infoArray['billing'] = $formerBasket['personinfo'];
$this->infoArray['delivery'] = $formerBasket['delivery'];
}
if (!$this->infoArray['billing']) {
$this->infoArray['billing'] = array();
}
if (!$this->infoArray['delivery']) {
$this->infoArray['delivery'] = array();
}

Die zuvor Vorgeschlagene lösung behebt den PHP Fehler.
31-10-16 20:36:43 Fehlerhafter "zurück zur Liste Button"
Luca Calmonte
Hallo Zusammen,

ich habe einen Produktkatalog mit tt_products angelegt. Nun habe ich jedoch ein Problem mit der Einzelansicht. Wenn ich beim ersten Mal von der Kategorienansicht in die Einzelansicht welche, so funktioniert dies perfekt. Gehe ich dann nochmals in die Einzelansicht eines Produktes und will wieder zurück zur Liste gibt mir tt_products folgende Fehlermeldung an:

Produkte: Falscher Parameter. GET/POST var 'tt_products[product]' wurde nicht angegeben oder kein Element mit uid = 0 auf den erlaubten Seiten (2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,22,23,24,29,30,31,32,33,34,35,36,37,38,39,40,45,46,47,49,50,51,52,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74) gefunden

Anstelle der Kategorie Seite sehe ich im URL, dass dort die falsche Seite ausgewählt wird.

Anstelle von:
/de/produkte2/kategorie/?tt_products%5BbackPID%5D=50&tt_products%5Bcat%5D=13&cHash=df2f8e7dd5520787abe2a3035eea8d05

wird nun:
/de/produkte2/detail/?tt_products%5BbackPID%5D=50&tt_products%5Bcat%5D=13&cHash=df2f8e7dd5520787abe2a3035eea8d05

angegeben. Somit sieht es aus als würde nicht die korrekte Seite "/de/produkte2/kategorie/...@ aufgerufen.

Habe mich versucht irgendwie da durch zu kämpfen aber leider nichts gefunden.

Kann mir da jemand helfen ?

Vielen Dank.
31-10-16 21:41:29 falscher Link
Franz Holzinger
Beim letzten Link ist der Parameter 'tt_products[product]' verloren gegangen, deshalb wird ein Produkt mit uid=0 angenommen, das es aber gar nicht geben kann.

Es fehlt etwas in diesem Format:

&tt_products%5Bproduct%5D=25

Untersuche nun, von wo aus in die Produkte Einzelansicht verlinkt worden ist. Das muss nur einen URL-Marker geschehen sein, der über ein Produkt in der Listenansicht in die Einzelansicht zeigt.
In welcher tt_products Version tritt das auf?
8-11-16 06:44:44 Fehlerhafter "zurück zur Liste Button"
Luca
Hallo Franz,

vielen Dank für dein rasches Feedback

Bei mir ist tt_products in der Version 2.8.10 im Einsatz.

Ich starte wei folgt:
- Lokomotiven (auswahlseite der Kategorien)
- Link zu Kategorie Seite -> http://www.hag.ch/de/produkte2/kategorie/?tt_products%5Bcat%5D=13&cHash=cc9b8915a83342f414af2a7786751b76
- Nun wird eine Liste der Artikel der jeweiligen Kategorie angezeigt.
- Link zum Detail --> http://www.hag.ch/de/produkte2/detail/?tt_products%5Bcat%5D=13&tt_products%5Bproduct%5D=1&cHash=a622327749ee06c3c78e282006ec40c5
- Detailseite wird korrekt angezeigt, Navigation weiter und zurück funktioniert ebenfalls perfekt
- Zurück zur Liste ->http://www.hag.ch/de/produkte2/kategorie/?tt_products%5BbackPID%5D=50&tt_products%5Bcat%5D=13&cHash=df2f8e7dd5520787abe2a3035eea8d05
- Seite mit den Produkten je Kategorie wird korrekt angezeigt
- Link in gleiches Produkt -> http://www.hag.ch/de/produkte2/detail/?tt_products%5BbackPID%5D=50&tt_products%5Bcat%5D=13&tt_products%5Bproduct%5D=1&cHash=101792cc97fb91aee4b5c626ba3dbb4e
- Zurück zur Liste -> http://www.hag.ch/de/produkte2/detail/?tt_products%5BbackPID%5D=50&tt_products%5Bcat%5D=13&cHash=df2f8e7dd5520787abe2a3035eea8d05

Was mich sehr irritiert ist, dass beim ersten Aufruf der Link funktioniert und erst beim zweiten Besuch der Link nicht mehr funktioniert. Ich kann mir aber nicht erklären aus welchem Grund

Die Seite ist wei folgt aufgebaut:
- Produkte (Auswahl der einzelnen Produktgruppen - ohne tt_products)
-- Lokomotiven (Kategorieansicht nur der Lokomotiven)
-- Personenwagen (Kategorieansicht nur der Personenwagen)
-- Güterwagen (Kategorieansicht nur der Güterwagen)
- Kategorie (alle Produkte der jeweiligen Kategorie)
- Detail (Einzelansicht der Produkte)

Einstellungen:
- Standardmässig, keine Änderung vorgenommen

Konstanten:
plugin.tt_products.PIDlistDisplay = 63 (Kategorieansicht)
plugin.tt_products.PIDitemDisplay = 50 (Einzelansicht)
plugin.tt_products.maxW_listRoot = 800
plugin.tt_products.debug = 0

plugin.tt_products.test = 815
plugin.tt_products.maxW_listHasChilds = 700
plugin.tt_products.maxW_listcat = 700
plugin.tt_products.maxW_list = 700
plugin.tt_products.maxW_basket = 200
plugin.tt_products.maxH_listRoot = 300
plugin.tt_products.maxH_listcat = 400
plugin.tt_products.maxH_list = 400
plugin.tt_products.maxH_listHasChilds = 400


plugin.tt_products.clickEnlarge_listHasChilds = 0
plugin.tt_products.clickEnlarge_basket = 0
plugin.tt_products.clickEnlarge_list = 0
plugin.tt_products.maxW_single = 1200
plugin.tt_products.maxW_popup = 1600


Habe versucht die andere Extension mbi_products_categories (Version 0.1.4) in das ganze einzubinden, wenn ich diese aktiviere dann killt es mir dias Typo 3 komplett (aktuell Typo3 7.6.9 Migration auf 7.6.12) in Arbeit)
8-11-16 06:49:26 Fehlerhafter "zurück zur Liste Button"
Luca
Anbei noch die Aufstellung der Sys Ordner

- Kategorien
-- Lokomotiven
--- Enthält z.B. Kategorie Re 460
-- Personenwagen
-- Güterwagen

- Produkte
-- Lokomotiven
--- Re 460
---- Enthält alle Produkte welche der Kategorie Re 460 zugeordnet sind.
-- Personenwagen
-- Güterwagen
8-11-16 21:36:19 2.8.13
Franz Holzinger
Das tt_products muss zuerst auf 2.8.13 aktualisiert werden. Vielleicht ist der Fehler inzwischen schon behoben.

https://github.com/franzholz/tt_products/releases/tag/Version-2-8-13

9-11-16 12:12:26 Fehlerhafter "zurück zur Liste Button"
Luca
Besten Dank für die Info, ich habe tt_products aktualisiert.

Leider habe ich diesen Fehler immer noch
Beim ersten Aufruf funktioniert der Link, ab dem zweiten dann nicht mehr
21-12-16 21:33:31 Fehlerhafter "zurück zur Liste Button"
Luca
Also, ich habe nochmals alles geprüft und auf den Kopf gestellt.
Ich kann diesen Fehler nur verhindern, wenn ich für jede Kategorie eine Seite mit den jeweiligen Artikeln und anschliessend den dazugehörigen Detailseiten erstelle. Auf allen Seiten muss ein Ext Template angegeben werden In jedem dieser Templates gebe ich die Seiten ID an und schon funktioniert dies mit den Links wieder. Aus welchem Grund es bislang nicht funktioniert hat, habe ich nach wie vor nicht herausgefunden.
23-12-16 14:44:21 nicht reproduzierbar
Franz Holzinger
Ich kann dieses Verhalten mit der tt_products 2.8.13 aus dem Github nicht reproduzieren.
Wegen Realurl ist es schwer festzustellen, welche Page-Id die Produktliste hat. Es wird immer der backPID Parameter übergeben. Das ist die Seiten-Id, wohin der Link zurück führen muss. Offensichtlich wird einmal eine falsche Seiten-Id für den backPID Parameter übergeben. Aber wo tritt das auf? Dort wäre der Fehler zu suchen. Doch im PHP Code für bei backPID immer die gerade aktuelle Seiten Id eingetragen. Also kann es diesen Fehler eigentlich nicht geben. Am besten noch Realurl abschalten und das herausfinden.
< Zurück zum Forum