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

Need help to show dataobject on page


Reply


27 Posts   2916 Views

Avatar
Webdoc

Community Member, 334 Posts

14 September 2010 at 4:27am

In cms i make page using pagetype nimekri then i can add objekt's under it but in frontend i see only the listing i also need the full detail page mysite.com/nimekiri/someobjekt/

that is the problem.

is there any way to do that or what i need to change in my code to allow that.

Avatar
Martijn

Community Member, 271 Posts

14 September 2010 at 5:15am

Well thats exactly what's this page is all about:

http://www.ssbits.com/using-silverstripe-url-parameters-to-display-dataobjects-on-a-page

Especially from Part 3..

Example for Nimekri.php . I did not test is, but something like this should work.

<?php

class Nimekri extends Page{
   
   // .....
   
   static $has_many = array (
      'Objektid' => 'Objekt'
   );
   
   // .....
}

class Nimekri_Controller extends Page_Controller{
   
   static $allowed_actions = array(
      'show'
   );
   
   function init(){
      parent::init();   
   }
   
   
   /**
    * In template
    * <% if show %>
    * <% control show %>
    * $Objektinimi
    * $Kirjeldus
    * <% end_control %>
    * <% end_if %>
    *
    */
   function show($request){
      if($request->param('ID')){
         $obj = DataObject::get_by_id('Objekt', (int)$request->param('ID'));
         return $this->customise($obj)->renderWith(array('Nimekri'));
      }
   }
}

class Objekt extends DataObject{
   
   // .....
   
   
   // Use this to link to a single Objekt
   function Link(){
      return $this->Nimekiri()->Link() .'show/'.$this->ID;   
   }
   
   
   // .....   
}

Avatar
Webdoc

Community Member, 334 Posts

14 September 2010 at 5:31am

Strange but i dont get it work
used code:
nimekiri.php

<?php
class Nimekiri extends Page
{
static $has_many = array (
'Objektid' => 'Objekt'
);
static $allowed_actions = array(
'show'
);

public function getCMSFields()
{
$f = parent::getCMSFields();
   $f->removeFieldFromTab("Root.Content.Main","Content");
$manager = new DataObjectManager(
$this,
'Objektid',
'Objekt',
array('Objektinimi' => 'Objekti nimi', 'Kirjeldus' => 'Objekti kirjeldus'),
'getCMSFields_forPopup'
);
$f->addFieldToTab('Root.Content.Main', $manager);
return $f;
}

}

class Nimekiri_Controller extends Page_Controller {

function init(){
parent::init();
}
   function show($request){
    if($request->param('ID')){
$obj = DataObject::get_by_id('Objekt', (int)$request->param('ID'));
return $this->customise($obj)->renderWith(array('Nimekri'));
}
}
}
?>


objekt.php:

<?php
class Objekt extends DataObject
{
   static $db = array (
   'Objektinimi' => 'Text',
   'Kirjeldus' => 'HTMLText',
   'Hind' => 'Text',
   'Elamutyyp' => "Enum('Korter, Maja, Aripind, Suvila, Ridaelamu, Paarismaja, Maatykk')",
   'Soojaveetyyp' => "Enum('Keskkyte, Elekter')",
   'Kyttetyyp' => "Enum('Keskkyte, Elekter, Puukyte')",
   'Tubadearv' => "Enum('1, 2, 3, 4,5,rohkem')",
'Krundisuurus' => 'Text',
   'Yldpind' => 'Text',
   'Korrus' => 'Text',
   'Vannitube' => 'Text',
   'Tualette' => 'Text',
   'Aadress' => 'Text',
   'Linn' => 'Text',
   'Vald' => 'Text',
   'Maakond' => 'Text'
   );
   static $has_one = array (
   'Nimekiri' => 'Nimekiri',
   'Photo' => 'Image'
   );
   static $has_many = array (
   'GalleryImages' => 'GalleryImage'
   );
   static $searchable_fields = array(
      'Elamutyyp' => 'ExactMatchFilter',
      'Yldpind' => 'ExactMatchFilter',
      'Linn' => 'ExactMatchFilter',
      'Tubadearv' => 'ExactMatchFilter'
   );
   public function getCMSFields_forPopup()
   {
   return new FieldSet(
      new TextField('Objektinimi'),
      new SimpleWysiwygField('Kirjeldus'),
      new DropdownField(
      'Elamutyyp',
      'Elamutyyp',
      singleton('Objekt')->dbObject('Elamutyyp')->enumValues()),
      new DropdownField(
      'Soojaveetyyp',
      'Soojaveetyyp',
      singleton('Objekt')->dbObject('Soojaveetyyp')->enumValues()),
      new DropdownField(
      'Kyttetyyp',
      'Kyttetyyp',
      singleton('Objekt')->dbObject('Kyttetyyp')->enumValues()),
      new TextField('Hind'),
   new TextField('Krundisuurus'),
   new TextField('Yldpind'),
         new DropdownField(
      'Tubadearv',
      'Tubadearv',
      singleton('Objekt')->dbObject('Tubadearv')->enumValues()),
   new TextField('Korrus'),
   new TextField('Vannitube'),
   new TextField('Tualette'),
      new ImageField('Photo'),
      new TextField('Aadress'),
   new TextField('Linn'),
   new TextField('Vald'),
   new TextField('Maakond'),
   new ImageDataObjectManager(
      $this,
      'GalleryImages', // Source name
   'GalleryImage', // Source class
   'MyGalleryImage', // File name on DataObject
      array('Pildinimi' => 'Pildinimi'))
      );
      }
      public function getCustomSearchContext() {
         $fields = $this->scaffoldSearchFields(array('Elamutyyp','Yldpind','Linn','Tubadearv')
         );
         $filters = array(
            'Elamutyyp' => new ExactMatchFilter('Elamutyyp'),
            'Yldpind' => new ExactMatchFilter('Yldpind'),
            'Linn' => new ExactMatchFilter('Linn'),
            'Tubadearv' => new ExactMatchFilter('Tubadearv')
         );
         return new SearchContext(
         $this->class,
         $fields,
         $filters
         );
      }
      function Link(){
         return $this->Nimekiri()->Link() .'show/'.$this->ID;
      }
      
}
?>


