27. April 2022

Fehler mit Elementor-Widgets

Vor ein paar Tagen hatten wir das Problem, dass eine WordPress-Website mit Elementor nicht mehr funktionierte. Nach dem Aktivieren des error reportings erschienen Fehler wie

Fatal error: Uncaught Error: Class 'Elementor\Scheme_Color' not found

oder

Fatal error: Uncaught Error: Class 'Elementor\Scheme_Typography' not found

Problem ist schlicht, dass die erwähnten Klassen umbenannt wurden. Abhilfe schaffen hier zwei Wege:

  1. Jedes Vorkommen von Scheme_Color ersetzen mit \Elementor\Core\Schemes\Color sowie jedes Vorkommen von Scheme_Typography ersetzen mit \Elementor\Core\Schemes\Typography
  2. in jede erwähnte Datei nach der Deklaration des Namespace folgende Zeilen einfügen:

use \Elementor\Core\Schemes\Typography as Scheme_Typography;
use \Elementor\Core\Schemes\Color as Scheme_Color;

Das hat das Problem bei uns gelöst. Natürlich nur bis zum Nächsten Auto-Update.

„Schuld“ war in unserem Fall übrigens das Plugin „Pixerex Elements“.

Es gibt natürlich noch eine dritte Möglichkeit, indem man im „fehlerhaften“ Plugin eine PHP-Datei mit folgendem Inhalt erstellt:

<?php
/**
 * Plugin Name: Elementor Scheme_Color and Scheme_Typography Class Issue
 **/
namespace Elementor;

\add_action(
  'plugins_loaded',
  function() {
    if ( ! class_exists( 'Elementor\Scheme_Color' ) ) {
      class Scheme_Color extends Core\Schemes\Color {}
    }
  }
);
\add_action(
  'plugins_loaded',
  function() {
    if ( ! class_exists( 'Elementor\Scheme_Typography' ) ) {
      class Scheme_Typography extends Core\Schemes\Typography {}
    }
  }
);
30. Oktober 2018

GIT Commits mit PHP auslesen und ausgeben

Möchte man bei einem Projekt die GIT Commits als History ausgeben, kann man folgenden Code dafür nutzen (vorher vielleicht noch schön machen):

$gitDir = '.';
$output = [];
chdir($gitDir);
exec('git log', $output);
$history = [];
foreach($output as $line){
	if(strpos($line, 'commit')===0){
		if(!empty($commit)){
			array_push($history, $commit);
			unset($commit);
		}
		$commit['hash'] = substr($line, strlen('commit'));
	}elseif(strpos($line, 'Author')===0){
		$commit['author'] = substr($line, strlen('Author:'));
	}elseif(strpos($line, 'Date')===0){
		$commit['date'] = substr($line, strlen('Date:'));
	}else{
		if(!isset($commit['message'])){
			$commit['message'] = '';
		}
		$commit['message'] .= $line;
	}
}
$content = '';
foreach($history as $item){
	echo date('d.m.Y H:i:s', strtotime($item['date'])) . ': ' . $item['message'] . "\n";
}

Verbesserungsvorschläge sind gern gesehen!

4. Juli 2018

TYPO3-Scheduler-Cronjob bei Strato

Cronjobs sind mittlerweile unverzichtbar bei der täglichen Arbeit geworden. Vor allem im Umgang mit TYPO3. Die Einrichtung eines solchen Cronjobs ist von Anbieter zu Anbieter verschieden. Hier nun mal ein Beispiel, wie es bei Strato funktioniert:

1. PHP-Datei im Root der Webseite erstellen (z.B. runscheduler.php):

exec('pwd', $myResult);
$myPath = $myResult[0];
system ('env -i /bin/php71 -f ' . $myPath . '/typo3/cli_dispatch.phpsh scheduler');

Je nach benötigter PHP-Version müsst Ihr den Pfad /bin/phpXX anpassen. Die verfügbaren PHP-Versionen findet man z.B. über das Terminal, indem man in den Ordner /bin/ schaut, welche Versionen dort verfügbar sind.

2. PHP-Datei vom Cronjob aus aufrufen:

wget --no-check-certificate -O /dev/null https://www.domain.de/runscheduler.php

P.S.: Dies ist natürlich nur ein Beispiel. Evtl. kann man mittlerweile auch den eigentlichen Aufruf (env -i /php/php71 -f /path/to/my/docroot/typo3/cli_dispatch.phpsh scheduler) mittlerweile auch schon direkt im Cronjob-Manager eintragen.

P.P.S.: Ab TYPO3 8.7 sollte der Scheduler mittels /path/to/my/docroot/typo3/sysext/core/bin/typo3 scheduler:run aufgerufen werden.

25. März 2014

RealUrl in eID-Service verfügbar machen

Benötigt man innerhalb eines eID-Services einen RealUrl-konformen Link, muss man etwas nachhelfen:

Innerhalb der eid_main – Methode fügt man folgende Zeilen hinzu:

if(t3lib_extMgm::isLoaded('realurl')){
require_once(t3lib_extMgm::extPath('realurl').'class.tx_realurl.php');
$this->realurl = t3lib_div::makeInstance('tx_realurl');
$GLOBALS['TSFE']->config['config']['tx_realurl_enable'] = 1;
}

und an entsprechender Stelle:

$conf['LD'] = $GLOBALS['TSFE']->tmpl->linkData(array('uid' => $targetPageUid), '', 0, 'index.php', '', t3lib_div::implodeArrayForUrl('', array('param1' => $param1)));
$url = $conf['LD']['totalURL'];

Die Methode linkData ist definiert:
t3lib_TStemplate::linkData($page, $oTarget, $no_cache, $script, $overrideArray = '', $addParams = '', $typeOverride = '')

