我已经创建了这样的自定义ModelAdmin
:
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中的菜单,但是:
ModelAdmin
中定义的图标未来如果我取消注释CompanyAdmin
中的两行并在_config.php
中注释扩展代码,一切正常。
我在哪里做错了?
答案 0 :(得分:4)
您可以在CompanyAdmin
文件中动态设置_config.php
配置设置:
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';
}
我建议仍然在$menu_title
类中设置$url_segment
和CompanyAdmin
,以便有默认的回退设置。配置设置将覆盖以下内容:
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 :(得分: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
中指定的内容,具体取决于您希望如何处理它。