Integration de assetic
@@ -0,0 +1,87 @@
|
|||||||
|
<?php
|
||||||
|
/*************************************************************************************/
|
||||||
|
/* */
|
||||||
|
/* Thelia */
|
||||||
|
/* */
|
||||||
|
/* Copyright (c) OpenStudio */
|
||||||
|
/* email : info@thelia.net */
|
||||||
|
/* web : http://www.thelia.net */
|
||||||
|
/* */
|
||||||
|
/* This program is free software; you can redistribute it and/or modify */
|
||||||
|
/* it under the terms of the GNU General Public License as published by */
|
||||||
|
/* the Free Software Foundation; either version 3 of the License */
|
||||||
|
/* */
|
||||||
|
/* This program is distributed in the hope that it will be useful, */
|
||||||
|
/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
|
||||||
|
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
|
||||||
|
/* GNU General Public License for more details. */
|
||||||
|
/* */
|
||||||
|
/* You should have received a copy of the GNU General Public License */
|
||||||
|
/* along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||||
|
/* */
|
||||||
|
/*************************************************************************************/
|
||||||
|
|
||||||
|
namespace Thelia\Admin\Templating\Smarty;
|
||||||
|
|
||||||
|
use Thelia\Template\Assets\AsseticManager;
|
||||||
|
|
||||||
|
class AssetsManager extends AsseticManager {
|
||||||
|
|
||||||
|
const ASSET_TYPE_AUTO = '';
|
||||||
|
|
||||||
|
private $assetic_manager;
|
||||||
|
|
||||||
|
private $web_root;
|
||||||
|
private $path_relative_to_web_root;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param string $web_root the disk path to the web root
|
||||||
|
* @param string $path_relative_to_web_root the path (relative to web root) where the assets will be generated
|
||||||
|
*/
|
||||||
|
public function __construct($web_root, $path_relative_to_web_root) {
|
||||||
|
|
||||||
|
parent::__construct();
|
||||||
|
|
||||||
|
$this->web_root = $web_root;
|
||||||
|
$this->path_relative_to_web_root = $path_relative_to_web_root;
|
||||||
|
|
||||||
|
$this->assetic_manager = new AsseticManager();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function processSmartyPluginCall($assetType, $params, $content, \Smarty_Internal_Template $template, &$repeat) {
|
||||||
|
|
||||||
|
// Opening tag (first call only)
|
||||||
|
if ($repeat) {
|
||||||
|
$file = $params['file'];
|
||||||
|
$filters = isset($params['filters']) ? $params['filters'] : '';
|
||||||
|
$debug = isset($params['debug']) ? trim(strtolower($params['debug'])) == 'true' : false;
|
||||||
|
|
||||||
|
// Get template base path
|
||||||
|
$tpl_path = $template->source->filepath;
|
||||||
|
|
||||||
|
// Get basedir
|
||||||
|
$tpl_dir = dirname($tpl_path);
|
||||||
|
|
||||||
|
// Create absolute dir path
|
||||||
|
$asset_dir = realpath($tpl_dir.'/'.dirname($file));
|
||||||
|
$asset_file = basename($file);
|
||||||
|
|
||||||
|
if ($asset_dir === false) throw new \Exception("Failed to get real path of '".$tpl_dir.'/'.dirname($file)."'");
|
||||||
|
|
||||||
|
$url = $this->assetic_manager->asseticize(
|
||||||
|
$asset_dir.'/'.$asset_file,
|
||||||
|
$this->web_root."/".$this->path_relative_to_web_root,
|
||||||
|
$this->path_relative_to_web_root,
|
||||||
|
$assetType,
|
||||||
|
$filters,
|
||||||
|
$debug
|
||||||
|
);
|
||||||
|
|
||||||
|
$template->assign('asset_url', $url);
|
||||||
|
}
|
||||||
|
else if (isset($content)) {
|
||||||
|
return $content;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
149
core/lib/Thelia/Admin/Templating/Template.class.php
Normal file
@@ -0,0 +1,149 @@
|
|||||||
|
<?php
|
||||||
|
/*************************************************************************************/
|
||||||
|
/* */
|
||||||
|
/* Thelia */
|
||||||
|
/* */
|
||||||
|
/* Copyright (c) OpenStudio */
|
||||||
|
/* email : info@thelia.net */
|
||||||
|
/* web : http://www.thelia.net */
|
||||||
|
/* */
|
||||||
|
/* This program is free software; you can redistribute it and/or modify */
|
||||||
|
/* it under the terms of the GNU General Public License as published by */
|
||||||
|
/* the Free Software Foundation; either version 3 of the License */
|
||||||
|
/* */
|
||||||
|
/* This program is distributed in the hope that it will be useful, */
|
||||||
|
/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
|
||||||
|
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
|
||||||
|
/* GNU General Public License for more details. */
|
||||||
|
/* */
|
||||||
|
/* You should have received a copy of the GNU General Public License */
|
||||||
|
/* along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||||
|
/* */
|
||||||
|
/*************************************************************************************/
|
||||||
|
namespace Thelia\Admin\Templating;
|
||||||
|
|
||||||
|
use \Smarty;
|
||||||
|
use Thelia\Admin\Templating\Smarty\AssetsManager;
|
||||||
|
|
||||||
|
// smarty configuration
|
||||||
|
class Template extends Smarty
|
||||||
|
{
|
||||||
|
private $asset_manager;
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct();
|
||||||
|
|
||||||
|
$compile_dir = THELIA_LOCAL_DIR . 'cache/smarty/compile';
|
||||||
|
if (! is_dir($compile_dir)) @mkdir($compile_dir, 0777, true);
|
||||||
|
|
||||||
|
$cache_dir = THELIA_LOCAL_DIR . 'cache/smarty/cache';
|
||||||
|
if (! is_dir($cache_dir)) @mkdir($cache_dir, 0777, true);
|
||||||
|
|
||||||
|
$web_root = THELIA_WEB_DIR;
|
||||||
|
$asset_dir_from_web_root = 'assets/admin/default';
|
||||||
|
|
||||||
|
$this->asset_manager = new AssetsManager($web_root, $asset_dir_from_web_root);
|
||||||
|
|
||||||
|
$this->setTemplateDir(__DIR__.'/../template/default'); // FIXME - a parametrer
|
||||||
|
|
||||||
|
$this->setCompileDir($compile_dir);
|
||||||
|
$this->setCacheDir($cache_dir);
|
||||||
|
|
||||||
|
// Register translation function 'intl'
|
||||||
|
$this->registerPlugin('function', 'intl', array($this, 'smartyTranslate'));
|
||||||
|
|
||||||
|
// Register Thelia modules inclusion function 'thelia_module'
|
||||||
|
$this->registerPlugin('function', 'thelia_module', array($this, 'smartyTheliaModule'));
|
||||||
|
|
||||||
|
// Register asset management blocks
|
||||||
|
$this->registerPlugin('block', 'stylesheets', array($this, 'smartyBlockStylesheets'));
|
||||||
|
$this->registerPlugin('block', 'javascripts', array($this, 'smartyBlockJavascripts'));
|
||||||
|
$this->registerPlugin('block', 'images', array($this, 'smartyBlockImages'));
|
||||||
|
|
||||||
|
/*
|
||||||
|
$this->setConfigDir(GUESTBOOK_DIR . 'configs');
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Set base config
|
||||||
|
$this->assign('lang', 'fr');
|
||||||
|
|
||||||
|
$this->assign('email', '');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function smartyTranslate($params, &$smarty)
|
||||||
|
{
|
||||||
|
if (isset($params['l'])) {
|
||||||
|
$string = str_replace('\'', '\\\'', $params['l']);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$string = '';
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO
|
||||||
|
|
||||||
|
return "[$string]";
|
||||||
|
}
|
||||||
|
|
||||||
|
public function smartyTheliaModule($params, &$smarty)
|
||||||
|
{
|
||||||
|
// TODO
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
public function smartyBlockJavascripts($params, $content, \Smarty_Internal_Template $template, &$repeat)
|
||||||
|
{
|
||||||
|
return $this->asset_manager->processSmartyPluginCall('js', $params, $content, $template, $repeat);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function smartyBlockImages($params, $content, \Smarty_Internal_Template $template, &$repeat)
|
||||||
|
{
|
||||||
|
return $this->asset_manager->processSmartyPluginCall(AssetsManager::ASSET_TYPE_AUTO, $params, $content, $template, $repeat);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function smartyBlockStylesheets($params, $content, \Smarty_Internal_Template $template, &$repeat)
|
||||||
|
{
|
||||||
|
return $this->asset_manager->processSmartyPluginCall('css', $params, $content, $template, $repeat);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public function render($templateName, $parameters)
|
||||||
|
{
|
||||||
|
$realTemplateName = $templateName . '.tpl';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Assign variables/objects to the templates.
|
||||||
|
*
|
||||||
|
* Description
|
||||||
|
* void assign(mixed var);
|
||||||
|
* void assign(string varname, mixed var, bool nocache);
|
||||||
|
*
|
||||||
|
* You can explicitly pass name/value pairs, or associative arrays
|
||||||
|
* containing the name/value pairs.
|
||||||
|
*
|
||||||
|
* If you pass the optional third nocache parameter of TRUE, the
|
||||||
|
* variable is assigned as nocache variable. See {@link http://www.smarty.net/docs/en/caching.cacheable.tpl#cacheability.variables} for details.
|
||||||
|
*
|
||||||
|
* Too learn more see {@link http://www.smarty.net/docs/en/api.assign.tpl}
|
||||||
|
*/
|
||||||
|
$this->smarty->assign($parameters);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This returns the template output instead of displaying it. Supply a
|
||||||
|
* valid template resource type and path. As an optional second
|
||||||
|
* parameter, you can pass a $cache id, see the caching section for more
|
||||||
|
* information.
|
||||||
|
*
|
||||||
|
* As an optional third parameter, you can pass a $compile_id. This is
|
||||||
|
* in the event that you want to compile different versions of the same
|
||||||
|
* template, such as having separate templates compiled for different
|
||||||
|
* languages. You can also set the $compile_id variable once instead of
|
||||||
|
* passing this to each call to this function.
|
||||||
|
*
|
||||||
|
* Too learn more see {@link http://www.smarty.net/docs/en/api.fetch.tpl}
|
||||||
|
*/
|
||||||
|
|
||||||
|
return $this->smarty->fetch($realTemplateName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
||||||
1109
core/lib/Thelia/Admin/template/default/assets/bootstrap/css/bootstrap-responsive.css
vendored
Normal file
9
core/lib/Thelia/Admin/template/default/assets/bootstrap/css/bootstrap-responsive.min.css
vendored
Normal file
6167
core/lib/Thelia/Admin/template/default/assets/bootstrap/css/bootstrap.css
vendored
Normal file
9
core/lib/Thelia/Admin/template/default/assets/bootstrap/css/bootstrap.min.css
vendored
Normal file
|
After Width: | Height: | Size: 8.6 KiB |
|
After Width: | Height: | Size: 12 KiB |
2280
core/lib/Thelia/Admin/template/default/assets/bootstrap/js/bootstrap.js
vendored
Normal file
6
core/lib/Thelia/Admin/template/default/assets/bootstrap/js/bootstrap.min.js
vendored
Normal file
135
core/lib/Thelia/Admin/template/default/assets/css/admin.less
Normal file
@@ -0,0 +1,135 @@
|
|||||||
|
// -- Tools --------------------------------------------------------------------
|
||||||
|
|
||||||
|
.border-radius(@radius: 5px) {
|
||||||
|
-webkit-border-radius: @radius;
|
||||||
|
-moz-border-radius: @radius;
|
||||||
|
border-radius: @radius;
|
||||||
|
}
|
||||||
|
|
||||||
|
.box-shadow(@shadow: 0 1px 2px rgba(0,0,0,.05)) {
|
||||||
|
-webkit-box-shadow: @shadow;
|
||||||
|
-moz-box-shadow: @shadow;
|
||||||
|
box-shadow: @shadow;
|
||||||
|
}
|
||||||
|
|
||||||
|
// -- Base styling ------------------------------------------------------------
|
||||||
|
|
||||||
|
html, body {
|
||||||
|
height: 100%;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
background: url("img/bg.jpg") repeat;
|
||||||
|
font-size: 13px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h3, h4 {
|
||||||
|
color: #5a6876;
|
||||||
|
background: -webkit-gradient(linear, left top, left bottom, from(#42505d), to(#72808e));
|
||||||
|
-webkit-background-clip: text;
|
||||||
|
-webkit-text-fill-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
padding: 0px;
|
||||||
|
margin: 0px 0px 20px 0px;
|
||||||
|
text-align: left;
|
||||||
|
font-size : 18px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h4 {
|
||||||
|
padding: 0px 0px 20px 0px;
|
||||||
|
margin: 0px;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
#wrapper {
|
||||||
|
padding-top: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: #e9720f;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
// -- Brandbar ----------------------------------------------------------------
|
||||||
|
|
||||||
|
/* --- BRAND BAR ---*/
|
||||||
|
.brandbar {
|
||||||
|
|
||||||
|
background: url("images/header.jpg") repeat-x;
|
||||||
|
height: 90px;
|
||||||
|
|
||||||
|
a.brand {
|
||||||
|
text-indent: -133337px;
|
||||||
|
display: block;
|
||||||
|
float: left;
|
||||||
|
margin-right: 20px;
|
||||||
|
background: url("images/logo.png") 0px 12px no-repeat;
|
||||||
|
width: 124px;
|
||||||
|
height: 63px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.breadcrumb {
|
||||||
|
border-radius: 0px;
|
||||||
|
padding: 25px 0px 25px 30px;
|
||||||
|
background: url("images/logo-light.png") left center no-repeat;
|
||||||
|
float: left;
|
||||||
|
margin: 12px 0px 0px 0px;
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: #949aa1;
|
||||||
|
text-shadow: 0px 1px 0px rgba(0,0,0,0.8);
|
||||||
|
}
|
||||||
|
|
||||||
|
.active {
|
||||||
|
color: #FFF;
|
||||||
|
text-shadow: 0px 1px 0px rgba(0,0,0,0.8);
|
||||||
|
border-bottom: 1px dotted white;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.Blocmoncompte {
|
||||||
|
float: right;
|
||||||
|
margin: 0px;
|
||||||
|
padding: 0px;
|
||||||
|
margin-top: 35px;
|
||||||
|
|
||||||
|
color: white;
|
||||||
|
font-size: 13px;
|
||||||
|
text-shadow: 0px 1px 0px rgba(0,0,0,0.8);
|
||||||
|
}
|
||||||
|
|
||||||
|
dt {
|
||||||
|
float: left;
|
||||||
|
margin-right: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.deconnexion {
|
||||||
|
float: right;
|
||||||
|
margin: 0px;
|
||||||
|
|
||||||
|
a {
|
||||||
|
text-indent: -13337px;
|
||||||
|
display: block;
|
||||||
|
background: url("images/deconnexion.png") no-repeat;
|
||||||
|
width: 23px;
|
||||||
|
height: 24px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// -- Login form --------------------------------------------------------------
|
||||||
|
|
||||||
|
.form-signin {
|
||||||
|
max-width: 400px;
|
||||||
|
padding: 19px 29px 29px;
|
||||||
|
margin: 0 auto 20px;
|
||||||
|
background-color: #fff;
|
||||||
|
border: 1px solid #e5e5e5;
|
||||||
|
.border-radius;
|
||||||
|
.box-shadow;
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 94 KiB |
|
After Width: | Height: | Size: 308 KiB |
BIN
core/lib/Thelia/Admin/template/default/assets/css/img/bg.jpg
Normal file
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 3.6 KiB |
BIN
core/lib/Thelia/Admin/template/default/assets/css/img/header.jpg
Normal file
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 3.5 KiB |
BIN
core/lib/Thelia/Admin/template/default/assets/css/img/logo.png
Normal file
|
After Width: | Height: | Size: 7.8 KiB |
|
After Width: | Height: | Size: 2.8 KiB |
|
After Width: | Height: | Size: 2.8 KiB |
BIN
core/lib/Thelia/Admin/template/default/assets/css/img/nav-li.png
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
core/lib/Thelia/Admin/template/default/assets/css/img/nav.png
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 3.2 KiB |
BIN
core/lib/Thelia/Admin/template/default/assets/css/img/search.png
Normal file
|
After Width: | Height: | Size: 3.8 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 2.8 KiB |
BIN
core/lib/Thelia/Admin/template/default/assets/css/img/tabnav.jpg
Normal file
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 2.8 KiB |
BIN
core/lib/Thelia/Admin/template/default/assets/css/img/top.jpg
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
core/lib/Thelia/Admin/template/default/assets/img/favicon.ico
Normal file
|
After Width: | Height: | Size: 3.4 KiB |
|
After Width: | Height: | Size: 5.4 KiB |
6
core/lib/Thelia/Admin/template/default/assets/js/jquery.min.js
vendored
Normal file
0
core/lib/Thelia/Admin/template/default/home.tpl
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
{* Include required JS files *}
|
||||||
|
|
||||||
|
{javascripts file='../assets/js/jquery.min.js'}
|
||||||
|
<link rel="stylesheet" href="{$asset_url}" target="screen">
|
||||||
|
{/javascripts}
|
||||||
|
|
||||||
|
{javascripts file='../assets/bootstrap/js/bootstrap.min.js'}
|
||||||
|
<link rel="stylesheet" href="{$asset_url}" target="screen">
|
||||||
|
{/javascripts}
|
||||||
|
|
||||||
|
{* TODO allow modules to include JS here *}
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="{$lang}">
|
||||||
|
<head>
|
||||||
|
<title>{intl l='Thelia Back Office'}{if ! empty($page_title)} - {$page_title}{/if}</title>
|
||||||
|
|
||||||
|
{images file='../assets/img/favicon.ico'}<link rel="shortcut icon" href="{$asset_url}" />{/images}
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
|
||||||
|
{stylesheets file='../assets/css/*' filters='less,cssrewrite'}
|
||||||
|
<link rel="stylesheet" href="{$asset_url}">
|
||||||
|
{/stylesheets}
|
||||||
|
|
||||||
|
{stylesheets file='../assets/bootstrap/css/bootstrap.min.css' filters='cssrewrite'}
|
||||||
|
<link rel="stylesheet" href="{$asset_url}">
|
||||||
|
{/stylesheets}
|
||||||
|
|
||||||
|
{stylesheets file='../assets/bootstrap/css/bootstrap-responsive.min.css' filters='cssrewrite'}
|
||||||
|
<link rel="stylesheet" href="{$asset_url}">
|
||||||
|
{/stylesheets}
|
||||||
|
|
||||||
|
{* TODO allow modules to include CSS here *}
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
35
core/lib/Thelia/Admin/template/default/login.tpl
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
{$page_title={intl l='Thelia'}}
|
||||||
|
{include file='includes/header.inc.tpl'}
|
||||||
|
|
||||||
|
<div class="loginpage">
|
||||||
|
|
||||||
|
<div class="brandbar container">
|
||||||
|
<a class="brand" href="index.php">{images file='assets/img/logo-thelia-34px.png'}<img src="{$asset_url}" alt="{intl l='Thelia, solution e-commerce libre'}" />{/images}</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="wrapper" class="container">
|
||||||
|
|
||||||
|
{thelia_module action='index_top'}
|
||||||
|
|
||||||
|
<div class="hero-unit">
|
||||||
|
<h1>{intl l='Thelia Back Office'}</h1>
|
||||||
|
|
||||||
|
<form action="/admin/login" method="post" class="well form-inline">
|
||||||
|
<input type="text" class="input" placeholder="{intl l='E-mail address'}" name="username" />
|
||||||
|
<input type="password" class="input" placeholder="{intl l='Password'}" name="password" />
|
||||||
|
|
||||||
|
<label class="checkbox"> <input type="checkbox" name="remember" value="yes"> {intl l='Remember me'}</label>
|
||||||
|
|
||||||
|
<button type="submit" class="btn btn-primary">{intl l='Login'} <i class="icon-play"></i></button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row-fluid">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{thelia_module action='index_bottom'}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{include file='includes/footer.inc.tpl'}
|
||||||
1
core/lib/Thelia/Admin/template/default/template.xml
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
10
web/.htaccess
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
Options +FollowSymlinks
|
||||||
|
|
||||||
|
AddDefaultCharset UTF-8
|
||||||
|
|
||||||
|
<IfModule mod_rewrite.c>
|
||||||
|
RewriteEngine on
|
||||||
|
|
||||||
|
RewriteBase /thelia2
|
||||||
|
RewriteRule ^admin(/.*)?$ index_dev.php/admin/$1 [L,QSA]
|
||||||
|
</IfModule>
|
||||||