Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Module › Modul-Entwicklung ›

Imagecache via Form API

Eingetragen von drupalcentersven (44)
am 11.02.2011 - 18:47 Uhr in
  • Modul-Entwicklung
  • Drupal 6.x

Es ist ja relativ einfach möglich, eine Datei hochzuladen über ein Formular, das mit der Form API erstellt worden ist.

Kann ich die Datei - in diesem Fall ein Bild - direkt mit Imagecache oder sonstwie auf eine gewünschte Größe bringen?

Danke

‹ Invite und Registration Code im Zusammenspiel Datei Upload: Extensions ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

ImageCache bringt die Bilder

Eingetragen von Exterior (2903)
am 11.02.2011 - 20:19 Uhr

ImageCache bringt die Bilder auf die gewünschte Größe, wenn die Bilder erstmals mittels theme_imagecache() aufgerufen werden.

Wenn du die hochgeladenen Bilder also im Anschluss mit theme_imagecache() anzeigst, hast du die entsprechend veränderte Version des Bildes zur Verfügung. Beachte, dass das Original-Bild immer noch vorhanden ist und die ImageCache-Varianten zusätzlich gespeichert werden.

Wenn du das Bild nach dem Upload skaliert speichern willst (also nicht das Original behalten und zusätzlich eine skalierte Version speichern sondern direkt das Original entsprechend skaliert speichern), dann kannst du dir mal image_scale oder image_scale_and_crop anschauen. Damit kannst du direkt nach dem Upload entweder das Bild selbst skalieren oder eine skalierte Variante speichern und das alte löschen.

Hier gibt's noch ein paar Bild-Funktionen: http://api.drupal.org/api/drupal/includes--image.inc/group/image/6

  • Anmelden oder Registrieren um Kommentare zu schreiben

Da habe ich wohl den Karren

Eingetragen von drupalcentersven (44)
am 14.02.2011 - 14:07 Uhr

Da habe ich wohl den Karren vor das Pferd gespannt.

Ich habe einen Content Type mit einem Custom Module erstellt. Da gibt es mehrere Felder, dynamische Select Lists, etc. Funkutioniert super.
Wie kann ich nun zu diesem Content Type ein Upload Field für ein Bild hinzufügen? Wo wird das Bild gespeichert? Muss ich im Schema für den Content Type ein extra Feld für das Bild definieren?

Danke.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ein Upload-Feld kannst du

Eingetragen von Exterior (2903)
am 14.02.2011 - 18:06 Uhr

Ein Upload-Feld kannst du einbinden, indem du eben ein Feld für Datei-Upload mit in das Form-Array aufnimmst.

Gespeichert wird die Datei ohne dein zutun gar nicht, das musst du selbst beim Speichern des Nodes mittels file_save_upload regeln.

Zitat:

Muss ich im Schema für den Content Type ein extra Feld für das Bild definieren?

Kommt drauf an, was du mit dem Bild machen willst. Mit file_save_upload wird die Datei auf jeden Fall in der files-Tabelle eingetragen (beachte, dass die Datei mit file_save_upload nur temporär gespeichert wird, sie wird also irgendwann wieder gelöscht. Wenn du das verhindern willst, musst du nach dem speichern der Datei mittels file_set_status den Status ändern)

  • Anmelden oder Registrieren um Kommentare zu schreiben

"Beim Speichern der Node"?

Eingetragen von drupalcentersven (44)
am 15.02.2011 - 13:53 Uhr

Wie greife ich den Moment ab, in dem die Node gespeichert wird? Ich habe in meinem Modul keine Submit-Funktion! Das heißt, die Buttons "save" und "preview" werden irgendwie automatisch erstellt. Ist das normal?

Hast du da ein Beispiel, wie mans macht?

  • Anmelden oder Registrieren um Kommentare zu schreiben

Zitat: Das heißt, die Buttons

Eingetragen von Exterior (2903)
am 15.02.2011 - 14:45 Uhr
Zitat:

Das heißt, die Buttons "save" und "preview" werden irgendwie automatisch erstellt. Ist das normal?

Wenn man mal aufmerksam die API-Dokumentation zu hook_form liest, wird man feststellen, dass das normal ist.

Du musst dem Formular deine eigene Submit-Funktion zuweisen:

<?php
function mymodule_form(&$node, $form_state)
  {
   
//Hier kommt der Quellcode für dein Formular
   
$form['title'] = array(
     
'#type' => 'textfield',
     
'#default_value' => $node->title,
     
'#size' => 60,
    );
   
   
//.......
    //usw.
   
    //Hier kommt nun deine eigene submit-Funktion
   
$form['#submit'][] = 'mymodule_meine_submit_funktion';
  }
 
//Und hier kommt der Code für deine eigene Submit-Funktion
function mymodule_meine_submit_funktion($form, &$form_state)
  {
   
//Quellcode
 
}
 
?>

Das dürfte funktionieren, damit musst du mal ein wenig herumexperimentieren, weil ich nicht genau weiß, welche Variablen an die Funktion übergeben werden, ob z. B. $node mit übergeben wird usw.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ok, das funktioniert schon

