Autorenarchiv

Fehler mit Elementor-Widgets

Mittwoch, 27.04.2022 09:47

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 {}
    }
  }
);

Thema: WordPress | Kommentare (0) | Autor:

GIT Commits mit PHP auslesen und ausgeben

Dienstag, 30.10.2018 14:51

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!

Thema: PHP | Kommentare (0) | Autor:

TYPO3-Scheduler-Cronjob bei Strato

Mittwoch, 04.07.2018 10:07

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.

Thema: TYPO3 | Kommentare (0) | Autor:

RealUrl in eID-Service verfügbar machen

Dienstag, 25.03.2014 21:34

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.

Thema: TYPO3 | Kommentare (0) | Autor:

Mehrsprachige News auch ohne Default-Übersetzung

Dienstag, 03.12.2013 20:20

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

Thema: Extensions, TYPO3, TypoScript | Kommentare (0) | Autor:

Eindeutige ID für Body-Tag

Dienstag, 09.07.2013 19:03

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}">

Thema: TYPO3, TypoScript | Kommentare (0) | Autor:

Rechte-Problem trotz Admin

Sonntag, 23.12.2012 11:19

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.

Thema: TYPO3 | Kommentare (1) | Autor:

cObj in Scheduler-Task verwenden

Mittwoch, 31.10.2012 13:02

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');

Thema: Extensions, TYPO3 | Kommentare (4) | Autor:

Standard-Überschrift eines FCE verwenden

Freitag, 26.10.2012 18:33

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.

Thema: TYPO3, TypoScript | Kommentare (1) | Autor:

Statt Icons nur noch drei Punkte im Extension Manager

Mittwoch, 09.05.2012 20:26

Sollten im Extension Manager statt den Icons zum (de-)installieren nur noch drei Punkte erscheinen, so hat dies mit dem neuen Firefox (12) und einem Bug im Extension Manager zu tun.

Abhilfe schafft hier ein Workaround, indem man in der typo3/sysext/em/res/css/t3_em.css ab Zeile 283 statt

.paddingNoActionIcon img {
    margin-right: 20px;
}

jetzt

.paddingNoActionIcon img {
    margin-right: 5px;
}

schreibt. Der Bug ist auch hier beschrieben.

Thema: TYPO3 | Kommentare (0) | Autor:

TYPO3 Internetagentur Dresden
Diese Webseite verwendet Cookies. Weitere Informationen.