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.

We've moved the forum!

Please use forum.silverstripe.org for any new questions (announcement).
The forum archive will stick around, but will be read only.

You can also use our Slack channel or StackOverflow to ask for help.
Check out our community overview for more options to contribute.

DataObjectManager Module /

Discuss the DataObjectManager module, and the related ImageGallery module.

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

Need help to show dataobject on page


Go to End


27 Posts   4505 Views

Avatar
Webdoc

Community Member, 349 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, 349 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, 4102 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, 349 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, 349 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