2015-12-19 18 views
5

Tôi đã tạo một loại trang mới cần thứ gì đó để chia nhỏ nội dung. Tôi đã tạo ra một khối strapline mà tôi muốn sử dụng ở 3 nơi trên trang, tuy nhiên tôi muốn tạo ra chỉ có 1 phiên bản của khối strapline và ổ đĩa nội dung đó bằng dữ liệu động.Silverstripe 3.2 khối có thể tái sử dụng

Tôi có sau trong Straplines.php

class Straplines extends DataObject{ 
    private static $db = array(
     'Title'=>'Text', 
     'Content'=>'HTMLText', 
     'SortOrder'=>'Int' 
    ); 
    private static $has_one = array(
     'Parent'=>'Page' 
    ); 

    private static $default_sort = 'SortOrder'; 

    public function getCMSFields(){ 
      $fields = parent::getCMSFields(); 
      $fields->addFieldToTab("Root.Main", new HtmlEditorField('Content','Content')); 
      $fields->addFieldToTab("Root.Main", new TextField('Title','Title')); 
      return $fields; 
    } 
} 

Sau đó tôi thêm các trường cms để HomePage.php. Tôi có thể thêm dây giày không có vấn đề ở đó và tất cả chúng đều xuất hiện. Sau đó, trong HomePage.ss tôi có những điều sau

<% include PricesBlock %> 
<% include TourStraplineBlock %> 
<% include QuickFacts %> 
<% include TourStraplineBlock %> 

Nhưng sau đó tôi không thể tìm ra đời vào TourStraplineBlock để có được nội dung riêng biệt cho mỗi trong số này. Chắc chắn phải có để tham số hóa bao gồm hoặc không phải tạo nhiều mẫu. Tôi khá mới với Silverstripe dev và tôi đang tìm một quy trình khó khăn để tạo nội dung có thể sử dụng lại.

Chỉnh sửa: Đây là mẫu strapline.ss xử lý việc hiển thị.

<div class="strapline"> 
     <% loop Straplines %> 
      $Content   
     <% end_loop%> 
</div> 

Như bạn có thể đoán, nếu tôi đặt điều này thành hai lần, nó chỉ đơn giản là hiển thị tất cả các đường dây. Tôi muốn làm một cái gì đó như

<% include Strapline?id=1 %> 

Sau đó giải mã trong Strapline.ss và đi từ đó.

Chỉnh sửa xin lỗi có 3.2 không phải 3.0. Tôi cho rằng chúng khá giống nhau.

+0

'riêng tĩnh $ db' chắc chắn không giống như Silverstripe 3.0, giống như 3.1 hoặc 3.2. Bạn đang sử dụng phiên bản SS nào? Và bạn có thể hiển thị thêm mã HomePage.php và mẫu bao gồm bạn muốn sửa đổi không? – wmk

+0

Thực hiện một số chỉnh sửa theo yêu cầu @wmk –

Trả lời

5

Giống như Firesphere nêu bạn chỉ có thể tạo ra một chức năng mà bạn có thể gọi trong mẫu của bạn và vượt qua các đối tượng ID với nó.

Đặt hàm này trong lớp Page_Controller của bạn hoặc nếu bạn chỉ muốn truy cập nó từ trang chủ, hơn là đặt nó trong lớp HomePage_Controller của bạn.

public function StraplineByID($id) { 
    $strapline = Straplines::get()->byID($id); 
    if($strapline) { 
    return $strapline; 
    } 
} 

Trong mẫu của bạn bây giờ bạn có thể sử dụng:

<% if $StraplineByID(1) %> 
    <% with $StraplineByID(1) %> 
    $Title, $Content, $WhatEver or an include 
    <% else %> 
    Can't find a strapline with this ID 
    <% end_with %> 
<% end_if %> 

Nếu bạn muốn xác định straplines không phải bởi id nhưng theo tên (điều này sẽ được nhiều người sử dụng thân thiện), bạn nên tạo một lĩnh vực mới được gọi là "Tên" hoặc một cái gì đó tương tự và sử dụng tên này thay cho id.Nhưng lưu ý các giá trị trong trường Name phải là duy nhất

public function StraplineByName($name) { 
    $strapline = Straplines::get()->find('Name', $name); 
    if($strapline) { 
    return $strapline; 
    } 
} 

và trong mẫu của bạn

<% if $StraplineByName(prices) %> 
    <% with $StraplineByName(prices) %> 
    $Title, $Content, $WhatEver or an Include 
    <% else %> 
    Can't find a strapline with this Name 
    <% end_with %> 
<% end_if %> 

Mã này là chưa được kiểm tra nhưng nó phải làm việc;)

+0

Cảm ơn, thats sẽ làm việc tốt cho tôi. –

4

Bạn có thể tạo một hàm trong trang, lấy đối số dưới dạng chữ và trả về đường dây được mong muốn. ví dụ.

<% $currentStrapline(1) %> 

và một chức năng trong trang,

public function currentStrapline($id) { 
// returns the wished strapline or null; 
} 
+0

Cảm ơn câu trả lời của bạn. Tôi đã đi với người khác bởi vì tôi có thể làm theo chính xác những gì đã xảy ra tốt hơn một chút, và tôi rất mới để bạc. –

0

Có có một cách để parametrise bao gồm, và bạn hầu như đã có nó:

<% include Strapline MyVar=$someVar, MyVar2=$someVar2 %> 

Sau đó, trong Strapline.ss:

<% if $MyVar == 1 %> 
Say One 
<% else_if $MyVar2 == 2 %> 
Say Two 
<% end_if %> 
Các vấn đề liên quan