2016-07-28 64 views
4

我創建了一個自定義的ModelAdmin這樣的:SilverStripe動態的ModelAdmin URL和標題不工作

class CompanyAdmin extends ModelAdmin { 
    // private static $menu_title = 'Companies'; 
    // private static $url_segment = 'companies'; 
    private static $managed_models = 'Company'; 
    private static $menu_icon = 'mysite/images/icons/company-icon.png'; 
} 

在上面的代碼中,我註釋掉的靜態屬性$menu_title$url_segment,因爲我想他們是動態的(即這些屬性應該取決於域名)。

爲此,我創建這樣一個擴展名:

class CompanyMenu extends LeftAndMainExtension { 

    public function init() { 
     $id = 'Company'; 
     $title = $_SERVER["HTTP_HOST"] == "login.example.com" ? "Companies" : "Profile"; 
     $link = $_SERVER["HTTP_HOST"] == "login.example.com" ? "admin/companies" : "admin/profile"; 

     CMSMenu::add_menu_item($id, $title, $link); 
    } 
} 

_config.php我添加以下代碼以激活延伸:

LeftAndMain::add_extension('CompanyMenu'); 

問題

所有這些代碼使得CMS中的菜單正確但是:

  1. ModelAdmin中定義的圖標不來
  2. 一旦點擊菜單,我會得到「未找到」彈出窗口。

如果我取消註釋CompanyAdmin中的兩行並在_config.php中註釋擴展代碼一切正常。

我在哪裏做錯了?

回答

4

您可以動態地在_config.php文件中設置的CompanyAdmin配置設置:

if ($_SERVER['HTTP_HOST'] == 'login.example.com') { 
    CompanyAdmin::config()->menu_title = 'Companies'; 
    CompanyAdmin::config()->url_segment = 'companies'; 
} else { 
    CompanyAdmin::config()->menu_title = 'Profile'; 
    CompanyAdmin::config()->url_segment = 'profile'; 
} 

我建議還是設置在CompanyAdmin$menu_title$url_segment所以有一個默認的備用設置。該配置設置將覆蓋這些:

class CompanyAdmin extends ModelAdmin { 
    private static $menu_title = 'Companies'; 
    private static $url_segment = 'company'; 
    private static $managed_models = 'Company'; 
    private static $menu_icon = 'mysite/images/icons/company-icon.png'; 
} 
1

我想你通過擴展LeftAndMainExtension時,你可能沒有污濁的水域位。

根據您對擴展LeftAndMainExtension的想法,有幾件事情你錯過了。

首先,您的ModelAdmin沒有被使用,所以圖標和控制器沒有被拾取。

其次,你錯過了一個應該看起來像這樣的區塊來添加一個圖標到你的菜單。這是LeftAndMain上的一種方法,它創建CSS以將圖標添加到菜單項。

public static function menu_icon_for_class($class) { 
    $icon = Config::inst()->get($class, 'menu_icon', Config::FIRST_SET); 
    if (!empty($icon)) { 
     $class = strtolower(Convert::raw2htmlname(str_replace('\\', '-', $class))); 
     return ".icon.icon-16.icon-{$class} { background-image: url('{$icon}'); } "; 
    } 
    return ''; 
} 

的CSS從這個返回被添加到管理方面的要求,在這條線的LeftAndMain::MainMenu()

if ($menuIconStyling) Requirements::customCSS($menuIconStyling); 

關於「未找到」錯誤您收到,它是由您沒有引起指定當點擊圖標時應該發生什麼。這是您需要在CMSMenu::add_menu_item()LeftAndMainExtension中指定的內容,具體取決於您想要如何處理它。