and nimekiri.ss:

<div class="typography">
<h2>$Title</h2>
<% if show %>
<% control show %>
<div class="pilt">
<table width="300" border="0">
<tr>
         <td><h4>$Objektinimi</h4></td>
</tr>
<tr>
<td valign="top"><table width="300" height="130" border="0">
<tr>
<td width="130" align="left" valign="top"><a href="{$Top.URLSegment}/{$ID}" title="$Objektinimi">$Photo.SetWidth(120)</a></td>
<td align="left" valign="top">
<% if Hind %><span style="font-size:11px;"><% _t("MYYGIHIND","M&uuml;&uuml;gihind") %>:<strong>$Hind</strong></span><br /><% end_if %>
<% if Yldpind %><span style="font-size:11px;"><% _t("YLDPIND","&Uuml;ldpind") %>: <strong>$Yldpind</strong></span><br /><% end_if %>
<% if Krundisuurus %><span style="font-size:11px;"><% _t("KRUNT","Krundi suurus") %>: <strong>$Krundisuurus</strong></span><br /><% end_if %>
<p style="font-size:11px;"><br /><a href="$link" title="$Objektinimi"><% _t("INFO","Detailne info") %></a></p></td>
</tr>
</table></td>
</tr>
</table>
</div>
<% end_control %>
<% end_if %>
$Content
$PageComments
$Form
<div class="clear"><!-- --></div>
</div>
<div style="margin-bottom:20px;"></div>

Avatar
UncleCheese

Forum Moderator, 4096 Posts

14 September 2010 at 6:05am

What does that mean? "Can't get it to work"?

You need to describe the problem you're having in order for us to help you.

--------------------
SilverStripe tips, tutorials, screencasts and more: http://www.leftandmain.com

Avatar
Martijn

Community Member, 271 Posts

14 September 2010 at 6:06am

static $allowed_actions = array(
'show'
);

needs to be in your controller

Avatar
Webdoc

Community Member, 334 Posts

14 September 2010 at 6:09am

but it on nimekiri.php in controler fisrt before function init(){
parent::init();
}
but then it doesnt show anything in mysite/nimekiri/

Avatar
Martijn

Community Member, 271 Posts

14 September 2010 at 6:16am

If you want to display the object, you need to access it with www.yoursite.com/nimekiripageurl/show/23 (ObjektID)

I really advise you to play with the tutorial on SSBits. Easier then that you probably won't get..

http://www.ssbits.com/using-silverstripe-url-parameters-to-display-dataobjects-on-a-page

There is a download with the complete files you can use as an example:

http://www.ssbits.com/assets/Uploads/AttachedFiles/AttachedFiles/CompletedfilesURLParams.zip

Avatar
Webdoc

Community Member, 334 Posts

14 September 2010 at 6:18am

Edited: 14/09/2010 7:10am

nothing i gonna show up not in main page and also not in objekt place to i need to make some new template under layout like objekt.ss