如何从Laravel 4中的主题目录加载CSS和JS

时间:2014-06-02 20:59:35

标签: laravel laravel-4

如果有人可以帮助我,我会很高兴的! 我是Laravel的初学者,并开始构建一个我将使用主题的应用程序。 我希望我的CSS文件存储在" / path-to-theme / img /"夹。 我发现了一些引用CSS加载的例子,但不是我需要的。

我找到了:

<link rel="stylesheet" href="{{ URL::asset('assets/css/bootstrap.min.css') }}">

要查看this link以获取更多信息。 我该怎么做才能从&#34; / path-to-theme / img /&#34;加载CSS而不是&#34; / public&#34;文件夹中。

请帮帮我!非常感谢你!

3 个答案:

答案 0 :(得分:2)

所有资产必须位于public目录中。在该目录中,您可以使用您可能想要使用的任何文件夹结构,例如。 public/path-to-theme/etc

可能还有其他解决方案(没有测试过),但有点凌乱

您可以创建AssetsController并在该控制器中根据模板设置加载文件。我不确定你的情况究竟如何,但我可以想象以下内容。用户具有主题的首选项(存储在DB中的users表中)。在app.php中,您可以创建template配置变量。此变量的值是默认主题,如果未设置特定主题(将由用户设置或基于输入字段或get参数(或其他)),将使用该默认主题。

array(
   'theme' => 'default',
),

在AssetsController中你冷创建一个getCss动作并加载与你需要的css相对应的主题:

public function getCss() {

    $theme = Config::get('app.theme');
    return file_get_contents($theme.'/stylesheet.css');
}

routes.php内,您可以创建以下路线

Route::get('stylesheet.css', array('uses' => 'AssetsController@getCss'));

要在您的视图文件中加载您的css,请添加以下内容:

<link rel="stylesheet" href="{{ URL::action('AssetsController@getCss') }}">

这适用于默认主题。如果要加载特定于用户的主题首选项,可以在过滤器(filters.php)中执行此操作,例如在auth过滤器或filters.php中的自定义过滤器中(应将该过滤器名称附加到原始路径)你要显示的页面。)

Route::filter('auth', function()
{
    Config::set('app.theme', Auth::user()->theme);
});

仅在用户登录时才有效。但在不同的过滤器中,您可以检查是否设置了不同的参数(例如,get,post或session变量)。

希望这可能有所帮助。

答案 1 :(得分:1)

如果您已切换到Laravel 5,可以尝试使用以下功能的包:

  • 观点&amp;主题文件夹中的资产分离
  • 主题继承:扩展任何主题并创建主题hierarcies

在此处试试:igaster/laravel-theme

答案 2 :(得分:0)

资产必须发布到public文件夹。您可以使用command prompt/terminal

中的类似内容发布资源
php artisan asset:publish

php artisan asset:publish vendor/package

php artisan asset:publish --path="vendor/package"

使用合适的一个。 Laravel网站上的Check the documentation和另一个related question