Hauptmenü

Werkzeuge

Kategorien

Archiv

AbstractConditionViewHelper in TYPO3 11

Erstellt in Extension Entwicklung, TYPO3 am 3. September 2023 vom Daschmi

Ich habe mit TYPO3 einen „inArray“ ViewHelper verwendet, dieser sah in TYPO3 10 wie folgt aus:

class InArrayViewHelper extends \TYPO3Fluid\Fluid\Core\ViewHelper\AbstractConditionViewHelper {  
  
	public function initializeArguments() {  
  
		parent::initializeArguments();  
  
		$this->registerArgument('haystack', 'mixed', 'View helper haystack ', TRUE);  
		$this->registerArgument('needle', 'string', 'View helper needle', TRUE);  
  
	}  

	public function render() {  

		$needle = $this->arguments['needle'];  
		$haystack = $this->arguments['haystack'];  

		if (!is_array($haystack)) {  

			return $this->renderElseChild();  

		}  
	
		if (in_array($needle, $haystack)) {  
	
			return $this->renderThenChild();  
	
		} else {  
	
			return $this->renderElseChild();  
	
		}  

	}

}

Genutzt habe ich ihn zum Beispiel in einem EXT:news Template wie folgt:

<w:inArray haystack="{1:'4',2:'5',3:'6'}" needle="{settings.templateLayout}">  
	<f:then>
		<!-- Template Layout = 4 oder 5 oder 6 -->
	</f:then>	
	<f:else>
		<!-- Sonstiges Template Layout -->
	</f:else>
</w:inArray>

das funktioniert auch noch in TYPO3 11, allerdings nur bis man den Cache aktiviert und die Seite aus dem Cache geladen wird. Wenn man aber statt der render Methode die evaluateCondition Methode überschreibt funktioniert es.

class InArrayViewHelper extends \TYPO3Fluid\Fluid\Core\ViewHelper\AbstractConditionViewHelper {  
  
	public function initializeArguments() {  
  
		parent::initializeArguments();  
  
		$this->registerArgument('haystack', 'mixed', 'View helper haystack ', TRUE);  
		$this->registerArgument('needle', 'string', 'View helper needle', TRUE);  
  
	}  
  
	protected static function evaluateCondition($arguments = null): bool {  
  
		$needle = $arguments['needle'];  
		$haystack = $arguments['haystack'];  
		  
		if (!is_array($haystack)) {  
		  
			return false;  
		  
		}  
		  
		if (in_array($needle, $haystack)) {  
		  
			return true;  
		  
		} else {  
		  
			return false;  
		  
		}  
  
	}  
  
}

TYPO3 Update 9 -> 10

Erstellt in TYPO3 am 22. Juli 2022 vom Daschmi

Folgende Probleme sind bei einem Update von 9 -> 10 aufgetreten

Fehlermeldung

Symfony\Component\Mime\Message::setBody(): Argument #1 ($body) must be of type ?Symfony\Component\Mime\Part\AbstractPart, string given,

Lösung

Statt

$message = $this->objectManager->get('TYPO3\\CMS\\Core\\Mail\\MailMessage'); 
$message->setTo([$this->settings['to']])
    ->setFrom([$this->settings['from_email'] => $this->settings['from_name']])
    ->setSubject($this->settings['subject']); 
$message->setBody('text/html', $emailBody); 

die setBody wie folgt aufrufen:

$message = $this->objectManager->get('TYPO3\\CMS\\Core\\Mail\\MailMessage'); 
$message->setTo([$this->settings['to']])
    ->setFrom([$this->settings['from_email'] => $this->settings['from_name']])
    ->setSubject($this->settings['subject']); 
$message->setBody()->html($emailBody);

TYPO3 Cron bei All-Inkl anlegen für Version 9 / Getestet mit TYPO3 9.5.9

Erstellt in TYPO3 am 17. Dezember 2019 vom Daschmi

Beii All-Inkl kann man nur Cron Jobs einrichten, die eine URL aufrufen. Der TYPO3 Cron wird aber über ein CLI Script gestartet. Daher muss man den CLI Aufruf über einen Webzugriff konfigurieren.

Folgendes PHP Script (Im Root unter) habe ich verwendet

 <?php

   exec(" /usr/bin/php73 {PFAD ZUM TYPO3 DocumentRoot}/typo3/sysext/core/bin/typo3 scheduler:run", $arOut);

   echo "<pre>";
   print_r($ arOut );
   echo "</pre>";


 

Anschließend muss man bei All-Inkl noch den Job konfigurieren

Sollte man direct_mail verwenen, so muss der Planer noch im TYPO3 konfiguriert werden, aber das hat nichts mit All-Inkl zu tun.

PHP Version für PHP CLI bei All-Inkl

Prefix im indexed_search Pager ausblenden / übersetzen

Erstellt in TS Schnipsel, TYPO3 am 14. Dezember 2018 vom Daschmi

In TYPO3 9 kann die Übersetzung von „Seite %d“ im Pager durch folgenden Language Key übersetzt werden:

plugin.tx_indexedsearch._LOCAL_LANG.default.displayResults.page =
plugin.tx_indexedsearch._LOCAL_LANG.de.displayResults.page =
plugin.tx_indexedsearch._LOCAL_LANG.fr.displayResults.page =
plugin.tx_indexedsearch._LOCAL_LANG.es.displayResults.page =
plugin.tx_indexedsearch._LOCAL_LANG.it.displayResults.page = 

Hier habe ich es im Beispiel ausgeblendet, damit nur die reine Zahl dargestellt wird.

Weiterhin gibt es noch folgende Schlüssel zum übersetzen:

plugin.tx_indexedsearch._LOCAL_LANG.default.displayResults.next =
plugin.tx_indexedsearch._LOCAL_LANG.default.displayResults.previous =

TYPO3 9 (9.5) page slug für manuell erstellte Seiten ermitteln und setzen

Erstellt in Extension Entwicklung, TYPO3 am 6. November 2018 vom Daschmi

Mit folgender Funktion kann für Seiten der zugehörige Page slug mittels TYPO3 Funktionen ermittelt und gesetzt werden.

public static function setPageSlug($uid) {

$fieldConfig = $GLOBALS['TCA']['pages']['columns']['slug']['config'];
$slugHelper = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Core\DataHandling\SlugHelper::class, 'pages', 'slug', $fieldConfig);

$connection = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Core\Database\ConnectionPool::class)->getConnectionForTable('pages');
$queryBuilder = $connection->createQueryBuilder();

$queryBuilder->getRestrictions()->removeAll()->add(\TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Core\Database\Query\Restriction\DeletedRestriction::class));
$statement = $queryBuilder->select('*')->from('pages')->where(
$queryBuilder->expr()->eq('uid', $uid)
)->execute();

$record = $statement->fetch();

$slug = $slugHelper->generate($record, $record['pid']);

// Update
$queryBuilder = $connection->createQueryBuilder();
$queryBuilder->update('pages')->where(
$queryBuilder->expr()->eq('uid', $uid)
)->set('slug', $slug)->execute();

return $slug;

}