SilverStripe - 显示特定于一个页面的数据对象

时间:2011-10-14 14:17:10

标签: php content-management-system silverstripe

我是SilverStripe的新手,所以如果这看起来很简单,请原谅我。我已经搜索了论坛并阅读了文档,但看不到我在追求的内容。

我正在使用dataobjectmanager将幻灯片显示图像添加到页面。如果我创建一个带有幻灯片显示图像的页面,然后从同一页面类型创建一个新页面,则幻灯片显示图像已经填充了第一页中的图像。我猜他们被列为全球资产?

有没有办法使用dataobjectmanager将对象添加到一个页面?

这是我的幻灯片/数据对象代码......

<?php
class Slide extends DataObject {
/**
*
* DB fields
* @var unknown_type
*/
static $db = array (
'Title' => 'Varchar(255)',
'Text' => 'Text',
   'Link' => 'Text'
);

/**
*
* Relations
* @var array
*/
static $has_one = array (
'HomePage' => 'HomePage',
'Image' => 'Image'
);

/**
*
* /Fields to show in the DOM table
* @var array
*/
static $summary_fields = array(
'Thumb' => 'Image',
'Title' => 'Title',
'Text' => 'Text',
   'Page link' => 'Link'
);

/**
* (non-PHPdoc)
* @see httpdocs/sapphire/core/model/DataObject::getCMSFields()
*/
public function getCMSFields()
{
return new FieldSet(
new TextField('Title'),
new TextField('Text'),
new TextField('Link'),
new ImageField('Image', 'Image', null, null, null, 'slides')
);
}

/**
*
* Generate our thumbnail for the DOM
*/
public function getThumb()
{   
if($this->ImageID)
return $this->Image()->CMSThumbnail();
else
return '(No Image)';
}

}

这是我的网页代码

<?php
class AwardsHolder extends Page {
       static $db = array(

   );
   static $has_many = array(
      'Slides' => 'Slide',
      'Spotlights' => 'Spotlight'
   );

   static $allowed_children = array('ArticlePage');

   public function getCMSFields() {
      $fields = parent::getCMSFields();

      $manager = new DataObjectManager(
$this,
'Slides',
'Slide'
);
$fields->addFieldToTab("Root.Content.Slideshow", $manager);

$manager = new DataObjectManager(
$this,
'Spotlights',
'Spotlight'
);
$fields->addFieldToTab("Root.Content.Spotlights", $manager);

$fields->removeFieldFromTab("Root.Content.Main", 'Content');
      return $fields;
   }
}

class AwardsHolder_Controller extends Page_Controller {


}

1 个答案:

答案 0 :(得分:2)

在您的关系中,您已指定Slide has_one HomePage,但它应为AwardsHolder。我首先要先看一下。