0

次の問題があります。メニューに表示されるいくつかのリンク(「ポートフォリオ」の子)は、カスタムコントローラーへのリンクです。もちろん、現在、LinkingModeはそのリンクでは使用できません。それはメニューの画像です:

ここに画像の説明を入力してください

したがって、Portfolioの子(Webサイト、アプリケーションなど)は、実際には、SiteTree表現を持たないCategory-DataObjectsです。ポートフォリオのサブメニューは、データベースで見つかったすべてのカテゴリをチェックしてループすることで作成されます。

メニューの作成は次のようになります。

<ul>
    <% loop Menu(1) %>
    <li class="$LinkingMode">
        <a href="$Link">[$LinkingMode] $MenuTitle.XML</a>             
        <% if Children %>
        <ul class="secondary">         
            <% if ClassName == 'ProjectsPage' %>
                <% loop $Top.Categories %> <!-- loop all found categories, every found item links to the custom category controller -->
                    <li class="$LinkingMode"><a href="category/show/$Slug">$Name</a></li>
                <% end_loop %>
            <% else %>    
                <% loop Children %>
                    <li class="$LinkingMode"><a href="$Link"><span class="text">$MenuTitle.XML</span></a></li>
                <% end_loop %> 
            <% end_if %>
        </ul>
        <% end_if %>                
    </li>
    <% end_loop %>
</ul>

メニュー内のすべてのカテゴリ(Webサイト、モバイル)は、基本的に次のように見えるカスタムコントローラーにリンクしています。

class Category_Controller extends Page_Controller {
    public function show($arguments) {
        return $this; //there will be more code to display all projects of a category
    }
}

ポートフォリオページにどのリンクモードがあるかを通知するCategory_Controllerのカスタムコードを追加する必要があると思います...

多くのthx、フロリアン

4

1 に答える 1

2

ここで良いヒントを見つけました:

http://www.ssbits.com/snippets/2009/extending-linkingmode-to-handle-controller-actions/

http://www.ssbits.com/tutorials/2010/dataobjects-as-pages-part-1-keeping-it-simple/

それはCategory_Controller.phpです(パブリック変数CategoryIDがそこに設定されています):

class Category_Controller extends Page_Controller {
public $CategoryID;

public function index($arguments) {
    $slug = $arguments->param("Slug");
    $category = Category::get()->filter(array('Slug' => $slug))->First();
    $this->CategoryID = $category->ID;
}
}

DataObjectカテゴリ(LinkingMode関数は、コントローラに設定されている現在のCategoryIDがCategory DateObjectのIDと等しいかどうかをチェックします):

class Category extends DataObject {  
    public function LinkingMode(){
        $categoryID = Controller::curr()->CategoryID;
        return ($categoryID == $this->ID) ? 'current' : 'link';
}
}

テンプレートでは、通常どおりリンクモードを確認できます。

<% loop $Categories %>
    <li class="$LinkingMode">$Name</li>
<% end_loop %>

乾杯、フロリアン

于 2012-10-01T09:54:26.843 に答える