Jump to:

22996 Posts in 11620 Topics by 2826 members

General Questions

SilverStripe Forums » General Questions » how to get image object?

General questions about getting started with SilverStripe that don't fit in any of the categories above.

Moderators: martimiz, Sean, biapar, Willr, Ingo, swaiba, simon_w

Page: 1
Go to End
Author Topic: 681 Views
  • dacar
    Avatar
    Community Member
    168 Posts

    how to get image object? Link to this post

    Hi,
    i am trying to get and manipulate an image object (SS3.1) within a function.

    But $image = Image::get()->where("\"Name\" LIKE '%$filename%'"); wii return a DataList and not the image object itself.
    Can anybody give a hint? Here is the complete function:

    public static function imageByFilename(&$obj, $val, $record){
    $filename = strtolower(Convert::raw2sql($val));
    $image = Image::get()->where("LOWER(\"Name\") LIKE '%$filename%'");
    if($filename && $image){
    if($image->exists()){
    echo "IMAGE: ";echo "<pre>".var_dump($image)."</pre>"; die();
    $image->ClassName = self::get_product_class_name().'_Image';
    $image->write();
    return $image;
    }
    }
    return null;
    }

    Greetings from germany, Carsten.

    EDIT:

    I have inserted a foreach loop and now i get the image object. But i still get a server error at $image->write(); in imageByFilename().

    What i want to do is: 1) write the ProduktbildID from my has_one relation to the Produkte.ProduktbildID field and 2.) alter the ClassName in File from Image to Produkte_Image.

    Here is some code from my "class ProdukteCsvBulkLoader extends CsvBulkLoader"

    public $relationCallbacks = array(
        'File.Name' => array(
    'relationname' => 'Image',
    'callback' => 'imageByFilename'
    )
    );

       public static function imageByFilename(&$obj, $val, $record){
          $filename = strtolower(Convert::raw2sql($val));
          $images = Image::get()->where("LOWER(\"Name\") LIKE '%$filename%'");
          
          foreach($images AS $imageout) {
             $image = $imageout;
          }
          
          if($filename && $image){
             if($image->exists()){
                $image->ClassName = self::get_product_class_name().'_Image';
                $image->write();
                return $image;
             }
          }
          return null;
       }

  • dacar
    Avatar
    Community Member
    168 Posts

    Re: how to get image object? Link to this post

    i am about to solve the problem. public $relationCallbacks calls public static function imageByFilename.
    Everything works fine, only the last return will cuase an server error: return $image. $image->write(); works fine, but return $image; fails.

    Here is the complete function:

    public static function imageByFilename(&$obj, $val, $record){
    $filename = strtolower(Convert::raw2sql($val));
    if($filename && $image = DataObject::get_one('Image',"LOWER(\"Name\") LIKE '%$filename%'")){

    if($image->ID){
    $image->ClassName = 'Produkte_Image';
    $image->write();
    return $image;
    }
    }
    return null;
    }

    Can anybody help?

  • dacar
    Avatar
    Community Member
    168 Posts

    Re: how to get image object? Link to this post

    Hi, unfortunately i still get an server error. The relation CallBack for 'Marke' works fine. But what is the secret behind relationCallbacks and Images? The Object is there! Please can anybody help...

    Here is the code i use:

    public $relationCallbacks = array(
    'Marke.Title' => array(
    'relationname' => 'Marke',
    'callback' => 'getMarkeByTitle'
    ),
        'Image.Name' => array(
    'relationname' => 'Produktbild_Image',
    'callback' => 'imageByName'
    )
    );

       public static function imageByName($obj, $val, $record){
             $filename = strtolower(Convert::raw2sql($val));
             
             if($filename && $image = DataObject::get_one('Image',"LOWER(\"Name\") LIKE LOWER('%$filename%')")){
                if($image->ID){
                   $image->ClassName = 'Produktbild_Image';
                   $image->write();
                   $image = DataObject::get_one('Produktbild_Image',"LOWER(\"Name\") LIKE LOWER('%$filename%')");
                   $image = Produktbild_Image::get()->filter('Name', $filename)->First();
                      /* */
                      echo "<pre>";
                      var_dump($image);
                      echo "</pre>";
                      
                   return $image;
                }
             }
             return null;
       }

    The var_dump() returns the following:

    object(Produktbild_Image)#1161 (17) {
    ["destroyed"]=>
    bool(false)
    ["model":protected]=>
    object(DataModel)#1029 (1) {
    ["customDataLists":protected]=>
    array(0) {
    }
    }
    ["record":protected]=>
    array(11) {
    ["ClassName"]=>
    string(17) "Produktbild_Image"
    ["Created"]=>
    string(19) "2013-09-19 16:39:43"
    ["LastEdited"]=>
    string(19) "2013-09-25 11:24:44"
    ["Name"]=>
    string(20) "ACE-08631088-G29.JPG"
    ["Title"]=>
    string(16) "ACE 08631088 G29"
    ["Filename"]=>
    string(41) "assets/Produktbilder/ACE-08631088-G29.JPG"
    ["ShowInSearch"]=>
    string(1) "1"
    ["ParentID"]=>
    string(1) "7"
    ["OwnerID"]=>
    string(1) "1"
    ["ID"]=>
    int(24)
    ["RecordClassName"]=>
    string(17) "Produktbild_Image"
    }
    ["changed":"DataObject":private]=>
    array(0) {
    }
    ["original":protected]=>
    array(11) {
    ["ClassName"]=>
    string(17) "Produktbild_Image"
    ["Created"]=>
    string(19) "2013-09-19 16:39:43"
    ["LastEdited"]=>
    string(19) "2013-09-25 11:24:44"
    ["Name"]=>
    string(20) "ACE-08631088-G29.JPG"
    ["Title"]=>
    string(16) "ACE 08631088 G29"
    ["Filename"]=>
    string(41) "assets/Produktbilder/ACE-08631088-G29.JPG"
    ["ShowInSearch"]=>
    string(1) "1"
    ["ParentID"]=>
    string(1) "7"
    ["OwnerID"]=>
    string(1) "1"
    ["ID"]=>
    int(24)
    ["RecordClassName"]=>
    string(17) "Produktbild_Image"
    }
    ["brokenOnDelete":protected]=>
    bool(false)
    ["brokenOnWrite":protected]=>
    bool(false)
    ["components":protected]=>
    NULL
    ["unsavedRelations":protected]=>
    NULL
    ["sourceQueryParams":protected]=>
    NULL
    ["failover":protected]=>
    NULL
    ["customisedObject":protected]=>
    NULL
    ["objCache":"ViewableData":private]=>
    array(0) {
    }
    ["class"]=>
    string(17) "Produktbild_Image"
    ["extension_instances":protected]=>
    array(3) {
    ["FulltextSearchable"]=>
    object(FulltextSearchable)#1162 (5) {
    ["searchFields":protected]=>
    string(28) ""Filename","Title","Content""
    ["owner":protected]=>
    NULL
    ["ownerBaseClass":protected]=>
    string(4) "File"
    ["ownerRefs":"Extension":private]=>
    int(0)
    ["class"]=>
    string(18) "FulltextSearchable"
    }
    ["SiteTreeFileExtension"]=>
    object(SiteTreeFileExtension)#1163 (4) {
    ["owner":protected]=>
    NULL
    ["ownerBaseClass":protected]=>
    string(4) "File"
    ["ownerRefs":"Extension":private]=>
    int(0)
    ["class"]=>
    string(21) "SiteTreeFileExtension"
    }
    ["Hierarchy"]=>
    object(Hierarchy)#1164 (7) {
    ["markedNodes":protected]=>
    NULL
    ["markingFilter":protected]=>
    NULL
    ["_cache_numChildren":protected]=>
    NULL
    ["owner":protected]=>
    NULL
    ["ownerBaseClass":protected]=>
    string(4) "File"
    ["ownerRefs":"Extension":private]=>
    int(0)
    ["class"]=>
    string(9) "Hierarchy"
    }
    }
    ["beforeExtendCallbacks":protected]=>
    array(0) {
    }
    ["afterExtendCallbacks":protected]=>
    array(0) {
    }
    }

  • dacar
    Avatar
    Community Member
    168 Posts

    Re: how to get image object? Link to this post

    Hi,

    Now i have an errorlog and it says:

    [Error] Uncaught Exception: Object->__call(): the method 'produktbild_image' does not exist on 'Produkte'

    But in Produkte.php the relation is set via:

    static $has_one = array (
    'Marke' => 'Marke',
    'Produktbild'   =>   'Produktbild_Image'
    );

    Can anybody see what is missing?

    •   Object->__call(Produktbild_Image,Array)
    DataObject.php:804
    •   Produkte->Produktbild_Image()
    DataObject.php:804
    •   DataObject->update(Array)
    CsvBulkLoader.php:169
    •   CsvBulkLoader->processRecord(Array,Array,BulkLoader_Result,)
    CsvBulkLoader.php:81
    •   CsvBulkLoader->processAll(/var/tmp/phpcahOoP)
    BulkLoader.php:146
    •   BulkLoader->load(/var/tmp/phpcahOoP)
    ModelAdmin.php:430
    •   ModelAdmin->import(Array,Form,SS_HTTPRequest)
    Form.php:358
    •   Form->httpSubmission(SS_HTTPRequest)
    RequestHandler.php:288
    •   RequestHandler->handleAction(SS_HTTPRequest,httpSubmission)
    RequestHandler.php:200
    •   RequestHandler->handleRequest(SS_HTTPRequest,DataModel)
    RequestHandler.php:222
    •   RequestHandler->handleRequest(SS_HTTPRequest,DataModel)
    Controller.php:153
    •   Controller->handleRequest(SS_HTTPRequest,DataModel)
    LeftAndMain.php:438
    •   LeftAndMain->handleRequest(SS_HTTPRequest,DataModel)
    AdminRootController.php:89
    •   AdminRootController->handleRequest(SS_HTTPRequest,DataModel)
    Director.php:325
    • Director::handleRequest(SS_HTTPRequest,Session,DataModel)
    Director.php:143
    • Director::direct(/admin/produkte/Produkte/ImportForm,DataModel)
    main.php:128
    Details
    $_SERVER['HTTP_ACCEPT'] text/html,text/html,application/xml;q=0.9,/;q=0.8
    $_SERVER['HTTP_ACCEPT_CHARSET']   
    $_SERVER['HTTP_ACCEPT_ENCODING']   gzip, deflate
    $_SERVER['HTTP_ACCEPT_LANGUAGE']   de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
    $_SERVER['HTTP_REFERRER']   
    $_SERVER['HTTP_USER_AGENT']   Mozilla/5.0 (Windows NT 6.1; rv:23.0) Gecko/20100101 Firefox/23.0
    $_SERVER['HTTPS']   
    $_SERVER['REMOTE_ADDR']   85.8.108.115

  • dacar
    Avatar
    Community Member
    168 Posts

    Re: how to get image object? Link to this post

    Hi,

    i have changed the code to the following and everything is written to the database. The Server error has gone.

       public $columnMap = array(
          'Artikelnr. Zusammengefasst'   =>   'Produktbild.Name'
       );

    public $relationCallbacks = array(
        'Produktbild.Name' => array(
    'relationname' => 'Image',
    'callback' => 'imageByName'
    )
    );

       public static function imageByName($obj, $val, $record){
             $filename = strtolower(Convert::raw2sql($val));         
             if($filename && $image = DataObject::get_one('Image',"\"Name\" LIKE '%$filename%'")){
                if($image->ID){
                   $image->ClassName = 'Produktbild_Image';
                   $image->write();
                   return $image;
                }
             }
          return null;
       }

    But now i get an validation error, but the filetype "jpg" is allowed. And the files are .jpg

    Validation error: Validation error writing a Produktbild_Image object: Dateityp ist nicht erlaubt (erlaubt sind: , ace, arc, arj, asf, au, avi, bmp, bz2, cab, cda, css, csv, dmg, doc,
    docx, flv, gif, gpx, gz, hqx, htm, html, ico, jar, jpeg, jpeg, jpg, jpg,
    js, kml, m4a, m4v, mid, midi, mkv, mov, mp3, mp4, mpa, mpeg, mpg, ogg, ogv,
    pages, pcx, pdf, pkg, png, pps, ppt, pptx, ra, ram, rm, rtf, sit, sitx,
    swf, tar, tgz, tif, tiff, txt, wav, webm, wma, wmv, xhtml, xls, xlsx, xml,
    zip, zipx). Object not written.

    Can anybody help?

  • dacar
    Avatar
    Community Member
    168 Posts

    Re: how to get image object? Link to this post

    writing the imageid to the database has been solved. But now i have problems with copying the image files. Ther went something wrong with Filename and Name.

    but there seems to be a problem with copying the files: [Error] Uncaught Exception: Cannot move /home/www/22/42/cwwebde123/art-/assets/new-produktbild-image to /home/www/22/42/cwwebde123/art-/assets/NEW-HAVEN-08578078-G55.jpg - /home/www/22/42/cwwebde123/art-/assets/new-produktbild-image doesn't exist

    /home/www/22/42/cwwebde123/art-/framework/filesystem/File.php:532

    <?php
    class ProdukteCsvBulkLoader extends CsvBulkLoader {
    public $columnMap = array(
    'Marke' => 'Marke.Title',
    'Leisten' => 'Leisten',
    'Artikelnr' => 'Artikelnummer',
    'Artikelname' => 'Artikelname',
    'Saisoncode' => 'Saison',
    'Saionname' => 'Saionname',
    'Geschlechtcode' => 'Geschlecht',
    'Geschlechtname' => 'Geschlechtname',
    'Farbcode' => 'Farbcode',
    'Farbname' => 'Farbname',
    'Artikelnrzusammengefasst' => 'Artikelnummerzusammengefasst',
    'Beschreibungdeutsch' => 'BeschreibungDE',
    'Beschreibungenglisch' => 'BeschreibungEN',
    'Artikelnrzusammengefasst' => 'Produktbild.Name'
    );

    public $duplicateChecks = array(
    'Artikelnr' => 'Artikelnummer'
    );

    public $relationCallbacks = array(
    'Marke.Title' => array(
    'relationname' => 'Marke',
    'callback' => 'getMarkeByTitle'
    ),
    'Produktbild.Name' => array(
    'relationname' => 'Produktbild',
    'callback' => 'imageByName'
    )
    );

    public static function getMarkeByTitle($obj, $val, $record) {
    $marke = Marke::get()->filter('Title', $val)->First();
    return $marke;
    }

    static function imageByName($obj, $val, $record){
    $filename = Convert::raw2sql($val);
    $filename = "assets/Produktbilder/".$val;
    if($filename && $image = DataObject::get_one('Image',"\"Filename\" LIKE '%$filename%'")){
    if($image->ID && $image->ClassName = 'Image'){
    $image->ClassName = 'Produktbild_Image';
    $image->Filename = $filename;
    echo $image->Filename; die();
    return $image;
    }
    }
    return null;
    }

    }
    ?>


    Can anybody help?

    681 Views
Page: 1
Go to Top

Want to know more about the company that brought you SilverStripe? Then check out SilverStripe.com

Comments on this website? Please give feedback.