Um via Fluid drauf zuzugreifen, dürfte der einfachste Weg via dataProcessing sein:
https://docs.typo3.org/c/typo3/cms-core/master/en-us/Changelog/7.4/Feature-67662-DataProcessorForFiles.html
Dateireferenz als Feld in einer Extension
Also okay das mit der 1 dachte ich mir im Hinterkopf bereits, da der Datensatz selber ja alle Referenzen hält.
Werde mir jetzt mal das DataProcessing anschauen, aber erschreckend wie man sowas simples so komplex gestalten kann. :-/
Melde mich sofern Fortschritte zu verbuchen sind.
Okay sorry Doppelantwort:
Also ich habe nun eine Datei sys_template.php in Configuration\Overrides\ angelegt mit folgenden Inhalt.
<?php
defined('TYPO3_MODE') || die();
call_user_func(function()
{
/**
* Extension key
*/
$extensionKey = 'site_package';
/**
* Default TypoScript
*/
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addStaticFile(
$extensionKey,
'Configuration/TypoScript',
'mn_additional_page_fields'
);
});
Dazu habe ich dann in Configuration\TypoScript\setup.typoscript angelegt.
tt_content.image.30 = FLUIDTEMPLATE
tt_content.image.30 {
#file = EXT:myextension/Resources/Private/Templates/ContentObjects/Image.html
dataProcessing.10 = TYPO3\CMS\Frontend\DataProcessing\FilesProcessor
dataProcessing.10 {
# the field name where relations are set
# + stdWrap
references.fieldName = tx_mnadditionalpagefields_extended_background_image
# the table name where relations are put, defaults to the currently selected record from $cObj->getTable()
# + stdWrap
references.table = pages
# A list of sys_file UID records
# + stdWrap
files = 252
# A list of File Collection UID records
# + stdWrap
collections = 13,14
# A list of FAL Folder identifiers and files fetched recursive from all folders
# + stdWrap
folders = 1:fileadmin/nintz.de/images/ConanExiles/
folders.recursive = 1
# Property of which the files should be sorted after they have been accumulated
# can be any property of sys_file, sys_file_metadata
# + stdWrap
sorting = description
# Can be "ascending", "descending" or "random", defaults to "ascending" if none given
# + stdWrap
sorting.direction = descending
# The target variable to be handed to the ContentObject again, can be used
# in Fluid e.g. to iterate over the objects. defaults to "files" when not defined
# + stdWrap
as = ownImage
}
}
Habe im Basistemplate das Package "mn_additional_page_fields" hinzuigefügt.
Aber finde dazu rein gar nicht im TemplateObject Browser ?
Sollte hier nicht wenigstens dann tt_conten.image.30 mit irgendwas belegt sein?
Der Browser zeit dazu gar nichts an.
Nach einigen hin und her verstehe ich langsam die Welt nicht mehr.
Da draußen gibt es wie es scheint hundert Ansäte aber mit keinem komme ich irgendwie weiter.
Habe nun diesen FilesProcessor angelegt und dieser wird auch im Typoscript angezigt.
Aber die Variable ownImage ist leer, bzw nicht vorhanden NULL.
Sieht so aus.
http://prntscr.com/sf8rn4
Naja, "komplex gestalten" ist etwas negativ ausgedrückt. Es ist sehr flexibel gebaut, muss aber auch Altlasten mit berücksichtigen.
IMO stoplerst Du über genau die Flexibilität: der FilesProcessor erfasst Relationen entweder via references *oder* files *oder* collections *oder* folders - nicht *und*,*und*,*und*. alle vier Möglichkeiten als Quelle zu definieren macht wenig Sinn (Weiß nicht, was die höchste Prio erhält).
In Deinem Fall hast Du via TCA ja sys_file_references angelegt, d.h. Du braucht nur den "references"-Block:
tt_content.image.30 = FLUIDTEMPLATE
tt_content.image.30 {
dataProcessing.10 = TYPO3\CMS\Frontend\DataProcessing\FilesProcessor
dataProcessing.10 {
references.fieldName = tx_mnadditionalpagefields_extended_background_image
references.table = pages
as = ownImage
}
}
Hmm die Email zur Antwort nicht bekommen -.- (deswegen die Pause)
Ja aber nun habe ich die neuen Systeme etwas besser verstanden.
Und die Sache mit dem FileProcessor verstehe ich grundsätzlich ja auch.
Nur bekomme ich dieses Feld ownImage überhaupt nicht richtig "ab".
Der ImageProcessor wird nun auch erkannt, nur passiert gefühlt hier überhaupt nichts.
(Object Browser Bild -> https://prnt.sc/sjjzhd)
Würde da nicht ggf. ein eigener FileProcessor angeraten?
Das wollte ich auch nochmal probieren. Generell will ich eigentlich nur den Dateinamen der verlinkten Datei haben, aber ganz so einfach scheint das wohl nicht.
Vielleicht zum Verständnis, ich will lediglich einen erweiterbaren Satz von Feldern
an den Page Datensätzen haben um noch etwas besser (an der Seite selber) so etwas wie Seitenhintergrund und alternative Klassennamen setzen lassen zu können.
Damit im fluid Template (was dann ja eigentlich zur Bootstrap Erweiterung gehört) entsprechend reagieren zu können.
Vielen Dank für eure/deine Hilfe.
Die Extension liegt hier auch nochmal zum Download bereit: https://nintz.de/fileadmin/uploads/extended_page_fields_0.0.1_202005191001.zip
Nochmal kurz zum Verständnis: die Felder sind im pages-Datensatz, anzeigen möchtest Du sie aber in einem Contentelement (d.h. tt_content-Datensatz)?
Ist wichtig zu wissen, da TypoScript ein Datenarray übergeben bekommt, dieses aber abhängig vom Context ist. Im PAGE-Objekt z.B. bekommst Du via ".field = nav_title" das Feld "nav_title" aus dem pages-Datensatz. Innerhalb eines Contentelement greift "field" auf die Felder des tt_content-Datensatzes zu.
Ähnlich verhält es sich auch bei dataProcessing - genau gucken, welche Daten verarbeitet werden. Eine richtige Konfiguration auf falsche Daten angewendet führt auch nicht zum Erfolg.
Mal ein passendes, minimalistisches Snippet für Deine EXT:extended_page_fields:
page >
page = PAGE
page.20 = FLUIDTEMPLATE
page.20 {
template = TEXT
template.value(
<f:debug>{ownImage}</f:debug>
<h1>Testing EXT:extended_page_fields and FilesProcessor</h1>
<p>Background-Image is <f:uri.image image="{ownImage.0}" /></p>
)
dataProcessing.10 = TYPO3\CMS\Frontend\DataProcessing\FilesProcessor
dataProcessing.10 {
references.fieldName = tx_extendedpagefields_extended_background_image
as = ownImage
}
}
(getestet in TYPO3 10.4.3)
Hey Hallo Julian,
vielen Dank für deine Mühen soweit.
Der Schnipsel wird gleich mal ausprobiert, wobei ich gestern auch schon weitere Erfolge hatte.
Also im Extensiontemplate konnte ich mit einem manuellen query alles wunderbar auflösen und im eigenen Template die Information ausgeben. Könnte man daraus nicht einen Viewhelper machen der für mich Inhalte dann wrapt?
Aber aktuell kämpfe ich noch mit einem UpdateProblem, wollte heute Morgen auf 10.4.3 updaten und composer stellt sich quer ...
......
> post-autoload-dump: @typo3-cms-scripts
> typo3-cms-scripts: typo3cms install:fixfolderstructure
[ TYPO3\CMS\Core\DependencyInjection\NotFoundException ]
Container entry "TYPO3\CMS\Install\Service\LateBootService" is not availabl
e.
install:fixfolderstructure
Script typo3cms install:fixfolderstructure handling the typo3-cms-scripts event returned with error code 255
Script @typo3-cms-scripts was called via post-autoload-dump
Scheint aber wohl irgendwie kein manuell provoziertes Problem zu sein. Zumindest konnte ich es nicht auf meine Extensions oder ähnliches zurück führen. Habe auch mal alles raus genommen, der Fehler war der gleiche.
Es bleibt spannend ^^
Okay nachdem composer sich wohl neu geordnet hatte durfte ich dann auch endlich weiter arbeiten.
Also dein Schnipsel arbeitet 1A vielen Dank. Hilft beim verstehen des Systems, mittlerweile verstehe ich auch das grundsätzliche Problem was mich an meiner Idee hinderte.
Hier das Ergebnis deines Schnipsels: https://prnt.sc/sk9vc9
Habe nun in meinem Fall einen ViewHelper angelegt und den eigenen query da hinein verfrachtet.
Und man siehe da der ViewHelper ist sogar "global" verwendbar und ich kann mit den eingegebenen Werten arbeiten und die Referenzdatei nutzen.
Vielen Dank für deine Geduld und Hilfestellungen :-)
.