Typo3 8: Queries debuggen

25. September 2017

In typo3 8 kann man queries nicht mehr so wie vorher debuggen (das wäre ja auch zu einfach). Ich hab mir im DebugService eine statische Methode geschrieben, mit der es wieder funktioniert:

  1. public static function debugQuery($query){
  2. $objectManager = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\Object\\ObjectManager');
  3. $queryParser = $objectManager->get(\TYPO3\CMS\Extbase\Persistence\Generic\Storage\Typo3DbQueryParser::class);
  4. \TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($queryParser->convertQueryToDoctrineQueryBuilder($query)->getSQL());
  5. \TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($queryParser->convertQueryToDoctrineQueryBuilder($query)->getParameters());
  6. }

Typo3 8: styles.content.get -> weiße Seite

19. Juli 2017

Mit Typo3 8.7.0 hatte ich plötzlich das Problem, dass page.10.variables mit styles.content.get zu einer weißen Seite führte, sobald tatsächlich ein Inhalt da war. Stellt sich raus, das Problem war das hier:

  1. <f:layout name="Default" />

Offenbar darf das layout nicht Default.html heißen, weil Typo3 da irgendwelche Probleme hat. Sobald ich das in Main umbenannt habe, ging’s dann.

Datum mit deutschem Monatsnamen mit fluids format.date

30. März 2017

Mein Versuch

  1. <f:format.date format="d. F Y" date="now"/>

brachte leider immer nur einen englischen Monatsnamen zutage. Offenbar wird hier mit Datetime gearbeitet. Wenn man das Format aber mit % angibt, wird strftime benutzt, womit es geht:

  1. <f:format.date format="%d. %B %Y" date="now"/>

Magento2: Preise werden im Warenkorb falsch berechnet

23. März 2017

Wenn im Backend die Preise ohne Steuer angegeben werden, kann es bei der Berechnung des Gesamtpreises mehrerer Artikel offenbar zu Problemen kommen. Im konkreten Fall war es so, dass bei 1 Stück ein Preis von 14 Euro angezeigt wurde, bei 2 Stück dann plötzlich 14.01 und der Gesamtpreis als 28.01 berechnet wurde.

Die Lösung: die Art der Preiskalkulation kann man unter Configuration -> Tax -> Tax Calculation Method Based On auf “Unit Price” umstellen!

Magento2: AddFotoramaVideoEvents is not a function

03. Februar 2017

Wenn man die catalog_product_view.xml überschreibt, dann wird offenbar die Änderung von ProductVideo nicht mehr übernommen – man muss also diese Zeile in die eigene catalog_product_view.xml übernehmen:

  1. <container name="product.info.media" htmlTag="div" htmlClass="product media" after="product.info.main">
  2. <block class="Magento\Catalog\Block\Product\View\Gallery" name="product.info.media.image" as="media_image" template="product/view/gallery.phtml"/>
  3. <block class="Magento\ProductVideo\Block\Product\View\Gallery" name="product.info.media.video" after="product.info.media.image" template="product/view/gallery.phtml"/>
  4. </container>

der ProductVideo Block ist der, der neu dazukommt.

Magento2: konfigurierbare Artikel werfen bei klick eine JavaScript Fehlermeldung

03. Februar 2017

