TYPO3 9 Conditions

Durch die Symfony Expression Language hat sich ja einiges geändert, daher hier eine lose Sammlung wie die alten TypoScript Bedinungen ersetzt werden können

Zuerst hier schon mal 2 Blogs die das schon großartig umschreiben

und schon mal eine ganz wichtige aus GP: und einem nested Array wird folgendes

[globalVar = GP:tx_ttnews|tt_news > 0]
//POST && GET
[request.getParsedBody()['tx_news_pi1']['news'] > 0 || request.getQueryParams()['tx_news_pi1']['news'] > 0]

//only GET
[request.getQueryParams()['tx_news_pi1']['news'] > 0]
[globalVar = TSFE:id=1]

[page["uid"] == 1]

bzw.

[getTSFE().id == 1]

TYPO3 9 404 aus Extensions heraus

in früheren Version von TYPO3 konnte man einfach folgenden Code nutzen damit ein entsprechender 404 geworfen wird.

$GLOBALS['TSFE']->pageNotFoundAndExit('text');

Mit TYP3 9 wird folgendes empfohlen:

            return GeneralUtility::makeInstance(ErrorController::class)->pageNotFoundAction(
                $this->request,
                'The requested page does not exist',
                ['code' => PageAccessFailureReasons::PAGE_NOT_FOUND]
            );

Ich nutze es nun immer in Zusammenhang mit einer DetailAnsicht welche meist auf einer eigenen Unterseite der Listen Ansicht, in folgender Art und Weise:

  public function detailAction(MyObject $event = null)
  {
      if ($event === null) {
            $this->handleContentNotFound();
        }
   ...
 }



/** 
     * @throws \TYPO3\CMS\Extbase\Mvc\Exception\StopActionException
     * @throws \TYPO3\CMS\Extbase\Mvc\Exception\UnsupportedRequestTypeException
     */
    public function handleContentNotFound()
    {
        $isThereAnEventId = $this->request->hasArgument('event');

        if ($isThereAnEventId === true) {
            return GeneralUtility::makeInstance(ErrorController::class)->pageNotFoundAction(
                $this->request,
                'The requested page does not exist',
                ['code' => PageAccessFailureReasons::PAGE_NOT_FOUND]
            );
        }
        $parentPageUrl = $this->uriBuilder
            ->setTargetPageUid($this->getTypoScriptFrontendController()->page['pid'])
            ->setCreateAbsoluteUri(true)
            ->build();
        $this->redirectToUri($parentPageUrl, 0, 301);
    }

In der detailAction wird zuerst geprüft ob das injecten des Objectes NICHT erfolgreich war, also weiterhin null ist.
Wenn dem der Fall ist geht es weiter zu „handleContentNotFound()“.
Dort wird geschaut, ob mit dem request überhaupt eine Anfrage nach einer SingleView gestellt wurde, also ob eine, in meinem Fall „event“ Variable mit übergeben wurde. Wenn dem so ist, existiert das Event nicht oder ist bereits abgelaufen. Ansonsten gehen wir davon aus, das die nur die DetailSeite aufgerufen wurde und diesen Aufruf leiten wir mit einem 301 auf die übergeordnete Seite, also die Listenansicht weiter.

TYPO3 9 class für UL im ckeditor

in TYPO3 8 funktioniert bisher folgende Erweiterung der lib.parsefunc_RTE um dem ListenElement eine CSS Class mit geben zu können.

lib.parseFunc_RTE {
externalBlocks {
ul.stripNL = 1
ul.callRecursive = 1
ul.callRecursive.tagStdWrap.HTMLparser = 1
ul.callRecursive.tagStdWrap.HTMLparser.tags.ul {
fixAttrib.class.default = rteContentList
}
}
}

Allerdings gibt es jetzt in TYPO3 9 Probleme damit, es sieht ungefähr so aus:

<ul>
	<p></p>
	<li>...</li>
	<li>...</li>
	<li>...</li>
	<p><p>
</ul>	

das scheint im Moment zu funktionieren:

