[HomePage :: Module :: Eigenes Modul mit imBuilding erstellen :: Dieser Seite]  

Der Ideas IPF Handler

Module bauen mit imBuilding - Tutorial - Seite 9

Nächste Seite:Berechtigungen zufügen

Vorige Seite: Das Ideas IPF Object

Auch hier kurz Vorneweg: mod_ideas_IdeasHandler wird wieder bezeichnet durch mod_moduleName_itemnameHandler und erweitert hier dierekt den standard icms_ipf_Handler. Gehen wir also zum Constructor über:

public function __construct(&$db) {
  parent::__construct($db, "ideas", "ideas_id", "title", "dsc", "ideas");
  $this->enableUpload(array("image/gif", "image/jpeg", "image/pjpeg", "image/png"), 512000, 800, 600); }

__construct wird also definiert: ($db, "ideas", "idea_id", "title", "dsc", "ideas"), was, allgemein gesagt, heißt: ($db, "itemname", "item Schlüssel", "item identifier", "item Beschreibung", "Modulename").

Fileupload

Die zweite Zeile wurde durch imBuilding zugefügt, da wir ein Feld für den Bilderupload zugefügt haben und erlaubt es dem Item Bilder hochzuladen. Allerdings ist dies für uns relativ unpraktisch, da wir ja schließlich auch den File-upload erlauben wollen. 

Dennoch vorher kurz zu dieser Version der Funktion enableUpload() : Der array definiert alle erlaubten Dateitypen, 512000 steht für die maximal erlaubte Dateigröße (hier also maximal 0,5mB), 800 für die maximale Breite eines Bildes, 600 für die maximale Höhe eines Bildes.

Wir ersetzen nun diese Zeile durch:

$this->enableUpload($this->checkMimeTypes(), icms::$module->config['upload_size'], icms::$module->config['image_upload_width'], icms::$module->config['image_upload_height']);

icms::$module ruft das aktuelle ModulObject auf in icms/module/Objext.php und dort public $config, welches die Konfiguration des Modules enthält, also die "Einstellungen" unserer Module. Diese wird als array() übergeben und aus diesem array suchen wir uns 'upload_size', 'image_upload_width' und 'image_upload_height' raus. Momentan existieren diese natürlich nicht und würden also für alles FALSE, also null rausgeben und somit wäre kein Upload möglich. Aber sobald wir zur icms_version.php Vorgedrungen sind werden wir das schon gelöst bekommen.

Weiterhin rufen wir, statt dem vorigen array() mit den erlaubten Mimetypes die Funktion des handlers auf "checkMimeTypes()". Diese existiert ebensowenig, jedoch kann man das schnell ändern. Wir fügen direkt unterhalb unseres Constructors die neue Funktion wie folgt ein:

public function checkMimeType() {
  global $icmsModule;
   $mimetypeHandler = icms_getModulehandler('mimetype', 'system');
  $modulename = basename(dirname(dirname(__FILE__)));
  if (empty($this->mediaRealType) && empty($this->allowUnknownTypes)) {
    icms_file_MediaUploadHandler::setErrors(_ER_UP_UNKNOWNFILETYPEREJECTED);
    return FALSE;
  }
  $AllowedMimeTypes = $mimetypeHandler->AllowedModules($this->mediaRealType, $modulename);
   if || (!empty($this->deniedMimeTypes) && in_array($this->mediaRealType, $this->deniedMimeTypes)) || (empty($this->allowedMimeTypes) && !$AllowedMimeTypes)) {     icms_file_MediaUploadHandler::setErrors(sprintf(_ER_UP_MIMETYPENOTALLOWED, $this->mediaType));
     return FALSE;
   }
  return TRUE;
}

Diese Funktion macht nun folgendes:

  • $mimetypeHandler = icms_getModulehandler('mimetype', 'system'); ruft den Mimetype-Handler des System Modules auf
  • In diesem checken wir, ob für unser Modul die übergebenen Dateitypen erlaubt sind
  • Wenn so gibt es true zurück, wenn nicht die Sprachkonstante, welche wir in der datei ideas/language/german/ definieren, indem wir unten eine Zeile zufügen:
define("_ER_UP_MIMETYPENOTALLOWED", "Der Mimetype ist für den Datei Type nicht erlaubt");

Damit hätten wir alle Dateitypen erlaubt, die Das System unserem Modul und der Benutzergruppe des aktuellen Nutzers anerkennt. Einstellen können wir die Dateitypen im ACP-Menu unter system->Media-> Mime Typen. Einfach zu den gewünschten Mime-Typen das Ideas Modul auswählen, die Gruppen, welche berechtigt sind, und man hat flexibel alle Mime Typen bereit. Allerdings muss man auch die für Bilder jetzt erlauben.

Der Array unseres Select-Feldes

Als nächstes rufen wir uns in Erinnerung, dass wir das Select-Feld so definiert haben, dass es im Handler die Funktion "getStatusArray()" aufruft. Also erstellen wir die Funktion jetzt unterhalb der Mime-Type Funktion:

public function getStatusArray() {
  if(!count($this->_getStatusArray)) {
    $this->_getStatusArray["0"] = "0%";
    $this->_getStatusArray["10"] = "10%";
    $this->_getStatusArray["20"] = "20%";
    $this->_getStatusArray["30"] = "30%";
    $this->_getStatusArray["40"] = "40%";
    $this->_getStatusArray["50"] = "50%";
    $this->_getStatusArray["60"] = "80%";
    $this->_getStatusArray["70"] = "70%";
    $this->_getStatusArray["80"] = "80%";
    $this->_getStatusArray["90"] = "90%";
    $this->_getStatusArray["100"] = "100%";
  }
  return $this->_getStatusArray;
}

und fügen direkt unterhalb von class mod_ideas_Ideas extends icms_ipf_Handler { noch folgendes ein: private $_getStatusArray;

Das war's.. schon sollte die Select-Box funktionieren.

Module bauen mit imBuilding - Tutorial - Seite 9

Nächste Seite:Berechtigungen zufügen

Vorige Seite: Das Ideas IPF Object

Diese Seite wurde 3 Mal geändert
Aktualisierung 07.01.2013 von sato-san
Diese Seite wurde erstellt am 01.08.2012 von QM-B
Diese Seite wurde 549 Mal angesehen

Kommentar
Die hier veröffentlichten Artikel und Kommentare stehen uneingeschränkt im alleinigen Verantwortungsbereich des jeweiligen Autors.