Skip to main content

This site requires you to update your browser. Your browsing experience maybe affected by not having the most up to date version.

DataObjectManager Module

Discuss the DataObjectManager module, and the related ImageGallery module.

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

[SOLVED ] dataobjectmanager in ecommerce


Reply

6 Posts   2337 Views

Avatar
zenmonkey

23 July 2009 at 8:14am (Last edited: 28 July 2009 2:22am), Community Member, 528 Posts

I'm trying to add multiple images to Product Pages

I'm having trouble, whenever I try to access the images from in the CMS or in the site I get :

Website Error
There has been an error

The website server has not been able to respond to your request.

Here is my code from the ProdImage.php

class ProdImage extends DataObject
{
   static $db = array (
      'Name' => 'Text',
      'Description' => 'Text',
      'Category' => "Enum('Product, Lifestyle')"
   );
   
   static $has_one = array (
      'Attachment' => 'File'
   );
   
   public function getCMSFields_forPopup()
   {
      return new FieldSet(
         new TextField('Name'),
         new TextareaField('Description'),
         new DropdownField('Category','Category', singleton('ProdImage')->dbObject('Category')->enumValues()),
         new FileIFrameField('Attachment')
      );
   }
}

and from my product.php

static $has_many = array (
      'ProdImage' => 'ProdImage'
   );

...

$manager = new ImageDataObjectManager(
         $this, // Controller
         'ProdImage', // Source name
         'ProdImage', // Source class
         'Attachment', // File name on DataObject
         array(
            'Name' => 'Name',
            'Description' => 'Description',
            'Category' => 'Category'
         ), // Headings
         'getCMSFields_forPopup' // Detail fields (function name or FieldSet object)
         // Filter clause
         // Sort clause
         // Join clause
      );
      
      $manager->setFilter(
         'Category', // Name of field to filter
         singleton('ProdImage')->dbObject('Category')->enumValues() // Map for filter (could be $dataObject->toDropdownMap(), e.g.)
      );
      
      // If undefined, all types are allowed. Pass with or without a leading "."   
      
      // Label for the upload button in the popup
      $manager->setBrowseButtonText("Upload (PNG or JPG only)");
      
      // In grid view, what field will appear underneath the icon. If left out, it defaults to the file title.
      $manager->setGridLabelField('Name');
      
      // Plural form of the objects being managed. Used on the "Add" button.
      // If left out, this defaults to [MyObjectName]s
      $manager->setPluralTitle('ProdImage');
            
      $fields->addFieldToTab("Root.Content.ProdImage", $manager);
      

      return $fields;

I'm assuming its something simple I'm just not seeing

Thanks in Advance

Avatar
UncleCheese

23 July 2009 at 8:37am 4085 Posts

Make sure your environment is in dev mode and you have your PHP error reporting cranked up. If you can produce a verbose error I can try to troubleshoot it for you, but "there has been an error" is not enough to go on.

Avatar
zenmonkey

23 July 2009 at 8:49am Community Member, 528 Posts

Ok here is what I get:

User Error] Couldn't run query: SELECT `ProdImage`.*, `ProdImage`.ID, if(`ProdImage`.ClassName,`ProdImage`.ClassName,'ProdImage') AS RecordClassName FROM `ProdImage` WHERE (ParentID = '11') Unknown column 'ParentID' in 'where clause'
GET /silverstripe/new-product/?flush=1

Line 400 in /Applications/MAMP/htdocs/SilverStripe/sapphire/core/model/MySQLDatabase.php

Source

391    }
392    
393    function databaseError($msg, $errorLevel = E_USER_ERROR) {
394       // try to extract and format query
395       if(preg_match('/Couldn\'t run query: ([^\|]*)\|\s*(.*)/', $msg, $matches)) {
396          $formatter = new SQLFormatter();
397          $msg = "Couldn't run query: \n" . $formatter->formatPlain($matches[1]) . "\n\n" . $matches[2];
398       }
399       
400       user_error($msg, $errorLevel);
401    }
402 }
403
404 /**
405 * A result-set from a MySQL database.
406 * @package sapphire
Trace

Couldn't run query: SELECT `ProdImage`.*, `ProdImage`.ID, if(`ProdImage`.ClassName,`ProdImage`.ClassName,'ProdImage') AS RecordClassName FROM `ProdImage` WHERE (ParentID = '11') Unknown column 'ParentID' in 'where clause'
Line 400 of MySQLDatabase.php
MySQLDatabase->databaseError(Couldn't run query: SELECT `ProdImage`.*, `ProdImage`.ID, if(`ProdImage`.ClassName,`ProdImage`.ClassName,'ProdImage') AS RecordClassName FROM `ProdImage` WHERE (ParentID = '11') | Unknown column 'ParentID' in 'where clause',256)
Line 102 of MySQLDatabase.php
MySQLDatabase->query(SELECT `ProdImage`.*, `ProdImage`.ID, if(`ProdImage`.ClassName,`ProdImage`.ClassName,'ProdImage') AS RecordClassName FROM `ProdImage` WHERE (ParentID = '11'),256)
Line 120 of DB.php
DB::query(SELECT `ProdImage`.*, `ProdImage`.ID, if(`ProdImage`.ClassName,`ProdImage`.ClassName,'ProdImage') AS RecordClassName FROM `ProdImage` WHERE (ParentID = '11'))
Line 426 of SQLQuery.php
SQLQuery->execute()
Line 1093 of DataObject.php
DataObject->getComponents(ProdImage)
call_user_func_array(Array,Array)
Line 504 of Object.php
Object->__call(prodimage,Array)
Product->prodimage()
call_user_func_array(Array,Array)
Line 489 of Object.php
Object->__call(ProdImage,Array)
Product_Controller->ProdImage()
call_user_func_array(Array,Array)
Line 318 of ViewableData.php
ViewableData->obj(ProdImage)
Line 579 of .cache.Applications.MAMP.htdocs.SilverStripe.ecommerce.templates.Layout.Product.ss
include(/private/var/folders/aB/aByz7rP2HuGx5L2XUu8FWU+++TI/-Tmp-/silverstripe-cache-Applications-MAMP-htdocs-silverstripe/.cache.Applications.MAMP.htdocs.SilverStripe.ecommerce.templates.Layout.Product.ss)
Line 354 of SSViewer.php
SSViewer->process(Product_Controller)
Line 346 of SSViewer.php
SSViewer->process(Product_Controller)
Line 175 of Controller.php
Controller->handleAction(HTTPRequest)
Line 129 of RequestHandler.php
RequestHandler->handleRequest(HTTPRequest)
Line 122 of Controller.php
Controller->handleRequest(HTTPRequest)
Line 29 of ModelAsController.php
ModelAsController->handleRequest(HTTPRequest)
Line 277 of Director.php
Director::handleRequest(HTTPRequest,Session)
Line 121 of Director.php
Director::direct(/new-product/)
Line 118 of main.php

Avatar
UncleCheese

23 July 2009 at 9:27am 4085 Posts

You haven't set up your model properly.

static $has_one = array (
'Product' => 'Product',
'Attachment' => 'File'
);

Avatar
zenmonkey

24 July 2009 at 1:34am Community Member, 528 Posts

Thanks that fixed it, I knew it was something stupid.

Now I can't call the Image from the template. I can call the Name, Description and Category but not Attached File. I tried structuring like the example and no output. Does the template call for the ImageDataObjectManager work differently than the File?

Avatar
UncleCheese

24 July 2009 at 2:29am 4085 Posts

Please post your template code.