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

Autovervollständigung für TYPO3 Viewhelper in PhpStorm durch selbsterstellte XSD Schema Dateien

PhpStorm ist mittlerweile auch bei mir zum Standard bei Programmiersachen geworden.
Das ein große Killerfeature finde ich gibt es nicht, jedoch gibt es sehr viele Kleinigkeiten, welche das Programmieren sehr viel angenehmer machen.

Für die Autovervollständigung für Viewhelper muss man allerdings etwas nachhelfen.
Nachdem ich mir die Artikel bei Helmut Hummel [1,2] durchgelesen haben und alles eingerichtet hatte war es ein schönes arbeiten mit den Standard TYPO3 Viewhelpern.
Doch was tun wenn man eigene Viewhelper hat? Wie erstellt man die dafür notwendigen Dateien?
Wieder gibt Helmut Hummel die Antwort 🙂 mit seiner Extension typo3_console

Mit dieser kann man wunderbar neue XSD Dateien anlegen, solche die auch Claus Due bei seinen VHS Viewhelpern mit anbietet.

Nach der Installation von typo3_console also ab auf die CommandLine und folgendes eintippern:

 php7-70LATEST-CLI typo3cms documentation:generatexsd --php-namespace="SvenJuergens\SjViewhelpers\ViewHelpers" > SjViewhelpers.xsd

Weitere Optionen in der Doku von typo3_console

Datei lokal speichern und beim einbinden in der Template Datei, wie z.B. hier:

<html data-namespace-typo3-fluid="true"
      xmlns:f="http://xsd.helmut-hummel.de/ns/TYPO3/CMS/Fluid/ViewHelpers"
      xmlns:sj="http://typo3.org/ns/SvenJuergens/SjViewhelpers/ViewHelpers"
>
...

</html>

mit dem MouseCursor auf die Zeile klicken und dann ALT + Enter (wie bei Helmut beschrieben) und dann „Manually setup external ressource“.
Lokal die Datei suchen und auswählen, fertig.!

[1]
http://insight.helhum.io/post/85031122475/xml-schema-auto-completion-in-phpstorm

[2]
http://insight.helhum.io/post/130270697975/updated-fluid-schema-urls

TYPO3 7.x bring back the [REF] in Listview

In TYPO3 6.x gab es in der Liste immer die „Ref.“ Spalte neben den Datensätzen.
ich fand die ziemlich praktisch, da man immer sehen könnte, wie oft bereits referenziert wurde.

In TYPO3 7 ist er irgendwie verschwunden und stattdessen gibt es die neue Spalte „Beschreibung“.

Wenn man nun die Referenzen Anzeige zurück haben möchte muss man ins Seiten TSConfig der Rootpage folgendes eintragen.


mod.web_list {
showClipControlPanelsDespiteOfCMlayers = 1
}

Bzw. wenn es nur auf Benutzer oder eine Benutzergruppe reduzieren möchte, dann folgendes ins TSConfig Feld des Users oder der Gruppe


page.mod.web_list {
showClipControlPanelsDespiteOfCMlayers = 1
}

Warum ist das so?
Es gibt intern eine Abfrage die die Option _REF_ nur aktiviert wenn die Option $dblist->dontShowClipControlPanels gleich FALSE ist und um das zu erreichen, muss man die andere TS Config Option auf „true“ (also 1) setzen…

Verwirrend?
Ja, deswegen habe ich das hier noch stehen, da ich diesen Zusammenhang nächste Woche garantiert wieder vergessen habe.
Jedoch, alles „historisch gewachsen“ und dieser Zusammenhang der beiden Option ist eigentlich nicht mehr von Relevanz und wird sicher bald wieder gerade gezogen.

CORS: Access-Control-Allow-Origin für mehrere Domains und Subdomains

Damit über eine Ajax Anfrage auf eine andere Domain zugegriffen werden kann, kann man JSONP nutzen oder CORS (Cross-Origin Resource Sharing).
CORS muss allerdings auf dem anzufragenden Server jedoch konfiguriert sein und zwar muss dieser die anfragende Domain kennen und somit den Zugriff erlauben.

