2015-02-07 2 views
1

Я строю модуль, который не имеет каких-либо видов, но вставляет некоторые javascript на всех страницах. Для этого javascript требуется JQuery. Для этого я хочу проинструктировать Orchard, что ему нужно загрузить модуль jquery. Я нашел несколько способов сделать это, но все они идут в поле зрения.Добавление библиотеки jquery в Orchard

Есть ли способ рассказать сад, чтобы загрузить библиотеку jquery, с контроллера или еще лучше от FilterProvider?

ответ

1

Конечно, в модуле сделать ResourceManifest.cs

using Orchard.UI.Resources; 

public class ResourceManifest : IResourceManifestProvider 
{ 
    public void BuildManifests(ResourceManifestBuilder builder) 
    { 
     var manifest = builder.Add(); 

     manifest.DefineScript("MyScript") 
      .SetUrl("myscript.min.js", "myscript.js") // Or just use one 
      .SetVersion("1.0.0") 
      .SetDependencies("jQuery"); 
    } 
} 

Тогда просто включить MyScript с менеджером ресурсов в вашем FilterProvider

public class MyScriptFilter : FilterProvider, IResultFilter 
{ 
    private readonly IResourceManager resourceManager; 

    public MyScriptFilter(IResourceManager resourceManager) 
    { 
     this.resourceManager = resourceManager; 
    } 

    public void OnResultExecuting(ResultExecutingContext filterContext) 
    { 
     if (!(filterContext.Result is ViewResult) || !UI.Admin.AdminFilter.IsApplied(filterContext.RequestContext)) 
     { 
      // Control where when it should and shouldn't appear, like exclude admin and any non-ViewResult 
      return; 
     } 

     this.resourceManager.Require("script", "MyScript"); 
    } 

    public void OnResultExecuted(ResultExecutedContext filterContext) 
    { 
    } 
} 

Не проверял это так не уверен, если он компилирует , но он должен сделать трюк.

+1

В то время как решение будет работать, и, в частности, способ объявить скрипт, который зависит от jQuery, точно прав, в том числе сценарий, как правило, принадлежит в представлении, поэтому я не обязательно буду рекомендовать вторую часть ответа: что, если автор сайта хочет заменить вид другим, который использует другой скрипт в своей теме? –

+0

Вы можете просто включить ресурс в макет: Script.Require («MyScript»); – mberacochea

Смежные вопросы