und ist hier auch noch mal beschrieben.

 

Anmerkungen gern hier in den Kommentaren.

3. Dezember 2013

Mehrsprachige News auch ohne Default-Übersetzung

Im Normalfall legt man im TYPO3 eine News zuerst in der Standardsprache an und legt dann zu dieser News die Übersetzungen an.

Möchte man nun eine News nur in einer speziellen Sprache erstellen, ohne vorher die News in der Default-Sprache zu erstellen, hilft man sich mit folgendem TypoScript-Schnipsel im tt_news-TypoScript-Setup:


plugin.tt_news.sys_language_mode = strict
plugin.tt_news.showNewsWithoutDefaultTranslation = 1

9. Juli 2013

Eindeutige ID für Body-Tag

Manchmal möchte man Elemente, die auf verschiedenen Seiten wiederkehren, für spezielle Seiten per CSS formatieren. Lösungsansätze gibt es hierfür verschiedene. Inhalts-Elemente besitzen ja schon eigene IDs (c123), über die man das Element ansprechen kann.

Dennoch ist es manchmal von Vorteil, der BODY-Tag hätte eine eigene ID (oder Klasse), über die man alle Inhalte innerhalb ansprechen kann.

Dazu ist folgendes TypoScript (Setup) notwendig:

page.bodyTag >
page.bodyTagCObject = TEXT
page.bodyTagCObject.field = uid
page.bodyTagCObject.wrap = <body id="page-|">

Wenn wir jetzt noch eine Klasse hätten, die auch noch die ID der übergeordneten Seite ausgäbe, so wäre es natürlich noch besser.

page.bodyTag >
page.bodyTagCObject = TEXT
page.bodyTagCObject.field = uid
page.bodyTagCObject.wrap = <body id="page-|" class="parent-{field:pid}">
23. Dezember 2012

Rechte-Problem trotz Admin

Bei der aktuellen (4.7.7) Version von TYPO3 wurde das Anlegen von neuen Inhaltselementen mit der Meldung „Sorry, you didn’t have proper permissions to perform this change.“ (oder auf deutsch: „Sie haben nicht die nötigen Rechte, um diese Änderung durchzuführen“) abgebrochen. Trotz angemeldeten Admin-Nutzers.

Hierbei scheint es sich um einen Bug im TYPO3 (bzw. TemplaVoilá) zu handeln (http://bugs.typo3.org/view.php?id=18583). Dabei scheint TemplaVoilá auf ein Feld in der pages-Tabelle zugreifen zu wollen, das aber nicht mehr existiert.

Abhilfe schafft ein einfacher Trick, nämlich das Feld einfach wieder hinzuzufügen:

ALTER TABLE pages ADD t3ver_swapmode tinyint(4) NOT NULL default '0'

Bei einem Versionsupgrade kann es beim „Compare“ im InstallTool schnell mal passieren, dass ein Feld aus der Datenbank entfernt wird, da dieses TYPO3 selbst nicht mehr benötigt. Fremd-Extensions (wie in unserem Fall TemplaVoilá) sind darauf natürlich nicht vorbereitet.

31. Oktober 2012

cObj in Scheduler-Task verwenden

Scheduler-Tasks haben nicht den vollen Umfang aller TYPO3-Funktionen zur Verfügung, da diese ohnehin oftmals nicht benötigt werden. Manchmal braucht man aber spezielle Funktionen/Methoden, um z.B. Bilder rendern zu lassen oder mit HTML-Templates arbeiten zu können. Hierzu wird oft das cObj benötigt, welches im Scheduler-Task aber nicht vollständig vorliegt bzw. komplett fehlt.

Hierzu sorgen folgende Zeilen für Abhilfe:

chdir(PATH_site);
if(!$GLOBALS['TSFE'] instanceof tslib_fe){
    $GLOBALS['TSFE'] = t3lib_div::makeInstance('tslib_fe', $GLOBALS['TYPO3_CONF_VARS'], 0, 0);
    $GLOBALS['TSFE']->config['config']['language'] = null;
    $GLOBALS['TSFE']->initTemplate();
}
if(!isset($GLOBALS['TT'])){
    $GLOBALS['TT'] = t3lib_div::makeInstance('t3lib_TimeTrackNull');
}
$GLOBALS['TSFE']->tmpl->getFileName_backPath = PATH_site;
$cObj = t3lib_div::makeInstance('tslib_cObj');
26. Oktober 2012

Standard-Überschrift eines FCE verwenden

Das Standard-Überschrift-Feld wird bei Flexible Content Elements (FCE) nicht ausgegeben. Wenn man dies aber möchte (z.B. im aktuellen Fall für eine Akkordion-Funktionalität), hilft etwas TypoScript (Setup):

tt_content.templavoila_pi1.10 < lib.stdheader

Man beachte: Diese Zeile TypoScript schaltet das Überschrift-Feld für alle FCE´s frei! Man sollte also – wenn man diese dann nicht verwenden möchte – explizit auf „nicht ausgeben“ stellen.

6. Juli 2012

Keine Thumbnails mehr auf 1&1 Server

Auf 1&1-Servern wurden keine Thumbnails mehr dargestellt. Nach längerer Suche haben wir endlich eine Lösung gefunden.

Abhilfe schafft hierbei eine zusätzliche Zeile in der localconf.php (vor den Kommentar: „## INSTALL SCRIPT EDIT POINT TOKEN – all lines after this points may be changed by the install script!“):

putenv('MAGICK_THREAD_LIMIT=1');

Dabei setzt putenv die Umgebungsvariable MAGICK_THREAD_LIMIT auf 1.

Ältere Beiträge »
TYPO3 Internetagentur Dresden
Diese Webseite verwendet Cookies. Weitere Informationen.