2

我刚刚开始使用 Laravel 3 开发内容管理框架。它不是为数据库驱动的应用程序而设计的(可能稍后会出现)。它专为希望以简单且对 SEO 友好的方式制作静态网站的网页设计师而设计。

简而言之,设计者只需要通过使用文件夹结构来创建一个默认站点和任何其他 [可选] 站点(使其成为一个多站点框架,如 Drupal)。

目前,结构设计如下(尚未实现,只是一个想法;也是对 Laravel 标准路径结构的改动):

public[_html]
root
    app // application folder
    bundles
    sites
        sites.json // used to determine the default site, and register any others
        {site-slug}
            info.json
            content // for page content that inherits a layout
                {page-slug}
                    info.json
                    content.blade.php
            layouts // site layouts: headers, footers, etc.
    stores // storage folder
    system // laravel folder

这是我现在的主要问题:我不知道如何扩展 View 类以查看标准views文件夹之外而不必使用path:前缀。

这样做的最佳方法是什么?

也许还有另一个模板引擎可以让我更轻松地完成这项任务?Laravel 3 是否有合适的 HAML 引擎?

注意:我知道有使用 Markdown 的内容包,但这不是我想要的。

这里的任何帮助将不胜感激。

4

2 回答 2

2

在 views.php 配置文件中,您应该能够将要包含的所有目录添加到数组中

编辑

抱歉,这是针对 laravel 4。我会扩展视图类并让它搜索路径数组是 View::path 方法。您可以使用配置文件设置此数组,因此您调用的路径将是 Config::get('views')

我的解决方案

前段时间我在做一个项目,想出了一个避免修改任何核心文件的解决方案。

在应用程序/start.php

Event::listen(View::loader, function($bundle, $view)
{
    foreach (Config::get('views', array()) as $path) {
        if($file = View::file($bundle, $view, $path))
            return $file;
    }

    return View::file($bundle, $view, Bundle::path($bundle).'views');
});

在 application/config/views.php 中(你必须创建这个)

return array(
    path('app').'../myviews',
);

现在您可以将任意数量的目录添加到该文件中,并且将在检查默认视图目录之前检查它们。

于 2013-02-12T16:58:58.673 回答
-1

我正在使用这个:

创建中间件 setDB:

namespace App\Http\Middleware; 

use Cookie;  
use Config;  
use Closure;  
use DB;  
use App\User;  
use App\Common;  
use Auth;  
use Session;  
use View;  
use Illuminate\Contracts\Foundation\Application;   

class SetDB
{  
   public function __construct(Application $app){   
       $this->app=$app;  
   }  
   public function handle($request, Closure $next)  
   {  
        $server=$_SERVER["SERVER_NAME"];  
        $paths = 'resources/views';    
        $asset = 'public';  
        $result=DB::connection('mysql2')->table('mst_editor_database_info')->where("paths",$server)->first();   
        DB::disconnect(env('DB_DATABASE'));

        if(count($result) > 0){ 

            $dbname=$result->dbname;   
            $paths = 'themes/'.$result->paths.'/views';   
            Session::put('paths',$paths);  
            Session::put('asset','themes/'.$result->paths.'/assets');   
            Config::set('database.connections.mysql', array(
                   'driver' => 'mysql',
                   'host' => env('DB_HOST'),
                   'port' => env('DB_PORT'),
                   'database' =>$dbname,
                   'username' => 'username',
                'password' => 'password',
                'charset' => 'utf8',
                'collation' => 'utf8_unicode_ci',
                'prefix' => '',
            ));
            DB::reconnect('mysql');

        }else{

            DB::disconnect('mysql');
            Config::set('database.connections.mysql', config('database.connections.mysql2'));
            DB::reconnect('mysql');
            Session::put('paths',$paths);
            Session::put('asset',$asset);
        }
        Common::setTheme();
        Config::set('site.asset', Session::get('asset'));
        return $next($request);
    }
}

创建类 App\Common.php:

namespace App;
use Config;
use Session;
use Illuminate\Database\Eloquent\Model;
use View;

class Common extends Model
{
   public static function setTheme(){
       Config::set('view.paths', Session::get('paths'));
       View::addNamespace('Theme', Session::get('paths'));
    }
}

使用命名空间主题:

return View::make('Theme::welcome');

在 kernel.php 中注册中间件:

protected $middlewareGroups = [
  'web' => [
    \App\Http\Middleware\SetDB::class,
  ]
];

在 config/database.php 中设置默认数据库连接:

'connections' => [

'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST'),
'port' => env('DB_PORT'),
'database' => env('DB_DATABASE'),
'username' => env('DB_USERNAME'),
'password' => env('DB_PASSWORD'),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
],

'mysql2' => [
'driver' => 'mysql',
'host' => env('DB_HOST'),
'port' => env('DB_PORT'),
'database' => env('DB_DATABASE'),
'username' => env('DB_USERNAME'),
'password' => env('DB_PASSWORD'),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
],

],

设置配置/view.php:

    'paths' => [base_path('/')],

创建您的模板文件夹

themes/{paths}/views
于 2016-12-21T07:50:04.473 回答