Schlagwort-Archive: CMS

Rechteverwaltung im TYPO3-Backend

Die Rechte der Benutzer des TYPO3-BE können über Zugriffslisten (Access Lists) bis ins Kleinste definiert werden.

Wenn z.B. folgende Meldung beim Bearbeiten eines Seiteninhaltselements erscheint, ist die Darstellung der Dateilinks (File Links) untersagt:

Sie haben nicht die nötigen Rechte, um diese Änderung durchzuführen.
Reason: ERROR: authMode „explicitDeny“ failed for field „CType“ with value „uploads“ evaluated

Standardmäßig ist $TYPO3_CONF_VARS[‘BE’][‘explicitADmode’] auf den Wert ‚explicitDeny‘ eingestellt, wodurch alle Zugriffe erlaubt sind und Verbote ausdrücklich (explizit) gesetzt werden müssen. Entfernt man nun die Markierung von „[Deny] File Links“ und speichert die Einstellungen, kann die jeweilige Benutzergruppe auch auf das Inhaltselement vom Typ Dateilinks zugreifen.

TYPO3-Rechteverwaltung
Explicitly allow/deny field values

Dateien in FAL ersetzen

Wer unter TYPO3 CMS die Extension DAM (Digital Asset Management) einsetzte, weis die Vorteile der Funktion „Datei ersetzen“ zu schätzen. Zum jetzigen Zeitpunkt gibt es eine analoge Funktion unter FAL bzw. TYPO3 CMS 6.2 jedoch nicht.

Ein Trick, um die Funktionalität beizubehalten, ist es, eine Datei mit gleichem Namen in das Verzeichnis hochzuladen und eine bestehende Datei somit zu überschreiben. Die Datei-Referenz bleibt bestehen und somit ist das Ziel erreicht. Nach dem Hochladen kann die (neue) Datei natürlich umbenannt werden.

Gefunden im TYPO-Forum.

Debugging in TYPO3 CMS

Extension debuggen

Auf something.php gibt es zwar schon einen sehr interessanten Artikel zu diesem Thema, aber ich möchte das noch einmal für mich auf die Schnelle zusammenfassen.

Für die TYPO3 CMS 4.x-Ära half u.a. zum Debugging einer Extension:

$content .= t3lib_utility_Debug::viewArray($this->piVars);
return $this->pi_wrapInBaseClass($content);

Unter zuhilfenahme der Namespaces unter TYPO3 CMS 6.x hilft folgendes:

\TYPO3\CMS\Core\Utility\DebugUtility::debug($var, 'Title', 'Group');

oder

 \TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($var, 'Title');

Um das Frontend-Debugging zu aktivieren, muss per InstallTool die Eigenschaft $TYPO3CONF[‚FE‘][‚debug‘] auf 1 gesetzt sein!

TypoScript debuggen

Um beispilesweise die Inhalte eines HMENU darzustellen, hilft folgender Code:

xxx = HMENU
xxx {
  entryLevel = 1
  1 = TMENU
  1 {
    debugItemConf = 1
    NO {
      # hier sonstige Angaben zur Darstellung des Listenpunktes
      stdWrap.debugData = 1
    }
  }
}

debugData stellt dabei den jeweiligen Datensatz im Frontend dar ($cObj->data), debugItemConf zeigt das Konfigurations-Array. Diese Optionen können natürlich auch unabhängig voneinander Verwendung finden.

Dazu gibt es weitere Informationen auf wiki.typo3.org.

Extension auf FAL umstellen

TYPO3 CMS ab Version 6.x setzt auf FAL (File Abstraction Layer) zur Dateireferenzierung. Dies hat einige Vorteile, z.B. kann eine Datei mehrmals verknüpft werden, ohne dass Kopien erstellt werden müssten, wie es vorher der Fall war.

Im Umkehrschluss heißt das allerdings, dass der Dateizugriff im PHP-Quellcode der TYPO3-Erweiterungen angepasst werden muss, wenn bspw. Bilder dargestellt werden. Hier ein kurzes Beispiel zur Umstellung.

In einer Extension in TYPO3 CMS 4.7 zur Darstellung als Template-Marker sah es noch so aus:

# $this->cObj->data => vollstaendiger darszustellender Datensatz
$tmp = explode(',', $this->cObj->data['image']);
if (count($tmp)>0){
  foreach ($tmp as $key=>$value){
    $markerArray['###MY_IMAGE###'] = $this->cObj->IMG_RESOURCE( array( 'file'=>'uploads/pics/' . $value, 'file.'=>array( 'width'=>'199m', 'height'=>'165' )) );
    $this->cObj->substituteMarkerArrayCached($subparts['template_alt_image'], $markerArray);
  }
}

Nach der Umstellung auf TYPO3 CMS 6.2 sieht obiger Code dann so aus:

if (intval($this->cObj->data['image'])>0){ # $this->cObj->data['image'] enthaelt nun die Anzahl der referenzierten Dateien
  $fileRepository = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Resource\\FileRepository');
  $fileObjects = $fileRepository->findByRelation('tt_content', 'image', $this->cObj->data['uid']);
  foreach ($fileObjects as $key=>$value){
    $markerArray['###MY_IMAGE###'] = $this->cObj->IMG_RESOURCE( array(
'file.'=>array('treatAsReference'=>1, 'width'=>'199m', 'height'=>'165', ),
'file' => $value->getOriginalFile()->getProperties()['uid'],
'params'=>'',
'altText'=>'',
) );
  $this->cObj->substituteMarkerArrayCached($subparts['template_alt_image'], $markerArray);
  }
}

Eine sehr hilfreiche Dokumentationen dazu ist das TYPO3Wiki.