Eingetragen von drupalcentersven (44)
am 15.02.2011 - 15:55 Uhr

Ok, das funktioniert schon mal. Vielen Dank!

Das Bild wird im "files" Ordner gespeichert und in der Datenbank auch in der Tabelle "files" eingetragen, unter anderem mit einer "fid".

1. Wie weiß ich, welche "fid" zu welcher Node gehört?

2. Wie kann ich das Bild in der Node anzeigen? Wie muss ich den hook_view ändern?

  • Anmelden oder Registrieren um Kommentare zu schreiben

Zitat: 1. Wie weiß ich,

Eingetragen von Exterior (2903)
am 15.02.2011 - 21:36 Uhr
Zitat:

1. Wie weiß ich, welche "fid" zu welcher Node gehört?

Das musst du dir selbst speichern. Du kannst z. B. mit deinem Modul eine eigene DB-Tabelle anlegen, in der die Node-ID mit allen dazu gehörenden File-IDs (fid) gespeichert wird.

Zitat:

2. Wie kann ich das Bild in der Node anzeigen? Wie muss ich den hook_view ändern?

Du müsstest im hook_view erstmal die zugehörige File-ID heraussuchen. Damit kannst du dir dann aus der files-Tabelle den Pfad der Datei holen und damit kannst dann über theme_imagecache ein Bild einfügen.

Bsp:

<?php
function mymodule_view($node, $teaser = FALSE, $page = FALSE)
  {
   
node_prepare($node, $teaser);
   
   
//zum Node gehörende fid suchen
    //geht davon aus, dass es eine Tabelle "mytable" gibt, in welcher es 2 Spalten gibt:
    //nid und fid (also zu jedem Node gehört nur ein Bild)
   
$fid = db_result(db_query("SELECT fid FROM {mytable} mt WHERE nid = %d;", $node->nid));
   
$path = db_result(db_query("SELECT filepath FROM {files} f WHERE fid = %d;", $fid));
   
   
//attributes-Array erstellen
    //übergibt Attribute, z. B. Klasse, ID usw.
   
$attributes = array('class' => 'meine-klasse', 'id' => 'meine-id');
   
   
//Bild-Tag mittels theme_image erstellen   
   
$bild = theme_imagecache('preset_bezeichnung', $path, 'alt-text', 'title-text', $attributes);
   
   
//Wichtung des Body-Bereichs im Content speichern
   
$weight = $node->content['body']['#weight'];
   
   
//Bild in eigenem Bereich anzeigen
    //durch $weight + 5 erscheint das Bild unter dem Body
   
$node->content['bild']['#value'] = "<div id='bild-container'>$bild</div>";
   
$node->content['bild']['#weight'] = $weight + 5;
   
    return
$node;
  }
 
?>

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • Medien und andere Daten mit Feeds von Drupal 7 auf Drupal 10 migrieren
  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
  • Drupal 11 neu aufsetzen und Bereiche aus 10 importieren
  • Wie erlaubt man neuen Benutzern auf die Resetseite zugreifen zu dürfen.
  • [gelöst] Anzeigeformat Text mit Bild in einem Artikel, Drupal 11
  • Social Media Buttons um Insteragram erweitern
  • Nach Installation der neuesten D10-Version kein Zugriff auf Website
  • Composer nach Umzug
  • [gelöst] Taxonomie Begriffe zeigt nicht alle Nodes an
  • Drupal 11 + Experience Builder (Canvas) + Layout Builder
  • Welche KI verwendet ihr?
Weiter

Neue Kommentare

  • Inzwischen sind wir bei
    vor 1 Tag 41 Minuten
  • Migrieren von D7 auf D8/ D10/ D11
    vor 1 Tag 16 Stunden
  • melde mich mal wieder, da ich
    vor 7 Wochen 5 Tagen
  • Hey danke
    vor 7 Wochen 6 Tagen
  • Update: jetzt gibt's ein
    vor 8 Wochen 9 Stunden
  • Hallo, im Prinzip habe ich
    vor 8 Wochen 4 Tagen
  • Da scheint die Terminologie
    vor 8 Wochen 4 Tagen
  • Kannst doch auch alles direkt
    vor 9 Wochen 2 Tagen
  • In der entsprechenden View
    vor 9 Wochen 2 Tagen
  • Dazu müsstest Du vermutlich
    vor 9 Wochen 2 Tagen

Statistik

Beiträge im Forum: 250235
Registrierte User: 20462

Neue User:

  • marouane.blel
  • capilclinic
  • Quabzibboter

» Alle User anzeigen

User nach Punkten sortiert:
wla9461
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 16 Gäste online.

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche

Quicklinks I

  • Infos
  • Drupal Showcase
  • Installation
  • Update
  • Forum
  • Team
  • Verhaltensregeln

Quicklinks II

  • Drupal Jobs
  • FAQ
  • Drupal-Kochbuch
  • Best Practice - Drupal Sites - Guidelines
  • Drupal How To's

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed News
  • RSS Feed Planet
  • Twitter Drupalcenter
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association