シルバーストライプのページに複数の画像を添付しようとしています(最終的には回転ギャラリーとして機能します)。ユーザーが各画像をアップロードするときに、これらの各画像へのリンクを追加できるかどうか疑問に思っていました。
質問する
1972 次
1 に答える
13
はい。これは、画像とリンクオブジェクトを含むhas_many
カスタムとの関係を持つことで実現できます。DataObject
次の例では、との関係をHomePage
持つがあります。とが含まれています。has_many
Slide
Slide
Image
Link
このトピックに関するいくつかの良い情報がSilverStripeレッスン9-データ関係の操作-$has_manyにあります。
この例で使用するオプションの並べ替えモジュールは、SortableGridFieldです。
SilverStripe 3.1
Slide.php
class Slide extends DataObject {
private static $db = array(
'Title' => 'Text',
'SortOrder' => 'Int'
);
private static $has_one = array(
'HomePage' => 'HomePage',
'Image' => 'Image',
'Link' => 'SiteTree'
);
private static $field_labels = array(
'Image.CMSThumbnail' => 'Image',
'Link.Title' => 'Link'
);
private static $summary_fields = array(
'Title',
'Image.CMSThumbnail',
'Link.Title'
);
private static $default_sort = 'SortOrder ASC';
private static $singular_name = 'Slide';
private static $plural_name = 'Slides';
public function getCMSFields() {
$image = UploadField::create('Image', 'Image');
$image->setFolderName('slides');
$fields = FieldList::create(
TextField::create('Title'),
$image,
TreeDropdownField::create('LinkID', 'Link', 'SiteTree')
);
return $fields;
}
}
HomePage.php
class HomePage extends Page {
private static $has_many = array(
'Slides' => 'Slide'
);
public function getCMSFields() {
$fields = parent::getCMSFields();
$slidesFieldConfig = GridFieldConfig_RecordEditor::create();
// The following requires the SortableGridField module installed
$slidesFieldConfig->addComponent(new GridFieldSortableRows('SortOrder'));
$slidesField = GridField::create(
'Slides',
'Slide',
$this->Slides(),
$slidesFieldConfig
);
$fields->addFieldToTab('Root.Slides', $slidesField);
return $fields;
}
}
Layout / HomePage.ss
<% if $Slides %>
<div class="slideshow">
<% loop $Slides %>
<% if $Link %>
<a class="slide" href="$Link.URL" title="Go to the $Link.Title.XML page">
<img src="$Image.URL" alt="$Title" />
</a>
<% else %>
<div class="slide">
<img src="$Image.URL" alt="$Title" />
</div>
<% end_if %>
<% end_loop %>
</div>
<% end_if %>
SilverStripe 2.4
DataObjectManagerおよびUploadifyモジュールの使用:
Slide.php
class Slide extends DataObject {
static $db = array(
'Title' => 'Text'
);
static $has_one = array(
'HomePage' => 'HomePage',
'SlideImage' => 'Image',
'Link' => 'SiteTree'
);
static $singular_name = 'Slide';
static $plural_name = 'Slides';
public function getCMSFields_forPopup()
{
return new FieldSet(
new TextField('Title'),
new SimpleTreeDropdownField('LinkID', 'Slide Link', 'SiteTree'),
new ImageUploadField('SlideImage', 'Slide Image')
);
}
}
HomePage.php
class HomePage extends Page {
public static $has_many = array(
'Slides' => 'Slide'
);
public function getCMSFields()
{
$fields = parent::getCMSFields();
$slideManager = new ImageDataObjectManager(
$this,
'Slides',
'Slide',
'Image',
array(
),
'getCMSFields_forPopup'
);
$fields->addFieldToTab('Root.Content.Slides', $slideManager);
return $fields;
}
}
Layout / HomePage.ss
<% if Slides %>
<div class="slideshow">
<% control Slides %>
<% if Link %>
<a class="slide" href="$Link.URL" title="Go to the $Link.Title.XML page">
<img src="$Image.URL" alt="$Title" />
</a>
<% else %>
<div class="slide">
<img src="$Image.URL" alt="$Title" />
</div>
<% end_if %>
<% end_control %>
</div>
<% end_if %>
于 2013-01-21T05:03:18.650 に答える