In einer HtAccess kann man dafür z.B. folgendes nutzen:

< IfModule mod_headers.c >
Header set Access-Control-Allow-Origin "http://foo.example.com"
Header set Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept"
< /IfModule >

Nun darf die Subdomain die Ajax Anfrage stellen und bekommt auch eine Antwort zurück, alternativ kann auch ein „*“ statt der Domain gesetzt werden, dann ist allen der Zugriff erlaubt.

Wenn jedoch nur einige Domains oder Subdomains drauf zugreifen sollen wird es etwas schwieriger, denn in den Spezifikationen ist das nicht weiter vorgesehen.
Es wird jedoch darauf hingewiesen, dass man den Anfragen gegen eine Whitelist gegen checkt und dann den Header für genau diese Domain setzt.

Mit Hilfe einiger StackOverflow Beiträge wie zum Beispiel diesem hier Access-Control-Allow-Origin Multiple Origin Domains?, konnte ich mir dann was zusammenstellen.

Bisher funktioniert bei mir folgendes sehr gut:


< IfModule mod_headers.c >
# Setzt den "Access-Control-Allow-Origin" Tag für http(s) und alle SubDomains (inkl. www) der aufgeführten Domains
SetEnvIf Origin "http(s)?://([a-z0-9]*\.)?(example.de|domain1.de|domain.pl|example.ro|foo.com)$" AccessControlAllowOrigin=$0$1
Header set Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
Header set Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept"
< /IfModule >

Kleine Notiz: die SubDomains sind auf Buchstaben und Zahlen beschränkt, z.B. abc123.example.de für akzeptiert werden, nicht jedoch abc.xyz.example.de

Falls man doch die regular expression(RegEx, RegExp) anpassen oder erweitern möchte, lohnt sich ein Blick auf http://regexr.com/ zu werfen.

P.S. Leerzeichen bei den spitzen Klammern entfernen

TYPO3: Fehlerausgabe in Version 7.6

TYPO3 hat ein tolles neues Feature.
Exceptions werden nicht mehr im Content ausgegeben, sonder nur für jenes Inhaltselement sowas wie

Oops, an error occurred! Code: 2015112412044407ef2354

In einem Testsystem macht das natürlich wenig Sinn.
So gibt es nun 2 Möglichkeiten die Fehlerausgabe wieder zu reaktivieren.

1.) Über die .htaccess Datei

Die folgende Zeile auskommentieren (also # entfernen)
#RewriteRule .? - [E=TYPO3_CONTEXT:Development]

Damit wird der Context auf Development gesetzt, was intern an verschiedenen Stellen abgefragt wird, daher ist zu empfehlen es wirklich auch nur in Testsystem zu nutzen.

2.) Über TypoScript
Es muss im TypoScript, am besten das HauptTemplate die Eigenschaft gesetzt werden

config.contentObjectExceptionHandler = 0

mehr dazu in der Doku von TYPO3

Happy Coding

TYPO3 wie bekomme ich den Datrei Pfad von „file:123“

Gerade muss ein kleines Legacy projekt geupdatet werden.
In einem Datensatz einer Extension gab es ein Link Wizard.
Bisher war es so das der DateiPfad in das Inputfeld geschrieben wurde, jetzt allerdings nur noch „file:123“

Wir bekomme ich nun in der pibase Extension hier den Pfad für die Datei um sie an die Marker(*) zu übergeben.
Gegooglte und hier endete die Suche: https://forum.typo3.org/index.php/t/194348/


$fileObject = \TYPO3\CMS\Core\Resource\ResourceFactory::getInstance()->retrieveFileOrFolderObject( 'file:123' );
$filePath = $fileObject->getPublicUrl();

Besten Dank auch von mir an „Frans Saris (minifranske)“ für die Lösung.

* ich sage ja … Legacy Code 😉