Zum Inhalt springen

File-Field im Kickstarter

Erstellt am 10. September 2006 · 8 Antworten · letzte Antwort am 12. September 2006

Tags: TCA, Datei-Upload, Frage

Stoffel ·

Hallo zusammen, ich steh etwas auf dem Schlauch:

ich bin gerade dabei, mir eine Extension zu schreiben. Jetzt habe ich im Kickstarter ein Feld vom Typ 'File' (Web image-files) hinzugefügt und alles klappt soweit! Ich kann nun auch im Backend einer Seite eine entsprechende Grafik zuweisen. Wenn ich allerdings dieselbe Grafik einer anderen Seite zuweisen möchte, dann zählt Typo3 automatisch hoch (aus 'grafik.jpg' wird dann 'grafik01.jpg'). Wie kann ich das verhindern? Ich frage den Dateinamen mit PHP ab und da kommt es dann natürlich zu Fehlern!!!

Würde mich riesig freuen, wenn ihr einen Tipp für mich hättet!

Gruß Stoffel 🙂

steffenk ·

da musst Du Dich nicht drum kümmern - der Filename steht auch immer korrekt in der DB. Ist ja logisch, das der Filename im selben Verzeichnis "unique" sein muss. Vorgehensweise ist immer: Unique Filename ermitteln, Datei unter diesem Namen ablegen, in der DB speichern.

Stoffel ·

Sorry, das versteh ich nicht #giggle# Der Ablauf sieht so aus:
ich wähle im Backend in den Seiteneigenschaften einer Seite eine Grafik aus und speichere die Seite ab. Nun wird in der "Pages"-Tabelle im Feld Picture der Dateiname abgelegt. Auf dieses Feld greife ich nun mittels PHP und SQL (exec_SELECTquery...) auf dieses Feld zu und lese den Inhalt aus. Wenn ich nun in den Seiteneigenschaften einer anderen Seite ebenfalls die gleiche Grafik auswähle und speichere, dann wird dieser Eintrag in der "Pages"-Tabelle in einen anderen Datensatz gespeichert.

Wo also kommt es hier zu einer Art "Doppelt-Belegung"? Ich verstehe ja, dass in einem Verzeichnis keine Datei doppelt vorhanden sein kann, aber in einer Datenbank-Tabelle in zwei unterschiedlichen Feldern dürfte das doch kein Problem sein! Ich habe schon überlegt, den Feldtyp einfach auf "String Input" zu ersetzen und den Dateinamen manuell in die Tabelle einzutragen, aber dann muss ich auf den Komfort der "Dateiauswahl" verzichten 😢

steffenk ·

Du musst das so sehen: Typo3 weiss ja nicht, das es die selbe Datei ist - es könnte ja auch ein anderes Bild mit selben Namen sein.
Da Du das DB-Feld ausliest, bekommst Du auch immer die korrekte Datei geliefert, wo ist also das Problem ?

Vll. ist ja auch Dein Prinzip nicht ganz richtig, wenn Dir das nicht hilft, beschreib doch mal genauer was Du vorhast und wie Du es umgesetzt hast 😉

Stoffel ·

So, hier die Erklärung von meinem Projekt:

für unsere Firma erstelle ich zur Zeit einen neuen Webauftritt. Unter anderem möchte ich eine Merkliste-Funktion integrieren, die von der Funktion her wie ein Warenkorb in einem Shop-System funktioniert. D.h. der Kunde kann eine Seite, die ihn interessiert mittels Button auf eine Merkliste setzen, diese Anzeigen, und die Seite auch wieder löschen. Schau einfach mal unter http://www.projekt3.stoffel2006.de, dann unter Spezialbandsägen. Dort kann man in der rechten Select-Box eine Maschine auswählen. Bis jetzt wird nur der Button zum Hinzufügen auf die Liste angezeigt (die Sprachunterstützung funktioniert schon 🙂 ) Man kommt dann automatisch zur Merkliste, wo die gespeicherten Maschinen-Seiten mit den dazugehörenden Werkstoffen und Produktionsarten aufgelistet werden. Außerdem möchte ich als erstes in der ganz linken Spalte eine entsprechende Grafik einblenden, und hier liegt mein Problem. Die ganzen Daten werden übrigens in einer Saisson-Variable gespeichert.

Die Logik, die hinter der Anzeige steckt ist etwas komplex: in der Tabelle PAGES habe ich für alle Werkstoffe und für alle Produktionsarten ein Feld hinzugefügt, wenn eine "10" drinsteht ist die Maschine für diesen Werkstoff geeignet, ansonsten nicht. Eigentlich wollte ich eine "1" für diesen Zweck, aber die Integer-Variable im Kickstarter beginnt komischerweise erst bei 10??? Im letzten Feld möchte ich mit dem Feldtyp "File" noch die Grafik auswählen, die ganz links angezeigt wird. Wähle ich eine Datei aus, wird der Dateinamen im entsprechenden Feld gespeichert. Möchte ich das selbe Bild aber auch einer anderen Maschine zuordnen, dann passiert das bereits beschriebene Problem, dass Typo3 automatisch ein 01, 02, etc. hinzufügt! #angry#

Hoffentlich konnte ich mein Problem jetzt halbwegs verständlich erklären. Das ganze ist recht komplex und wahrscheinlich auch etwas zu aufwändig programmiert (aber besser aufwändig als gar nicht 😃 ) Ich schick Dir gerne mal die PHP-Quelldatei, wenn dir das hilft!?? Bin sehr froh, wenn sich ein Profi mal meiner Sache annimmt

Gruß Stoffel

PS: Übrigens: nicht auf den Inhalt achten, der macht noch keinen Sinn! 😉

steffenk ·

ok, jetzt verstehe ich was Du willst.

Ich habe etwas ähnliches auch mal realisiert.
Du bekommst sehr viel Unterstützung von Typo3, wenn Du weisst, wo die Infos stehen.
So kannst Du Dir ja mal das Array $GLOBALS['TSFE']->page anschauen, am besten mit einem debug.Du wirst sehen, das der komplette Inhalt des Contents bereits im Array ist, man kann sich also Extra-Abfragen auf die DB sparen.

Zu Deinem Integerproblem: Im TCA-Array ist das Feld ja definiert und Standardmässig steht da min=10 und max=10000. Das kannst Du beliebig ändern (manuell). Du solltest nicht scheuen, einen Blick in die TCA-Referenz zu riskieren, das bringt Dich auf weitere Ideen.

Doch zu Deinem konkreten Fall: So wie ich das sehe, ist bei den Produkten bereits ein Bild vorhanden, Du musst doch nur diese Referenz speichern.
Ev. wäre es für Dich sogar besser, alles mit der Extension auszugeben: Inhalt + Zusatzfunktionen.
Du kannst für Grafiken auch das media-Feld der Seite benutzen, dann kannst Du die Referenz speichern und nicht das Bild selber.

Für Deinen Fall könntest Du sogar tt_products nehmen, den Warenkorb als Merkliste benutzen und nur Kassenfunktionen auslassen.

Ich hoffe das Dir die Anregungen weiterhelfen.

Stoffel ·

Vielen Dank für die Tipps, ist genial daß Du mir hilfst! Werd mir die TCA-Referenz schnellstmöglich mal durchlesen.

So kannst Du Dir ja mal das Array $GLOBALS['TSFE']->page anschauen, am besten mit einem debug.

Ich geb die Variable halt in PHP mit var_dump() aus, verstehst Du das unter "debug"?? #giggle#