Contao-Camp 2024
Ergebnis 1 bis 15 von 15

Thema: Dateipfad aus BLOB Feld

  1. #1
    Contao-Nutzer Avatar von Spelmann
    Registriert seit
    24.11.2012.
    Ort
    Nördlich von Berlin
    Beiträge
    234

    Standard Dateipfad aus BLOB Feld

    Liebe Community, liebes Metamodel Team.
    ich hoffe ich strapaziere hier eure Geduld nicht allzusehr.

    Da bei mir die Zeit für ein Projekt drückt würde ich die Einträge meiner Metamodel Tabelle ganz gerne mit "nomalem" SQL und PHP verarbeiten, also nicht in einem Metamodel Frontend Modul sondern in einem eigenen PHP-File das ich dann via Modul "eigenes HTML" einbinde. Da verstehe ich was ich tue und habe meine Workarounds. Gerade gefilterte Datenbankanfragen usw. sind ja dann schnell realisiert. Wie so etwas mit Metamodel Bordmitteln zu erledigen ist (mehrere Dropdownlisten im Frontend mit denen ich mir eine gefilterte Datenbankabfrage montiere) ist mir auf diesem Weg unklar. Wie gesagt mit simplen PHP keine große Sache. Nur ein Problem habe ich:

    Für Dateien wird in der Tabelle eines Metamodels ja kein Textfeld mit dem Pfad zur Datei sondern ein Feld mit Binärdaten angelegt (Warum eigentlich?). Sind da tatsächlich die JPGs abgelegt? Würde ich in einem Metamodel-Frontend-Modul das betreffende Feld ansprechen, bekäme ich ja einen Pfad, so wie ich mir das vorstelle.

    Meine Frage:
    Wie komme ich an den Dateipfad bei einem Datensatz im Feldtyp [file] wenn ich nicht über ein Meta-Model-Frontend Modul sondern via PHP-Template zugreifen möchte?

    Vielen, vielen Dank für euer Verständnis und eure Geduld hier im Forum!
    Geändert von Spelmann (06.12.2016 um 12:14 Uhr)

  2. #2
    Contao-Fan
    Registriert seit
    20.10.2012.
    Ort
    Berlin
    Beiträge
    257

    Standard

    Ich würde dir zwar eher dazu raten fürs FE ein Rendersetting anzulegen und die mm Filter zu verwenden.
    Aber das Feld mit den Binärdaten, das du meinst sollte wohl ein Querverweis zur tl_files tabelle sein (uuid Spalte) wo du den Pfad herbekommen könntest.

  3. #3
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.684
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von Spelmann Beitrag anzeigen
    ich hoffe ich strapaziere hier eure Geduld nicht allzusehr.
    => geht noch ;-)

    Zitat Zitat von Spelmann Beitrag anzeigen
    Da verstehe ich was ich tue und habe meine Workarounds.
    => dann solltest Du ein eigenes Modul erstellen und nicht mit MM "rumwerkeln"

    Zitat Zitat von Spelmann Beitrag anzeigen
    Meine Frage:
    Wie komme ich an den Dateipfad bei einem Datensatz im Feldtyp [file] wenn ich nicht über ein Meta-Model-Frontend Modul sondern via PHP-Template zugreifen möchte?
    => siehe API im H A N D B U C H - sogar mit Beispiel

  4. #4
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Zitat Zitat von Spelmann Beitrag anzeigen
    Für Dateien wird in der Tabelle eines Metamodels ja kein Textfeld mit dem Pfad zur Datei sondern ein Feld mit Binärdaten angelegt (Warum eigentlich?). Sind da tatsächlich die JPGs abgelegt? Würde ich in einem Metamodel-Frontend-Modul das betreffende Feld ansprechen, bekäme ich ja einen Pfad, so wie ich mir das vorstelle.
    "(Warum eigentlich?)" - Weil man dann über die Dateiverwaltung Bilder verschieben oder umbenennen kann. Wird ein Bild in einen Datesatz eingetragen, steht da also nur noch ein Verweis auf die Datei in tl_files. Das ganze nennt sich DBAFS (database assisted file system). Diese Daten kannst du mit dem FilesModel leicht abgreifen.
    PHP-Code:
    $objFile = \FilesModel::findByUuid($meineUUID);
    echo 
    $objFile->path// files/meineDatei.jpg 
    Datenbankabfragen kannst du auch leicht mit der Contao-Class Database machen. Schaue im Core wie es dort gemacht wird.
    PHP-Code:
    $objDatabase = \Database::getInstance(); 
    Schaue aber vorher, ob die Variablen nicht bereits mit dem Template vorhanden sind. So, oder ähnlich:
    PHP-Code:
    <?php $this->showTemplateVars(); ?>
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  5. #5
    Contao-Nutzer Avatar von Spelmann
    Registriert seit
    24.11.2012.
    Ort
    Nördlich von Berlin
    Beiträge
    234

    Standard

    => siehe API im H A N D B U C H - sogar mit Beispiel
    Ok, die API tut was sie soll. Danke für den Hinweis. Ich erkenne hier aber den Vorteil für meine gesamte Fragestellung im Vergleich zu einem nativen MetaModel Frontend Modul nicht.
    Zwar kann ich nun in meinem eigenen Template das Bild-Feld auslesen, (was ich ja im MM-FE-Modul auch schon konnte) aber trotzdem kein einfaches nachvollziehbares SQL-Statement dafür verwenden.
    Ich lerne gerne dazu, brauche aber noch Unterstützung.

    So hatte ich es zuvor versucht ('name' sowie 'ortZiel' sind Textfelder, 'portrait' ist ein Dateifeld vom Typ BLOB an dessen Bildpfad ich möchte.):
    PHP-Code:
    $this->import('Database');
    $myData $this->Database->prepare("SELECT name,ortZiel, CONVERT(`portrait` USING utf8) AS `portrait` FROM mm_storys WHERE ortZiel LIKE 'FooBar'")->execute();
    //ergibt nur Murks 
    Ist das hier der Schlüssel in der API, und was habe ich hier zu tun?
    PHP-Code:
    $objFilter $objMetaModel->getEmptyFilter(); 
    @Andreas
    Danke für deine Anmerkungen aber so komplett aus dem Zusammenhang und ohne Verweise auf kleine Beispiele verstehe ich sie leider nicht. Sorry.
    Geändert von Spelmann (06.12.2016 um 15:55 Uhr)

  6. #6
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.684
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von Spelmann Beitrag anzeigen
    a) Ich erkenne hier aber den Vorteil für meine gesamte Fragestellung im Vergleich zu einem nativen MetaModel Frontend Modul nicht.

    b) @Andreas Danke für deine Anmerkungen aber so komplett aus dem Zusammenhang und ohne Verweise auf kleine Beispiele verstehe ich sie leider nicht. Sorry.
    zu a) was Deine "gesamte Fragestellung sein könnte" blieb mir bisher verborgen - MM ist nicht für jeden Zweck das richtige Tool http://metamodels.readthedocs.io/de/...-anderen-tools

    zu b) sorry, wenn ich mir die Bemerkung erlaube - ohne diese Grundlagen wird es sicher schwer was auf die Beine zu stellen... ggf. mit einem einfacherem Projekt anfangen

  7. #7
    Contao-Nutzer Avatar von Spelmann
    Registriert seit
    24.11.2012.
    Ort
    Nördlich von Berlin
    Beiträge
    234

    Standard

    zu b) sorry, wenn ich mir die Bemerkung erlaube - ohne diese Grundlagen wird es sicher schwer was auf die Beine zu stellen
    Welche Grundlagen? Die drei Codeschnipsel? Wo ist vielleicht beschrieben wie ich die verwenden muss? Link zu einem Tutorial? Beispiel Script? Link zur Stelle in einer Doku wo genau das beschrieben wird? Ist nicht so, dass ich nicht gesucht hätte. Leute! Für Nutzer die nicht hundertprozentige Entwickler sind ist nicht jede Codezeile sofort der Schlüssel zu Erkenntnis. Ich weiß manchmal gar nicht wo ich suchen muss. Mir muss hier keiner Code vorkauen, aber ich denke ich habe meine Frage klar und freundlich gestellt. Dein Hinweis auf die API war super. Ich wußte gar nicht, dass es die gibt. Auch wenns mir erstmal nur bedingt weitergeholfen hat.
    was Deine "gesamte Fragestellung sein könnte" blieb mir bisher verborgen
    Kann ich mit einem SQL-Statement (siehe oben) in einem eigenen Template den Bildpfad aus einem Feld vom type [file] extrahieren und wenn ja, wie?

    Wenn nicht:
    Wie kann ich bei Verwendung der API oben beschriebenes SQL Statement nachbilden?

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

    Standard

    Zitat Zitat von Spelmann Beitrag anzeigen
    Kann ich mit einem SQL-Statement (siehe oben) in einem eigenen Template den Bildpfad aus einem Feld vom type [file] extrahieren und wenn ja, wie?
    Das kannst Du, allerdings ist wohl das Vorgehen in zwei Schritten übersichtlicher und später leichter nachvollziehbar (also die uuid aus Deinem BLOB Feld und dann wie oben von Andreas geschrieben

    PHP-Code:
    \FilesModel::findByUuid($meineUUID)->path// Edit: ->path anstelle ->getPath() siehe #10 
    Wenn Du die die betroffen Datenbanktabellen anschaust, siehst Du, daß Du das natürlich auch in einem mittels JOIN machen könntest.

    In in Pseudocode (und in der Annahme Deine Tabellen- uns Spaltennamen korrekt getroffen zu haben) etwa so:

    Code:
    SELECT mm_storys.*,tl_files.path FROM mm_storys LEFT JOIN  tl_files ON ( mm_storys.portrait =  tl_files.uuid) WHERE mm_storys.ortZiel LIKE 'FooBar';
    Kurze Anmerkung zu Deinem obigen

    PHP-Code:
    $this->import('Database');
    $myData $this->Database->prepare("SELECT name,ortZiel, CONVERT(`portrait` USING utf8) AS `portrait` FROM mm_storys WHERE ortZiel LIKE 'FooBar'")->execute();
    //ergibt nur Murks 
    1. Was ist der Murks?
    2. Du lässt einige Features des Frameworks außen vor. Besser wäre es in etwa so:


    PHP-Code:
    $myData = \Database::getInstance()
      ->
    prepare("SELECT name,ortZiel, CONVERT(`portrait` USING utf8) AS `portrait` FROM mm_storys WHERE ortZiel LIKE ?")
      ->
    execute('FooBar');
    //ergibt nur Murks 
    Hoffe, das hilft Dir.
    Geändert von fiedsch (06.12.2016 um 19:49 Uhr)
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

  9. #9
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    https://community.contao.org/de/show...l=1#post426347

    Mit dem ersten Schnippsel bekommst du deinen Pfad, wenn du bereits deine UUID ($meineUUID) hast. (Suche auch in den Docs nach "Models")

    Den zweiten Schnippsel kannst du einfach im Core suchen und siehst dort, wie es gemacht wird. ("\Database::getInstance()") Das erste Suchergebnis, das ich finde, sieht gekürzt z.B. so aus (https://github.com/contao/core/blob/...ckend.php#L669):
    PHP-Code:
    <?php
    $objDatabase 
    = \Database::getInstance();

    // Get published pages
    $objPages $objDatabase->prepare("SELECT * FROM tl_page WHERE pid=? AND (start='' OR start<='$time') AND (stop='' OR stop>'" . ($time 60) . "') AND published='1' ORDER BY sorting")
                            ->
    execute($pid);

    if (
    $objPages->numRows 1)
    {
        return array();
    }

    // Recursively walk through all subpages
    while ($objPages->next())
    {
        echo 
    $objPage->type;
    }
    Den dritten Schnippsel einfach ins Template einfügen, dann bekommst du die Template-Variablen.

    Wenn dein Query
    Code:
    "SELECT name,ortZiel, CONVERT(`portrait` USING utf8) AS `portrait` FROM mm_storys WHERE ortZiel LIKE 'FooBar'"
    in der PHP-Datei nicht funktioniert, dann probiere ihn doch mal direkt in phpMyAdmin aus. Oder probiere zuerst einmal einen einfachen Query.
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  10. #10
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Zitat Zitat von fiedsch Beitrag anzeigen
    PHP-Code:
    \FilesModel::findByUuid($meineUUID)->getPath(); 
    ->path sollte dort schon richtig sein, weil der steht ja im Feld tl_files.path drin. Du kannst damit direkt jedes Feld holen.
    PHP-Code:
    $myFileName = \FilesModel::findByUuid($meineUUID)->name
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  11. #11
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.684
    User beschenken
    Wunschliste

    Standard

    in dem Beispiel http://metamodels.readthedocs.io/de/....html#beispiel kannst Du

    * Deine MM-Tabelle abfragen (mm_stories)
    * einen Filter definieren (ortZiel LIKE 'FooBar') oder vorhanden einbinden
    * erhältst alle Items...
    * über die Du iterieren kannst (Zeile #48) - im Knoten raw - hast Du für das/die Bild(er) Zugriff auf UUID und Pfad


    ein "ich schreibe mal ein SQL-Query" verstehe ich nicht darunter, um was über Deine Zielstellung (des Projektes) zu erfahren - ggf. hätte ich bessere/andere Lösungsvorschläge... aber muss ja auch nicht sein

    Für das bisherige Handbuch habe ich weit über 100h investiert https://community.contao.org/de/show...-Handbuch-(DE) - würde gern daran weiter arbeiten, wenn jemand (oder sogar zwei...) sich mit dem Test von Bugs und PRs beschäftigen könnte - macht aber "keiner"

  12. #12
    Contao-Nutzer Avatar von Spelmann
    Registriert seit
    24.11.2012.
    Ort
    Nördlich von Berlin
    Beiträge
    234

    Standard

    Puh, wie kriege ich denn jetzt hier den Dampf aus dem Thread?

    Also erst einmal vielen Dank fiedsch. Dein Vorschlag via JOIN funktioniert.
    In einer Schreibweise die ich halbwegs verstehe sieht das dann so aus:
    PHP-Code:
    $this->import('Database'); 
    $myData $this->Database->prepare("SELECT mm_storys.*,tl_files.path FROM mm_storys LEFT JOIN  tl_files ON ( mm_storys.portrait =  tl_files.uuid) WHERE mm_storys.ortStart LIKE 'Homs'")->execute(); 
    echo 
    $myData->path//gibt mir den Dateipfad. 
    Wirklich, vielen Dank! Hätte ich nicht von alleine hinbekommen.

    Ich schaue mir auch die anderen Methoden an, deren Verwendung ich noch nicht verstehe. Vielen Dank auch allen dafür.

    Nun zur Form der Unterstützung.
    Liebe Entwickler. Ich glaube es gibt keinen ambitionierten Webdesigner der nicht voller Respekt für die Leistungen jener ist, die mit Open Source Projekten überhaupt die Basis schaffen. Das geht mir nicht anders. Dass für mich, MetaModels Contao überhaupt erst sinnvoll vervollständigt, habe ich an anderer Stelle schon einmal gesagt, wiederhole es aber gerne.

    Als Entwickler eines Content Management Systems bzw. seiner Erweiterungen habt ihr es mit einer heterogenen Nutzergemeinde zu tun. Das Spektrum reicht von jenen, die sich nur auf die Verwendung von Bordmitteln beschränken bis zu denen, die virtuos auf der ganzen Partitur von Contao und den Modulen spielen können. Ich sehe mich da leider eher im ersten Viertel. Da ich als Einzelunternehmer nicht nur code sondern auch viele, wirklich viele andere Dinge können muss, sind meine Kenntnisse im Detail oft beschränkt. Aber ich bin ambitioniert, Und dafür erwarte ich auch Respekt. Bemerkungen die in die Richtung gehen "dann ist das halt zu kompliziert für Dich" oder die pauschale Vermutung "RTFM" sind nicht hilfreich.

    Es ist ja nicht so, dass es schon zig Threads zu meinem Problem gegeben hätte. Und ja, tolle Arbeit die ihr ins Handbuch gesteckt habt. Ich hab gesehen, dass es gewachsen ist, aber Fragestellungen im Forum sind hier doch eine tolle Ergänzung. Man kann als halbwissender nicht immer ahnen wo genau man nach einer Information suchen muss, welcher Abschnitt die Lösung eines Problems beschreibt, kann durchaus überlesen werden. Es ist nicht pauschal Sturheit oder Faulheit wenn ein Nutzer aus einem kleinen Codeschnipsel nicht sofort die komplette Verfahrensweise extrapolieren kann. Ich beherrsche nur PHP und MySQL Grundlagen und kann trotzdem komplexe und sichere Prozesse realisieren. Die sind vielleicht nicht elegant geschrieben und top performant aber so what?

    Ich wünsche mir sehr, dass ich hier auch weiter Fragen stellen kann. Und wenn ich was nicht verstanden habe nochmal und wenn ich es immer noch nicht verstanden habe noch einmal. Ich denke ihr versteht was ich meine.

  13. #13
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.684
    User beschenken
    Wunschliste

    Standard

    ... dass die Einarbeitung in MM etwas Zeit bedarf und die Unterstützung an Handbuch, Tutorials usw. noch "nicht ausreicht", hatte ich schon in einem anderen Posting von Dir geschrieben...

    Was ich wiederum bei Dir - und auch bei etlichen anderen Fragestellern - nicht nachvollziehen kann, ist das "geizige Mitteilungsbedürfnis" was die Problemstellung anbetrifft.

    Als Parabel dazu wäre dazu die
    Fragestellung "ich möchte einen Keil in Holz haben"
    Gegenfrage: "was ist Dein Ziel?"
    Antwort: "...habe ich doch geschrieben: einen Keil in Holz! sagte ich schon.."
    Nachfrage: "Was möchtest Du mit dem Keil im Holz?"
    erneute Antwort: "Was ist nun daran so schwer: einen Keil!!!"

    Hätte man gewusst, dass mit dem Keil ein Baum gefällt werden soll aus dem Bretter geschnitten um mit denen einen Übergang über Bach zu bauen, hätte man sagen können, dass um die Ecke zwei fertige Bohlen liegen, die man nur auflegen muss...

    ;-)

  14. #14
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  15. #15
    Maintainer Avatar von xtra
    Registriert seit
    02.07.2009.
    Ort
    Tuebingen
    Beiträge
    2.007
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von zonky Beitrag anzeigen
    Als Parabel dazu
    Die muss ich mir merken... passt leider inzwischen sehr oft.
    Bedenke stets: Wenn Du ungenaue oder unzureichende Angaben machst, so koennte dies die Bearbeitung deiner Frage endlos verzoegern (oder sogar dazu fyhren, dass ich zu viel nachdenken muss und die Antwort vergesse!). Kein Support per PN.

Aktive Benutzer

Aktive Benutzer

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

Lesezeichen

Lesezeichen

Berechtigungen

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