Ergebnis 1 bis 11 von 11

Thema: singleSRC Umwandlung in Zielpfad

  1. #1
    Contao-Fan
    Registriert seit
    07.04.2010.
    Beiträge
    288

    Standard singleSRC Umwandlung in Zielpfad

    Ich bräuchte nochmal eine keine Unterstützung. Ich habe eigene Inserttags erstellt, die bis auf singleSRC funktioneren. Gelsen habe ich, dass es irgendwie mit $objFile = \FilesModel::findByPk($this->singleSRC); soll. Aber, ich bekomme das irgendwie in der ReplaceInsertTagsListener.php nicht hin. Der Code sieht so aus:


    HTML-Code:
    ...
    use Contao\FilesModel;
    ...
    
    // Inserttag for event data by id {{kgsevent_bild::123}}
            if ('kgsevent_bild' === $key) {
                if (empty($elements[1])) {
                    return '';
                }
    
                if (!($event = CalendarEventsModel::findById($elements[1]))) {
                    return '';
                }
    	    
    	    $objFile = \FilesModel::findByPk($this->singleSRC);
                return \sprintf(
                    $event->singleSRC,
                    );
             }
    Leider zeigt die log-Datei den Fehler: Error: "Class "FilesModel" not found" at ReplaceInsertTagsListener.php"

    Vielleicht kann mir einer einen Tip geben?
    Geändert von Georgi (06.05.2025 um 14:28 Uhr)

  2. #2
    Contao-Urgestein Avatar von fiedsch
    Registriert seit
    09.07.2009.
    Ort
    München
    Beiträge
    3.038

    Standard

    Wenn Du

    PHP-Code:
    use Contao\FilesModel
    verwendest, darfst Du nicht

    PHP-Code:
    \FilesModel 
    schreiben, denn das würde das FilesModel ja im Root Namespace suchen. Du willst

    PHP-Code:
    $objFile FilesModel::findByPk($this->singleSRC); 
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

  3. #3
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    37.226
    Partner-ID
    10107

    Standard

    $this->singleSRC macht bei dir vermutlich auch keinen Sinn - aber da musst du mehr von deinem Code zeigen, was genau du überhaupt machen willst.
    » sponsor me via GitHub or Revolut

  4. #4
    Contao-Fan
    Registriert seit
    07.04.2010.
    Beiträge
    288

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    $this->singleSRC macht bei dir vermutlich auch keinen Sinn - aber da musst du mehr von deinem Code zeigen, was genau du überhaupt machen willst.
    Ich folge deinem Hinweis, die event-ID zu nutzen. Mit {{file::getEventbild.php?var=eventid}} im Formular erzeuge ich über getEventbild.php
    Code:
    <?php $kgsID = \Contao\Input::get(\Contao\Input::get('var')); 
    echo '{{kgsevent_bild::'.$kgsID.'}}'; 
    ?>
    einen eigenen Inserttag wie {{kgsevent_bild::123}}. Die entstehen dann in KgsEigenContaoKgsCalendarBundle.php
    Code:
    namespace KgsEigen\ContaoKgsCalendarBundle\EventListener;
    
    use Contao\CalendarEventsModel;
    use Contao\PageModel;
    use Contao\FilesModel;
    
    class ReplaceInsertTagsListener
    {
        public function __invoke(
            string $insertTag,
            bool $useCache,
            string $cachedValue,
            array $flags,
            array $tags,
            array $cache,
            int $_rit,
            int $_cnt
        ) {
            // Extract tag.
            $elements = \explode('::', \explode('|', $insertTag)[0]);
            $key      = \strtolower($elements[0]);
    
    	// Inserttag for event data by id {{kgsevent_bild::123}}
            if ('kgsevent_bild' === $key) {
                if (empty($elements[1])) {
                    return '';
                }
    
                if (!($event = CalendarEventsModel::findById($elements[1]))) {
                    return '';
                }
    	    
    	    return \sprintf(
                    $event->singleSRC,
                    );
             }
    In $event->singleSRC soll nicht der tatsächliche Wert ("DwY?I? *???ZD") stehen, sondern der umgesetzte (FilesModels) Wert "files/Veranstaltungen/Bild.jpg". Ich habe schon mit "$objFile = \FilesModel::findByPk($this->singleSRC)", aber irgendwie sehe ich den Wald vor Bäumen nicht. Für einen kleinen Code-Schnipsel wäre ich sehr dankbar.

  5. #5
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    37.226
    Partner-ID
    10107

    Standard

    Warum genau machst du diesen Umweg mit dem {{file::*}} Insert-Tag? Den brauchst du doch gar nicht.

    Und ich würde dir auch eher empfehlen die moderne Variante für die Umsetzung eines Insert-Tags zu benutzen: https://docs.contao.org/dev/framewor...om-insert-tags
    » sponsor me via GitHub or Revolut

  6. #6
    Contao-Fan
    Registriert seit
    07.04.2010.
    Beiträge
    288

    Standard

    Ehrliche Antwort: Ich habe mich als "Laie" von Contao 2 bis auf 4.13 hochgekämpft und eine brauchbare Vereinsseite produziert. Bevor ich "abdanke", will ich eigentlich die Seite noch auf 5.3 anheben. Wir brauchten letztes Jahr für unseren Newsletter einen Inserttag. Ich habe mir die "moderne Variante" angesehen, aber ich habe mich dann doch aus Zeitgründen für eine professionelles zugekauftes Script entschieden.
    Es war dann einfach, dieses als Vorlage anzupassen, aber mit dem Datenbankfeld "singlSRC" komme ich halt doch nicht zurecht (das im Template angezeigt Feld "src" ist ja nicht in der Datenbank nicht hinterlegt). Aber irgandwann kommt man am Ende der Leiter an ...

  7. #7
    Alter Contao-Hase
    Registriert seit
    24.02.2021.
    Beiträge
    1.499
    Partner-ID
    11715
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Zitat Zitat von Georgi Beitrag anzeigen
    aber ich habe mich dann doch aus Zeitgründen für eine professionelles zugekauftes Script entschieden.
    Ist das Skript mit dem file-insert Tag das im Jahre 2024 professionell zugekaufte Skript?

    Falls du nun die File gefunden hast mit der UUID... fehlt dir nur noch das ->getPath() ?
    Ich würde das heute auch mit dem Virtual Filesystem machen (Geht auch in Contao 4.13).

    ungetestet:
    PHP-Code:
    public function __construct(private readonly VirtualFilesystemInterface $fileSystem) {}

    public function 
    getMyPath(string $uuid): string|null
    {
        
    $file $this->fileSystem->get($uuid);

        return 
    $file?->getPath();

    Zitat Zitat von Georgi Beitrag anzeigen
    Aber irgandwann kommt man am Ende der Leiter an ...
    Die Leiter wächst immer weiter an, du kommst nicht am Ende an, du musst einfach höher klettern.

  8. #8
    Contao-Fan
    Registriert seit
    07.04.2010.
    Beiträge
    288

    Standard

    Zitat Zitat von zoglo Beitrag anzeigen
    Ist das Skript mit dem file-insert Tag das im Jahre 2024 professionell zugekaufte Skript?
    Ja! Wo müsste ich denn das script hier einsetzen? am Ende soll
    return \sprintf(
    $event->singleSRC,

    "files/Veranstaltungen/BILDname.jpg"

    ausgeben.

  9. #9
    Alter Contao-Hase
    Registriert seit
    24.02.2021.
    Beiträge
    1.499
    Partner-ID
    11715
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Zitat Zitat von Georgi Beitrag anzeigen
    Ja!
    Dann hapert es hier auch mit der Leiter

    Hatte das Skript vorher geklappt?
    Du bekommst ein Objekt vom FilesModel zurück, wie erwähnt fehlt bei dir dann nur noch $objFile->path

  10. #10
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    37.226
    Partner-ID
    10107

    Standard

    Zitat Zitat von Georgi Beitrag anzeigen
    Ehrliche Antwort: Ich habe mich als "Laie" von Contao 2 bis auf 4.13 hochgekämpft und eine brauchbare Vereinsseite produziert. Bevor ich "abdanke", will ich eigentlich die Seite noch auf 5.3 anheben. Wir brauchten letztes Jahr für unseren Newsletter einen Inserttag. Ich habe mir die "moderne Variante" angesehen, aber ich habe mich dann doch aus Zeitgründen für eine professionelles zugekauftes Script entschieden.
    Es war dann einfach, dieses als Vorlage anzupassen, aber mit dem Datenbankfeld "singlSRC" komme ich halt doch nicht zurecht (das im Template angezeigt Feld "src" ist ja nicht in der Datenbank nicht hinterlegt). Aber irgandwann kommt man am Ende der Leiter an ...
    Nichtsdestotrotz ist es vielleicht in deinem Fall dann doch besser, wenn du einfach den {{post::*}} Insert-Tag selbst implementierst. Dann müsstest du im Endeffekt ja gar nichts ändern. z.B.:
    PHP-Code:
    // src/InsertTag/PostInsertTag.php
    namespace App\InsertTag;

    use 
    Contao\CoreBundle\DependencyInjection\Attribute\AsInsertTag;
    use 
    Contao\CoreBundle\InsertTag\Exception\InvalidInsertTagException;
    use 
    Contao\CoreBundle\InsertTag\InsertTagResult;
    use 
    Contao\CoreBundle\InsertTag\OutputType;
    use 
    Contao\CoreBundle\InsertTag\ResolvedInsertTag;
    use 
    Contao\CoreBundle\InsertTag\Resolver\InsertTagResolverNestedResolvedInterface;
    use 
    Contao\Input;

    #[AsInsertTag('post')]
    class PostInsertTag implements InsertTagResolverNestedResolvedInterface
    {
        public function 
    __invoke(ResolvedInsertTag $insertTag): InsertTagResult
        
    {
            if (!
    $parameter $insertTag->getParameters()->get(0)) {
                throw new 
    InvalidInsertTagException('Missing parameter for insert tag.');
            }
            
            return new 
    InsertTagResult((string) Input::post($parameter), OutputType::text);
        }

    Ungetestet und auf eigene Gefahr.
    » sponsor me via GitHub or Revolut

  11. #11
    Contao-Fan
    Registriert seit
    07.04.2010.
    Beiträge
    288

    Standard

    Ich habe mein Problem mit dem "Bildpfad" für den Inserttag gelöst:

    Statt
    Code:
    return \sprintf(
                    $event->singleSRC,
                    );
    führt das zum Ziel:

    Code:
    use Contao\FilesModel;
    ...
    return \sprintf(
                    (FilesModel::findByPk($event->singleSRC)->path),
    		);
    und es kommt wie gewünscht: "files/Veranstaltungen/BILDname.jpg"

    Danke für eure Hilfe!
    Geändert von Georgi (06.05.2025 um 14:41 Uhr)

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •