Papierkorb für gelöschte Dateien

caticonslite_bm_alt

Vielen ist bekannt, dass TYPO3 einen Verlauf zum Wiederherstellen von gelöschten Seiten und Inhalten bietet. Dass für Dateien ein ähnliches Feature existiert wissen dagegen nur die wenigsten: Erstellt man unter „fileadmin“ einen Ordner namens „_recycler_“, so dient dieser ab sofort als Papierkorb für gelöschte Dateien. Außerdem ist es möglich in der kompletten Ordnerstruktur unter „fileadmin“ „_recycler_“-Ordner anzulegen, gelöschte Dateien werden daraufhin im in der Hierarchie nächstgelegenen Papierkorb abgelegt – das ist vor allem beim Einsatz von Benutzergruppen interessant.

mysqldump auf (sehr) großen Installationen

caticonslite_bm_alt

mysqldump wird standardmäßig mit der Option „–opt“ ausgeführt (siehe MySQL: mysqldump). Dies ist eine Kurzform für die Optionen „–add-drop-table –add-locks –create-options –disable-keys –extended-insert –lock-tables –quick –set-charset“. D.h. während des Dumps werden Tabellen gesperrt, um die Konsistenz der Daten zu garantieren. Auf (sehr) großen Installation führt dies allerdings zu einer vorübergehenden Nichterreichbarkeit des Systems. Im schlimmsten Fall kann sogar eine Überlastung des/der Server(s) die Folge davon sein: Nämlich dann, wenn während des Dumps – aufgrund der gesperrten Tabellen – sehr viele Webserver-Prozesse auf wartend gesetzt und danach abgearbeitet werden sollen.

Um diesem Problem zu entgehen, muss mysqldump mit der Option „–skip-lock-tables“ gestartet werden – z.B.:

mysqldump --skip-lock-tables -hHostname -uUsername -pPassword Database > Database.sql

Vermeiden ließe sich das Problem natürlich auch mit einer Master-Slave-Konfiguration.

Vererbung von Bildern aus den Seiteneigenschaften

caticonslite_bm_alt

In TYPO3 lassen sich in den Seiteneigenschaften Bilder im Feld „Dateien“ unter „Ressourcen“ hinterlegen. Auf die angegebenen Dateien kann man mit TypoScript zugreifen und somit z.B. je Seite ein individuelles Headerbild darstellen. Häufig ist es ausreichend auf Unterseiten das Bild der übergeordneten Seite anzuzeigen, oder man möchte nicht auf jeder Seite ein Bild hinterlegen müssen. Hierfür bietet sich in TYPO3 die Verwendung von „slide“ an – damit lässt sich eine Vererbung von Bildern realisieren. D.h. es wird ausgehend von der aufgerufenen Seite der Seitenbaum bis zur Rootseite nach einem Bild durchsucht, bis entweder ein Bild gefunden, oder die Rootseite erreicht worden ist.

Bei einer TYPO3 Standard-Installation mit FAL (File Abstraction Layer) (ab TYPO3 6.0) benötigt man folgendes TypoScript:

lib.image = FILES
lib.image {
	references {
		data = levelmedia:-1,slide
	}
	renderObj = IMAGE
	renderObj {
		file.import.data = file:current:publicUrl
		titleText.data = file:current:title
	}
}

Bei einer TYPO3 Standard-Installation ohne FAL (bis TYPO3 6.0) benötigt man folgendes TypoScript:

lib.image = IMAGE
lib.image.file {
	import = uploads/media/
	import {
		data = levelmedia:-1, slide
		listNum = 0
	}
}

Wird DAM verwendet, ist folgende Konfiguration zu verwenden:

lib.image = IMAGE
lib.image.file {
	import.cObject = USER
	import.cObject {
		userFunc = tx_dam_pages->get_media_file
		listNum = 0
		slide = 1
	}
}

Domain eines WordPress-Blogs ändern

caticonslite_bm_alt

Möchte man die Domain eines WordPress-Blogs ändern, so sind hierfür Änderungen in der Datenbank erforderlich. Zum einen müssen in der Tabelle „wp_options“ die Einträge „home“ und „siteurl“ angepasst werden, zum anderen in „wp_posts“ alle „guid“-Einträge. Andernfalls ist ein „wp-admin“-Login nicht möglich bzw. wird WordPress z.B. Bilder aus der Mediathek weiterhin von der alten URL/Domain ausliefern. Die hierfür erforderlichen SQL-Anweisungen kann man z.B. mit phpMyAdmin oder ähnlichen Tools ausführen:

