【问题标题】:Silverstripe - Requirements on another controllerSilverstripe - 对另一个控制器的要求
【发布时间】:2017-06-13 09:12:49
【问题描述】:

我已经使用灯箱和效果构建了一个图片库模块。我想要做的是在 GalleryController 而不是 PageController 上包含 css 和 js 要求,但它似乎不起作用。

我有一个扩展 DataExtension 的 Gallery,然后我有一个扩展 Extension 的 GalleryController。然后在我的 _config 文件中,我将 ContentController 指向我的 GalleryController:

SiteTree::add_extension('Gallery');
Object::add_extension('ContentController', 'GalleryController');

GalleryController 正在为我获取 Gallery 对象。 是对这个控制器的要求不起作用。

画廊控制器:

public function init() {
    parent::init(); 

    //Load CSS requirements
    Requirements::css("ImageGallery/css/lightgallery.min.css");

    //Load Javascript requirements
    Requirements::javascript("ImageGallery/js/lightgallery.min.js");

我是否需要做其他事情来包含对另一个不是 PageController 的控制器的要求?

【问题讨论】:

  • 您在哪里拨打Requirements 的电话?一些代码会有所帮助。
  • 我已经更新了我的代码。我将它们放在 GalleryController 的 init 函数中。
  • GalleryControllerExtension 的子类吗?

标签: controller silverstripe requirements


【解决方案1】:

SilverStripe 中的扩展不允许您重载公共 API,您只能对其进行扩充。看起来这就是您尝试对 GalleryController 扩展执行的操作。

在这种情况下,您会在 SiteTree 对象上看到 ContentController::init provides an extension point contentcontrollerInit - 您应该使用它来添加您的要求。这可以添加到您的 Gallery DataExtension 类中:

# Class: Gallery.php
public function contentcontrollerInit()
{
    Requirements::javascript('...');
}

【讨论】:

  • 谢谢,这就是我所追求的!我注意到的一件事是它在 PageController 要求之前加载。有没有办法在页面要求之后加载库要求? PageController 加载 jQuery,然后 Gallery 页面加载依赖于 jQuery 的所有内容。
  • PageController::init 方法将被调用,只要您在parent::init 调用之后添加了您的需求调用,那么扩展应该首先运行。如果您希望扩展在之后运行,请在PageController parent::init 调用之前添加您的要求(例如jQuery)
  • 我个人还建议重命名扩展类以避免混淆,因为它本身不是控制器,因为它扩展了扩展。
猜你喜欢
  • 1970-01-01
  • 2020-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-01
  • 2021-12-20
  • 2015-09-07
相关资源
最近更新 更多