lib.parseFunc_RTE.externalBlocks.ul.stdWrap{
  HTMLparser = 1
  HTMLparser {
    tags.ul.fixAttrib.class {
      default = rteContentList
      always = 1
      list = rteContentList
    }
    keepNonMatchedTags = 1
  }
}

es ist in etwa gleich.

[globalVar = GP:L = 1] mit TYPO3 9 und SiteHandling

Wenn man in TYPO3 9 das Sitehandling nutzt werden die „alten“ Conditions zu den SprachIds nicht mehr funktionieren.

Allerdings wie hier zu lesen: https://docs.typo3.org/typo3cms/CoreApiReference/ApiOverview/SiteHandling/UseSiteInConditions.html#sitehandling-inconditions

kann man direkt die SiteConfiguration in TypoScript Conditions abfragen aus 

[globalVar = GP:L = 1]

wird also 

[siteLanguage("languageId") == "1"]

bring back the bodytext class

Gerade wenn man nach Jahren der Nutzung TYPO3 Seiten updatet kann es vorkommen, das die alten Seiten CSS Anpassungen für p.bodytext hatten.
Gerade jetzt mit TYPO3 9.5, wo es kein CSS Styled Content mehr gibt und man auf FluidStyledContent wechseln muss, fehlt einem die Class.

Im Internet findet jedoch recht schnell eine Lösung dafür, da es früher schon Anfragen gab wie man die Class entfernen kann. Genau da können wir jetzt allerdings die Class auch wieder hinzufügen 🙂

lib.parseFunc_RTE.nonTypoTagStdWrap.encapsLines.addAttributes.P.class = bodytext

pi1 to Controller

Damit auch für piBased Extensions namespaces genutzt werden können, muss die pi1  in den Classes/Controller/ Ordner verschoben und umbenannt werden. Damit die Extension dann noch weiter läuft muss natürlich die composer.json angepasst werden:

"autoload": {
"psr-4": {
"VendorName\MyExtension\": "Classes"
}
},

Des Weiteren muss natürlich noch das TypoScript angepasst werden damit TYPO3 nun weiß welche Datei es aufrufen soll, wenn der ExtensionName auftaucht.

$overrideSetup = 'plugin.tx_rxextkey_pi1.userFunc = Reelworx\RxExtkey\Plugin->main';
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScript('rx_extkey', 'setup', $overrideSetup);

Das obere Beispiel habe ich hier gefunden:

https://blog.reelworx.at/detail/howto-register-your-plugin-ce-or-module/

Rechtevergabe für Ordner und Dateien

gerade gebraucht und bei oliver-thiele.de gefunden (vielen dank dafür)

find -type d -print0 | xargs -0 chmod 755 && find -type f -print0 | xargs -0 chmod 644

# Empfohlen bei TYPO3:
find -type d -print0 | xargs -0 chmod 2770 && find -type f -print0 | xargs -0 chmod 0660

# Bei Mittwald:
find -type d -print0 | xargs -0 chmod 2775 && find -type f -print0 | xargs -0 chmod 0664

Jumping directories with z

habe gerade diesen Artikel gefunden und bin begeistert:
jumping directories with z

z ist ein nettes kleines Tool, was das leben in der Console ein bisschen einfacher macht 🙂
um z bei Mittwald einzubinden:

Step 1:
im /files/ Ordner einfach ein
git clone https://github.com/rupa/z.git

nun editieren wir die Datei :
/etc/bash/profile

und fügen folgendes ein:


. /files/z/z.sh
export _Z_DATA="/files/z/.z-history"

mit der zweiten Zeile verlegen wir nur die z- Datenbank nach /files/z/.z-history default ist ~/z

und dann kann es auch schon los gehen, einfach ein paar Ordner aufrufen und danach mit z foo die Autovervollständigung von z aufrufen

TYPO3 8 Debuggen

        $queryParser = $this->objectManager->get(\TYPO3\CMS\Extbase\Persistence\Generic\Storage\Typo3DbQueryParser::class);
        \TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($queryParser->convertQueryToDoctrineQueryBuilder($query)->getSQL());

        \TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($queryParser->convertQueryToDoctrineQueryBuilder($query)->getParameters());

gefunden hier