SFTP vorbereiten und nutzen

Zur Übertragung von Daten ist derzeit das FTP-Protokoll sehr weit verbreitet. Da das Internet auch schon vor über 30 Jahren Neuland war, hat man sich seinerzeit über Datensicherheit keine besonders großen Gedanken gemacht, dementsprechend ist FTP in seiner Urform vollständig unverschlüsselt. Zwar lässt sich die Kommunikation mit FTPS immerhin auf dem Kontroll-Kanal durch TLS schützen, die Daten selbst werden jedoch gemeinhin unverschlüsselt übertragen.

Auch heute ist das Internet noch Neuland, jedoch gibt es mittlerweile etablierte und nicht weniger komfortable Möglichkeiten, Daten wirklich sicher zwischen zwei Rechnern zu übertragen. Eine sehr empfehlenswerte Variante ist hierbei SFTP in Kombination mit WinSCP als Client. Da die Übertragung in dieser Variante auf SSH basiert sind sowohl Kommunikation als auch zu übertragende Daten komplett verschlüsselt. daneben begnügt sich SFTP mit einem einzigen Port, was insbesondere die Verwaltung von Firewall-Regeln im Vergleich zu FTP(S) start vereinfacht.

Die Erstellung eines SSH-Schlüssels und die Einrichtung von WinSCP soll nun an dieser Stelle erläutert werden.

Weiterlesen»

Mehrere Presets für CKeditor verwenden

Um für ein Inputfeld ein von der Standardvorlage abweichendes RTE Preset zu verwenden, muss man wie folgt vorgehen:

 

Zunächst wird das Preset als .yaml Datei im Verzeichnis Configuration/RTE/ angelegt (in diesem Beispiel Custom.yaml). Hier kann als Vorlage zunächst die Default.yaml kopiert werden.

In ext_localconf.php wird nun eine Bezeichnung für das neue Preset definiert:

$GLOBALS['TYPO3_CONF_VARS']['RTE']['Presets']['custom'] = 'EXT:vendor_namespace/Configuration/RTE/Custom.yaml';

Um dieses Preset per TCA einem Inputfeld zuweisen zu können, muss in der RTE.tsconfig unter Configuration/TsConfig/Page/ die eben gewählte Bezeichnung einem im TCA verfügbaren Wert zugeordnet werden:

RTE {
  custom {
    preset = custom
  }
}

Sollte hier die Standardvorlage per default gesetzt sein, muss diese zwingend entfernet werden, da zusätzlich angelegte Presets sonst ignoriert werden.

Die Standardvorlage muss dann stattdessen ebenfalls über die ext_localconf.php gesetzt werden:

$GLOBALS['TYPO3_CONF_VARS']['RTE']['Presets']['default'] = 'EXT:vendor_namespace/Configuration/RTE/Default.yaml'

Zuletzt muss dem Inputfeld im Bereich config das eben definierte Preset zugewiesen werden:

'config' => [
  'richtextConfiguration' => 'custom'
],

Das neue Preset kann jetzt nach Belieben bearbeitet werden, eine Liste der konfigurierbaren Optionen findet man hier: https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html

Caching Framework: automatisch Cache leeren bei Datensatzänderung

Das Caching Framework lässt sich gut verwenden, um aufwändig generierte/abgefragte Daten zur Wiederverwendung schneller parat zu haben. Die prinzipielle Funktionsweise haben wir in „Caching Framework nutzen“ erklärt und findet sich auch in der Doku sowie in zahlreichen anderen Blogs.
Was aber oftmals fehlt: wie aktualisiert man den Cache bzw. invalidert ihn bei Veränderung der Daten?

Häufig hängt der Inhalt des Caches von Datensätzen ab. D.h. der Cache-Inhalt veraltet, wenn sich ein Datensatz verändert. Und damit ist auch der Ansatzpunkt für die Invalidierung klar: der processDatamap_afterDatabaseOperations-Hook im DataHandler. Er wird immer nach Datenbankoperationen („new“ bzw. „update“) aufgerufen und bekommt auch den Taballennamen mit übergeben. Somit ist es recht einfach, die eigenen Datensätze zu erkennen und auf die Veränderung zu reagieren:

EXT:my_extension/Classes/Hooks/DataHandler.php:

<?php
namespace Netzhaut\MyExtension\Hooks;

use TYPO3\CMS\Core\Cache\CacheManager;
use TYPO3\CMS\Core\Utility\GeneralUtility;

class DataHandler
{
    public function processDatamap_afterDatabaseOperations($status, $tableName, $recordId, array $databaseData, \TYPO3\CMS\Core\DataHandling\DataHandler $dataHandler)
    {
        if ($tableName === 'tx_myextension_domain_model_example') {
            $cache = GeneralUtility::makeInstance(CacheManager::class)->getCache('myCache');
            $cache->flushByTag('tag_123');
        }
    }
}

Dann noch am Hook registrieren, und fertig:

EXT:my_extension/ext_localconf.php

$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass']['myextension_clearcfcache'] = 'Netzhaut\\MyExtension\\Hooks\\DataHandler';

Links

Mac Firefox vs. Chrome

Im Screenshot haben wir einmal das Problem, dass der Firefox die Schriften anders darstellt als im Chrome.

1. Font-Smoothing

body {
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
font-smoothing: antialiased;
}

Firefox benötigt an dieser Stelle den Wert grayscale statt antialiased.

 

2. Inputfelder

Inputfelder werden im Firefox um 2px höher dargestellt als im Chrome. Dies ist nicht unbedingt ein offensichtliches Problem aber bei Fieldsets mit Hintergrund, welche nebeneinander platziert sind, wird es einen Versatz geben.

Dieses Problem konnten wir wie folgt lösen:

input{
margin-top:-2px;
line-height:34px;
}

Die line-height muss natürlich entsprechend angepasst werden.

Reports – Remaining updates

Im Reports-Modul stieß ich letzens auf eine Meldung, die mich verwunderte:

„This installation is not configured for the TYPO3 version it is running.“

 

2016-02-04 15-28-09

Die TYPO3-Instanz war jedoch eine frisch aufgesetzte Installation…

Bei weitergehender Analyse, wie das Modul hierauf kommt, fand sich rasch die Ursache: die Datenbankstruktur stimmte nicht mit den Erwartungen/der hinterlegten Definitionen überein. Im Installtool unter Important actions findet sich der Database analyzer, der nähere Infos liefert.