0

我有以下问题:菜单中显示的一些链接(“投资组合”的子项)是指向自定义控制器的链接。当然,现在 LinkingMode 不适用于该链接。那是菜单的图像:

在此处输入图像描述

所以 Portfolio 的子项(网站、应用程序等)实际上是 Category-DataObjects,它们没有 SiteTree 表示。投资组合的子菜单是通过检查和循环在数据库中找到的所有类别创建的。

菜单创建如下所示:

<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>

菜单中的每个类别(网站、移动设备)都链接到一个自定义控制器,它看起来基本上是这样的:

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 添加一些自定义代码,告诉投资组合页面它具有哪种链接模式......

非常感谢,弗洛里安

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(在那里设置了一个公共 var 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 Category(LinkingMode 函数检查 Controller 中设置的当前 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 回答