2017-08-23 5 views
1

私のホームページテンプレートでif/else_if文を使用して、2つのフィールドのいずれに値があるかを確認しようとしています。どのフィールドに値があるかに応じて、前記変数の値を使用してリンクが設定されます。SilverStripe 3.6.1 - if/else_if文でテンプレートの正しいフィールドが設定されていない

しかし、そのままでは、私が持っているセットアップは動作しません。私はImageExternalLinkフィールドが入っている項目を持っていますが、ステートメントは内部リンクだと思っているようです。

以下を参照してください。このステートメントは、常にリンクを内部リンクとして設定します。それはelse_ifが実行されていないのとほぼ同じですが、私はなぜそれが分かりませんか?あたかもドキュメンテーションに基づいてセットアップを正しく行っているかのように感じます。参考のため

div class="halfColumn"> 
    <% if $ImageLinkInternalURL.Link %> 
    <a href="$ImageLinkInternalURL.Link"> 
     <p>Internal Link</p> 
    </a> 
    <% else_if $ImageExternalLink %> 
     <a href="$ImageExternalLink"> 
      <p>External Link</p> 
     </a> 
    <% else %> 
     <img class="dropShadow" src="$Image.URL" style="max-height: 220px;"> 
    <% end_if %> 
</div> 

は、ここImageLinkInternalURLとImageExternalLinkフィールドが作成されている参照用のHomePageCallout.phpファイル、次のとおりです。

<?php 

class HomePageCallout extends DataObject { 

    private static $db = array(
     'SortOrder'  => 'Int', 
     'ButtonText' => 'varchar', 
     'Header'  => 'varchar', 
     'ImageExternalLink' => 'varchar', 
     'Description' => 'HTMLText' 
    ); 

    static $default_sort = "SortOrder ASC"; 

    // One-to-one relationship with gallery page 
    private static $has_one = array(
     'Image' => 'Image', 
     'Page' => 'Page', 
     'ImageLinkInternalURL' => 'SiteTree', 
    ); 

    // tidy up the CMS by not showing these fields 
    public function getCMSFields() { 
     $fields = parent::getCMSFields(); 
     $fields->removeFieldFromTab("Root.Main","PageID"); 
     $fields->removeFieldFromTab("Root.Main","SortOrder"); 

     $fields->addFieldToTab("Root.Main", new NumericField("SortOrder")); 
     $fields->addFieldToTab("Root.Main", new TextField("ImageExternalLink"), "SortOrder"); 

     return $fields; 
    } 

    // Tell the datagrid what fields to show in the table 
    public static $summary_fields = array(
     'ID' => 'ID', 
     'Header' => 'Header', 
     'Thumbnail' => 'Thumbnail', 
    ); 

    // this function creates the thumnail for the summary fields to use 
    public function getThumbnail() { 
     return $this->Image()->CMSThumbnail(); 
    } 

    public function canEdit($member = NULL) { 
     return true; 
    } 

    public function canDelete($member = NULL) { 
     return true; 
    } 

    public function canCreate($member = NULL){ 
     return true; 
    } 

    public function canPublish(){ 
     return true; 
    } 

    public function canView($member = NULL){ 
     return true; 
    } 
} 

答えて

2

$ImageLinkInternalURL.Linkあなたは$のimageLinkInternalURLを持っているときは、常にいくつかの文字列を返します。 has_oneに関連するサイトツリーオブジェクト。

解決策の1つは、現在のオブジェクトに$ImageLinkInternalURLオブジェクトが関連付けられているかどうかを確認することです。そのオブジェクトのIDは、$ImageLinkInternalURLIDです。

<div class="halfColumn"> 
    <% if $ImageLinkInternalURLID %> 
    <%-- we have a has_one, use this --%> 
    <a href="$ImageLinkInternalURL.Link"> 
     <p>Internal Link</p> 
    </a> 
    <% else_if $ImageExternalLink %> 
     <%-- we have an external link defined --%> 
     <a href="$ImageExternalLink"> 
      <p>External Link</p> 
     </a> 
    <% else %> 
     <%-- fallback --%> 
     <img class="dropShadow" src="$Image.URL" style="max-height: 220px;"> 
    <% end_if %> 
</div> 
関連する問題