UPDATE `wp_options` SET `option_value` = REPLACE(`option_value`, 'dev.webentwickler.at', 'webentwickler.at');
UPDATE `wp_posts` SET `guid` = REPLACE(`guid`, 'dev.webentwickler.at', 'webentwickler.at');

„dev.webentwickler.at“ stelle in diesem Fall die alte Domain dar, während es sich bei „webentwickler.at“ um die neue Domain handelt. War der WordPress-Blog früher in einem Unterverzeichnis installiert, so ist die zu ersetzenden Zeichenkette um dieses zu erweitern – z.B. „dev.webentwickler.at/pfad/zum/unterverzeichnis“.

Individuelle Marker in Direct Mail

caticonslite_bm_alt

In einem Newsletter werden häufig auch benutzerspezifische Parameter abseits der standardmäßig vorhandenen benötigt, z.B. um die Anrede zu personalisieren (Sehr geehrte Frau bzw. Sehr geehrter Herr,…) oder um Felder aus marketingtechnischen Gründen (z.B. individueller Gewinncode) hinzuzufügen. Dies ist in der Direct Mail-Extension (Extensionkey: direct_mail), dank der Verwendung von Hooks, relativ einfach zu bewerkstelligen.

Zuerst muss man hierfür eine neue Extension erstellen, ich verwende hier den Extensionkey „direct_mail_markers“, um die benötigten Dateien irgendwo ablegen zu können. Als nächstes wird eine Klasse (samt entsprechender Methode), welche benutzerdefinierte Marker generiert, erstellt – im Ordner „Classes/Hooks/“ der Extension legt man eine Datei namens „DirectMailMarkers.php“ mit folgendem Inhalt an:

<?php
namespace WebentwicklerAt\DirectMailMarkers\Hooks;
 
class DirectMailMarkers
{
    /**
     * @param array $params
     * @return array
     */
    function mailMarkersHook(array $params)
    {
        // ###USER_salutation###
        $salutation = '';
        if (in_array($params['row']['gender'], array(0, 'm', 1, 'f')) && !empty($params['row']['last_name'])) {
            // gender
            if ($params['row']['gender'] === 0 || $params['row']['gender'] === 'm') {
                $salutation = 'Sehr geehrter Herr ';
            } else if ($params['row']['gender'] === 1 || $params['row']['gender'] === 'f') {
                $salutation = 'Sehr geehrte Frau ';
            } else {
                $salutation = 'Sehr geehrte(r) Herr/Frau ';
            }
 
            // title
            if (!empty($params['row']['title'])) {
                $salutation .= $params['row']['title'] . ' ';
            }
 
            // last_name
            $salutation .= $params['row']['last_name'];
        } else {
            $salutation = 'Sehr geehrte Damen und Herren';
        }
 
        $params['markers']['###USER_salutation###'] = $salutation;
 
        return $params;
    }
}

Diese Methode erzeugt abhängig vom Feld „gender“ die persönliche Anrede „Sehr geehrter Herr Nachname“„Sehr geehrte Frau Nachname“ oder wenn kein Nachname oder Geschlecht angegeben worden ist „Sehr geehrte Damen und Herren“. Zusätzlich wird der Titel – sofern angegeben – eingefügt.

Damit die soeben erstellte Hook-Methode verwendet wird und der generierte Marker ###USER_salutation### im Newsletter verwendet werden kann, muss diese in der„ext_localconf.php“ registriert werden:

<?php
 
if (!defined ('TYPO3_MODE')) die ('Access denied.');
 
// register directmail markers hook
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/direct_mail']['res/scripts/class.dmailer.php']['mailMarkersHook'][] = 'EXT:' . $_EXTKEY . '/Classes/Hooks/DirectMailMarkers.php:' . \WebentwicklerAt\DirectMailMarkers\Hooks\DirectMailMarkers::class . '->mailMarkersHook';

Nachdem die soeben erstellte Erweiterung über den Extensionmanager installiert worden ist, steht der generierte Marker im Newsletter zur Verfügung.

In der Datei composer.json der Installation ist folgender Eintrag für das Autoloading unter „autoload/psr-4“ zu ergänzen:

"autoload": {
  "psr-4": {
    "WebentwicklerAt\\DirectMailMarkers\\": "typo3conf/ext/direct_mail_markers/Classes/"
  }
}

Abschließend müssen die Autoloading-Informationen noch mit composer dump-autoload aktualisiert werden.

1 4 5 6 7 8  nach oben