Es trat das Problem auf, das beim Klick auf die Optionen eines konfugurierbaren Produkts der folgende Fehler geworfen wurde:

  1. Uncaught TypeError: Cannot read property 'updateData' of undefined
  2. at $.(anonymous function).(anonymous function).updateBaseImage (http://domain.com/pub/static/frontend/Vendor/theme/de_DE/Magento_Swatches/js/swatch-renderer.js:920:28)

Wenn man das googelt, findet man recht schnell, dass der Parent Container die Klassen main und column haben. Hier war das allerdings nur Teil der Lösung, bei Attributen mit Text-Swatch hat das alleine nicht gereicht, da das Theme zu sehr verändert wurde.

Die Lösung: nicht nur der Parent Container der Galerie muss diese Klassen haben, sondern der Container, die sowohl Galerie als auch die Text-Swatch Auswahl umschließt.

Magento2: Attribute eines Produkts aus einer bestimmten Attributgruppe

15. Dezember 2016

Um im Magento in einer phtml Datei alle Attribute eines Produkts, die zu einer bestimmten Gruppe (namens “customattributes”) gehören, habe ich mir einen Helper geschrieben, der folgendes macht:

  1. class Product extends \Magento\Framework\App\Helper\AbstractHelper
  2. {
  3. const CUSTOMATTRIBUTE_GROUP_NAME = 'customattributes';
  4. public $groupCollectionFactory;
  5. public function __construct(
  6. \Magento\Eav\Model\ResourceModel\Entity\Attribute\Group\CollectionFactory $groupCollectionFactory
  7. ){
  8. $this->groupCollectionFactory = $groupCollectionFactory;
  9. }
  10. public function getAttributesForProduct($_product){
  11. $groupCollection = $this->groupCollectionFactory->create();
  12. $groupCollection->addFieldToFilter('attribute_group_name',self::CUSTOMATTRIBUTE_GROUP_NAME);
  13. $groupCollection->addFieldToFilter('attribute_set_id', $_product->getAttributeSetId());
  14. $group = $groupCollection->getFirstItem();
  15. $data = array();
  16. $c = 0;
  17. $productAttributes= $_product->getAttributes();
  18. foreach ($productAttributes as $attribute) {
  19. if ($attribute->isInGroup($_product->getAttributeSetId(), $group->getAttributeGroupId())) {
  20. if ($attribute->getFrontend()->getValue($_product)) {
  21. $data[$c]['attribute'] = $attribute->getFrontendLabel();
  22. $data[$c]['value'] = $attribute->getFrontend()->getValue($_product);
  23. $c++;
  24. }
  25. }
  26. }
  27. return $data;
  28. }
  29. }

Das liefert ein schönes Array mit allen Attributen und ihren Werten für das aktuelle Produkt zurück.

SSH: alle Symlinks des aktuellen Ordners mit Pfad anzeigen

27. September 2016

Ganz einfach (wenn mans weiß):

  1. find ./ -type l -ls

Typo3 7: Bilder im RTE aktivieren

23. August 2016

Offenbar ist die Bilder-Funktion nicht standardmäßig aktiviert. Man kann dies ändern unter Extensions -> HtmlArea RTE -> Configure -> Enable images in the RTE.
rte

Typo3 7: manuelles Frontend-einloggen will nicht funktionieren

22. August 2016

In einer Typo3 7.6.10 Installation musste ich Frontend-User via Ajax manuell einloggen. Das wollte partout nicht funktionieren und beim Betrachten der $GLOBALS[‘TSFE’] fiel mir auf, dass fe_user->user zwar gesetzt war, dass $GLOBALS[‘TSFE’]->loginUser aber immer wieder zurückgesetzt wurde nach dem neuladen der Seite. Irgendwann war mir das googeln zu blöd und ich hab im Typo3 source das Problem in der initUserGroups in sysext/frontend/Classes/Controller/TypoScriptFrontendController.php gefunden: mein User hatte einfach keine fe_groups zugewiesen (d.h. die Spalte “usergroup” in fe_users war leer). Sobald ich dort eine gültige fe_groups ID eingetragen habe, klappte der manuelle Frontend Login folgendermaßen:

  1. $loginData = array(
  2. 'username' => $username,
  3. 'uident_text' => $password,
  4. 'status' => 'login',
  5. );
  6. $GLOBALS['TSFE']->fe_user->checkPid = 0;
  7. $info = $GLOBALS['TSFE']->fe_user->getAuthInfoArray();
  8. $user = $GLOBALS['TSFE']->fe_user->fetchUserRecord($info['db_user'], $loginData['username']);
  9. //check password etc.
  10. if ($this->loginSuccessful($user, $password)) {
  11. $tsfe = $GLOBALS['TSFE'];
  12. $tsfe->fe_user->createUserSession($user);
  13. $tsfe->fe_user->setAndSaveSessionData('dummy', TRUE);
  14. $tsfe->loginUser = 1;
  15. return json_encode(['status' => 'success']);
  16. }