【问题标题】:SilverStripe dynamic ModelAdmin url and title not workingSilverStripe 动态 ModelAdmin url 和标题不起作用
【发布时间】:2016-07-28 05:59:03
【问题描述】:

我创建了一个自定义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 中的菜单,但是:

  1. ModelAdmin中定义的图标不来
  2. 单击菜单后,我会弹出“未找到”。

如果我取消注释 CompanyAdmin 中的两行并注释 _config.php 中的扩展代码,一切正常。

我哪里做错了?

【问题讨论】:

    标签: php silverstripe


    【解决方案1】:

    您可以在_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'; 
    }
    

    【讨论】:

      【解决方案2】:

      我认为您在可能不需要的情况下扩展 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 中指定的内容,具体取决于您要如何处理。

      【讨论】:

        猜你喜欢
        • 2021-04-14
        • 1970-01-01
        • 2020-03-05
        • 1970-01-01
        • 1970-01-01
        • 2016-07-17
        • 2019-02-21
        • 2023-03-15
        • 2014-07-01
        相关资源
        最近更新 更多