Commit fed9ec18574e8b21df6deb23d6f074f837121c84
1 parent
c6435b1f
image size
Showing
10 changed files
with
254 additions
and
100 deletions
Show diff stats
.htaccess
| @@ -81,21 +81,21 @@ AddDefaultCharset utf-8 | @@ -81,21 +81,21 @@ AddDefaultCharset utf-8 | ||
| 81 | 81 | ||
| 82 | 82 | ||
| 83 | # кеширование в браузере на стороне пользователя | 83 | # кеширование в браузере на стороне пользователя |
| 84 | -<IfModule mod_expires.c> | ||
| 85 | -ExpiresActive On | ||
| 86 | -ExpiresDefault "access 7 days" | ||
| 87 | -ExpiresByType application/javascript "access plus 1 year" | ||
| 88 | -ExpiresByType text/javascript "access plus 1 year" | ||
| 89 | -ExpiresByType text/css "access plus 1 year" | ||
| 90 | -ExpiresByType text/html "access plus 7 day" | ||
| 91 | -ExpiresByType text/x-javascript "access 1 year" | ||
| 92 | -ExpiresByType image/gif "access plus 1 year" | ||
| 93 | -ExpiresByType image/jpeg "access plus 1 year" | ||
| 94 | -ExpiresByType image/png "access plus 1 year" | ||
| 95 | -ExpiresByType image/jpg "access plus 1 year" | ||
| 96 | -ExpiresByType image/x-icon "access 1 year" | ||
| 97 | -ExpiresByType application/x-shockwave-flash "access 1 year" | ||
| 98 | -</IfModule> | 84 | +#<IfModule mod_expires.c> |
| 85 | +#ExpiresActive On | ||
| 86 | +#ExpiresDefault "access 7 days" | ||
| 87 | +#ExpiresByType application/javascript "access plus 1 year" | ||
| 88 | +#ExpiresByType text/javascript "access plus 1 year" | ||
| 89 | +#ExpiresByType text/css "access plus 1 year" | ||
| 90 | +#ExpiresByType text/html "access plus 7 day" | ||
| 91 | +#ExpiresByType text/x-javascript "access 1 year" | ||
| 92 | +#ExpiresByType image/gif "access plus 1 year" | ||
| 93 | +#ExpiresByType image/jpeg "access plus 1 year" | ||
| 94 | +#ExpiresByType image/png "access plus 1 year" | ||
| 95 | +#ExpiresByType image/jpg "access plus 1 year" | ||
| 96 | +#ExpiresByType image/x-icon "access 1 year" | ||
| 97 | +#ExpiresByType application/x-shockwave-flash "access 1 year" | ||
| 98 | +#</IfModule> | ||
| 99 | 99 | ||
| 100 | <IfModule mod_deflate.c> | 100 | <IfModule mod_deflate.c> |
| 101 | AddOutputFilterByType DEFLATE text/plain | 101 | AddOutputFilterByType DEFLATE text/plain |
| @@ -117,25 +117,25 @@ RewriteCond %{HTTP:Accept-encoding} gzip | @@ -117,25 +117,25 @@ RewriteCond %{HTTP:Accept-encoding} gzip | ||
| 117 | RewriteCond %{REQUEST_FILENAME}.gz -f | 117 | RewriteCond %{REQUEST_FILENAME}.gz -f |
| 118 | RewriteRule ^(.*)$ $1.gz [QSA,L] | 118 | RewriteRule ^(.*)$ $1.gz [QSA,L] |
| 119 | </IfModule> | 119 | </IfModule> |
| 120 | -# Cache-Control | ||
| 121 | -<ifModule mod_headers.c> | ||
| 122 | -# 30 дней | ||
| 123 | -<filesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|swf)$"> | ||
| 124 | -Header set Cache-Control "max-age=2592000, public" | ||
| 125 | -</filesMatch> | ||
| 126 | -# 30 дней | ||
| 127 | -<filesMatch "\.(css|js)$"> | ||
| 128 | -Header set Cache-Control "max-age=2592000, public" | ||
| 129 | -</filesMatch> | ||
| 130 | -# 2 дня | ||
| 131 | -<filesMatch "\.(xml|txt)$"> | ||
| 132 | -Header set Cache-Control "max-age=172800, public, must-revalidate" | ||
| 133 | -</filesMatch> | ||
| 134 | -# 1 день | ||
| 135 | -<filesMatch "\.(html|htm|php)$"> | ||
| 136 | -Header set Cache-Control "max-age=172800, private, must-revalidate" | ||
| 137 | -</filesMatch> | ||
| 138 | -</ifModule> | 120 | +## Cache-Control |
| 121 | +#<ifModule mod_headers.c> | ||
| 122 | +## 30 дней | ||
| 123 | +#<filesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|swf)$"> | ||
| 124 | +#Header set Cache-Control "max-age=2592000, public" | ||
| 125 | +#</filesMatch> | ||
| 126 | +## 30 дней | ||
| 127 | +#<filesMatch "\.(css|js)$"> | ||
| 128 | +#Header set Cache-Control "max-age=2592000, public" | ||
| 129 | +#</filesMatch> | ||
| 130 | +## 2 дня | ||
| 131 | +#<filesMatch "\.(xml|txt)$"> | ||
| 132 | +#Header set Cache-Control "max-age=172800, public, must-revalidate" | ||
| 133 | +#</filesMatch> | ||
| 134 | +## 1 день | ||
| 135 | +#<filesMatch "\.(html|htm|php)$"> | ||
| 136 | +#Header set Cache-Control "max-age=172800, private, must-revalidate" | ||
| 137 | +#</filesMatch> | ||
| 138 | +#</ifModule> | ||
| 139 | 139 | ||
| 140 | #Запрет отдачи HTTP-заголовков Vary браузерам семейства MSIE | 140 | #Запрет отдачи HTTP-заголовков Vary браузерам семейства MSIE |
| 141 | <IfModule mod_setenvif.c> | 141 | <IfModule mod_setenvif.c> |
backend/config/main.php
| 1 | <?php | 1 | <?php |
| 2 | -use developeruz\db_rbac\behaviors\AccessBehavior; | 2 | +use common\behaviors\ArtBoxAccessBehavior; |
| 3 | $params = array_merge( | 3 | $params = array_merge( |
| 4 | require(__DIR__ . '/../../common/config/params.php'), | 4 | require(__DIR__ . '/../../common/config/params.php'), |
| 5 | require(__DIR__ . '/../../common/config/params-local.php'), | 5 | require(__DIR__ . '/../../common/config/params-local.php'), |
| @@ -40,7 +40,7 @@ return [ | @@ -40,7 +40,7 @@ return [ | ||
| 40 | 'controllerNamespace' => 'backend\controllers', | 40 | 'controllerNamespace' => 'backend\controllers', |
| 41 | 'bootstrap' => ['log'], | 41 | 'bootstrap' => ['log'], |
| 42 | 'as AccessBehavior' => [ | 42 | 'as AccessBehavior' => [ |
| 43 | - 'class' => AccessBehavior::className(), | 43 | + 'class' => ArtBoxAccessBehavior::className(), |
| 44 | 'rules' => | 44 | 'rules' => |
| 45 | [ | 45 | [ |
| 46 | 'permit/access' => | 46 | 'permit/access' => |
| 1 | +<?php | ||
| 2 | + | ||
| 3 | +namespace common\behaviors; | ||
| 4 | + | ||
| 5 | +use Yii; | ||
| 6 | +use yii\behaviors\AttributeBehavior; | ||
| 7 | +use yii\di\Instance; | ||
| 8 | +use yii\base\Module; | ||
| 9 | +use yii\web\User; | ||
| 10 | +use yii\web\ForbiddenHttpException; | ||
| 11 | + | ||
| 12 | +class ArtBoxAccessBehavior extends AttributeBehavior { | ||
| 13 | + | ||
| 14 | + public $rules=[]; | ||
| 15 | + | ||
| 16 | + private $_rules = []; | ||
| 17 | + | ||
| 18 | + public function events() | ||
| 19 | + { | ||
| 20 | + return [ | ||
| 21 | + Module::EVENT_BEFORE_ACTION => 'interception', | ||
| 22 | + ]; | ||
| 23 | + } | ||
| 24 | + | ||
| 25 | + public function interception($event) | ||
| 26 | + { | ||
| 27 | + if(!isset( Yii::$app->i18n->translations['db_rbac'])){ | ||
| 28 | + Yii::$app->i18n->translations['db_rbac'] = [ | ||
| 29 | + 'class' => 'yii\i18n\PhpMessageSource', | ||
| 30 | + 'sourceLanguage' => 'ru-Ru', | ||
| 31 | + 'basePath' => '@developeruz/db_rbac/messages', | ||
| 32 | + ]; | ||
| 33 | + } | ||
| 34 | + | ||
| 35 | + $route = Yii::$app->getRequest()->resolve(); | ||
| 36 | + | ||
| 37 | + //Проверяем права по конфигу | ||
| 38 | + $this->createRule(); | ||
| 39 | + $user = Instance::ensure(Yii::$app->user, User::className()); | ||
| 40 | + $request = Yii::$app->getRequest(); | ||
| 41 | + $action = $event->action; | ||
| 42 | + | ||
| 43 | + | ||
| 44 | + | ||
| 45 | + | ||
| 46 | + if(!$this->cheсkByRule($action, $user, $request)) | ||
| 47 | + { | ||
| 48 | + | ||
| 49 | + //И по AuthManager | ||
| 50 | + if(!$this->checkPermission($route)){ | ||
| 51 | + if ($user->getIsGuest()) { | ||
| 52 | + $user->loginRequired(); | ||
| 53 | + } else { | ||
| 54 | + throw new ForbiddenHttpException(Yii::t('db_rbac','Недостаточно прав')); | ||
| 55 | + } | ||
| 56 | + } | ||
| 57 | + | ||
| 58 | + } | ||
| 59 | + } | ||
| 60 | + | ||
| 61 | + protected function createRule() | ||
| 62 | + { | ||
| 63 | + | ||
| 64 | + foreach($this->rules as $controller => $rule) | ||
| 65 | + { | ||
| 66 | + | ||
| 67 | + foreach ($rule as $singleRule) { | ||
| 68 | + if (is_array($singleRule)) { | ||
| 69 | + $option = [ | ||
| 70 | + 'controllers' => [$controller], | ||
| 71 | + 'class' => 'yii\filters\AccessRule' | ||
| 72 | + ]; | ||
| 73 | + $this->_rules[] = Yii::createObject(array_merge($option, $singleRule)); | ||
| 74 | + | ||
| 75 | + } | ||
| 76 | + } | ||
| 77 | + } | ||
| 78 | + } | ||
| 79 | + | ||
| 80 | + protected function cheсkByRule($action, $user, $request) | ||
| 81 | + { | ||
| 82 | + | ||
| 83 | + foreach ($this->_rules as $rule) { | ||
| 84 | + | ||
| 85 | + if ($rule->allows($action, $user, $request)) | ||
| 86 | + return true; | ||
| 87 | + } | ||
| 88 | + return false; | ||
| 89 | + } | ||
| 90 | + | ||
| 91 | + protected function checkPermission($route) | ||
| 92 | + { | ||
| 93 | + //$route[0] - is the route, $route[1] - is the associated parameters | ||
| 94 | + | ||
| 95 | + $routePathTmp = explode('/', $route[0]); | ||
| 96 | + $routeVariant = array_shift($routePathTmp); | ||
| 97 | + if(Yii::$app->user->can($routeVariant, $route[1])) | ||
| 98 | + return true; | ||
| 99 | + | ||
| 100 | + foreach($routePathTmp as $routePart) | ||
| 101 | + { | ||
| 102 | + $routeVariant .= '/'.$routePart; | ||
| 103 | + | ||
| 104 | + if(Yii::$app->user->can($routeVariant, $route[1])) | ||
| 105 | + return true; | ||
| 106 | + } | ||
| 107 | + | ||
| 108 | + return false; | ||
| 109 | + } | ||
| 110 | + | ||
| 111 | +} | ||
| 0 | \ No newline at end of file | 112 | \ No newline at end of file |
common/components/Mailer.php deleted
| 1 | -<?php | ||
| 2 | - | ||
| 3 | -namespace common\components; | ||
| 4 | -use PHPMailer\PHPMailer\PHPMailer; | ||
| 5 | -use yii\base\Widget; | ||
| 6 | - | ||
| 7 | -class Mailer extends Widget{ | ||
| 8 | - public $message; | ||
| 9 | - public $email; | ||
| 10 | - public $text; | ||
| 11 | - public $subject; | ||
| 12 | - public $type; | ||
| 13 | - | ||
| 14 | - public function init(){ | ||
| 15 | - | ||
| 16 | - parent::init(); | ||
| 17 | - | ||
| 18 | - } | ||
| 19 | - | ||
| 20 | - public function run(){ | ||
| 21 | - | ||
| 22 | - $mail = new PHPMailer(); | ||
| 23 | - | ||
| 24 | - $mail->IsSMTP(); | ||
| 25 | - | ||
| 26 | - $mail->CharSet = 'UTF-8'; | ||
| 27 | - $mail->Username = "dockdep@gmail.com"; | ||
| 28 | - $mail->Password = "k0l0b04eg"; | ||
| 29 | - $mail->SetFrom('dockdep@gmail.com'); | ||
| 30 | - $mail->Subject = $this->subject; | ||
| 31 | - $mail->MsgHTML('test'); | ||
| 32 | - $address = "dockdep@gmail.com"; | ||
| 33 | - $mail->AddAddress($address); | ||
| 34 | - $mail->AddAddress($this->email); | ||
| 35 | - if(!$mail->send()) { | ||
| 36 | - | ||
| 37 | - \Yii::$app->getSession()->setFlash('error', 'Mailer Error: ' . $mail->ErrorInfo); | ||
| 38 | - return 'Mailer Error: ' . $mail->ErrorInfo; | ||
| 39 | - } else { | ||
| 40 | - | ||
| 41 | - \Yii::$app->getSession()->setFlash('success', 'Мастер-приемщик свяжется с вами в ближайшее время'); | ||
| 42 | - return 'Message has been sent'; | ||
| 43 | - } | ||
| 44 | - } | ||
| 45 | - | ||
| 46 | -} | ||
| 47 | - |
| 1 | +<?php | ||
| 2 | + | ||
| 3 | +namespace common\widgets; | ||
| 4 | + | ||
| 5 | +use yii\base\Widget; | ||
| 6 | + | ||
| 7 | +class Mailer extends Widget{ | ||
| 8 | + public $message; | ||
| 9 | + public $email; | ||
| 10 | + public $text; | ||
| 11 | + public $subject; | ||
| 12 | + public $type; | ||
| 13 | + | ||
| 14 | + public function init(){ | ||
| 15 | + | ||
| 16 | + parent::init(); | ||
| 17 | + | ||
| 18 | + } | ||
| 19 | + | ||
| 20 | + public function run(){ | ||
| 21 | + | ||
| 22 | +// $mail = new \PHPMailer(); | ||
| 23 | +// | ||
| 24 | +// $mail->IsSMTP(); | ||
| 25 | +// | ||
| 26 | +// $mail->CharSet = 'UTF-8'; | ||
| 27 | +// $mail->Username = "dockdep@gmail.com"; | ||
| 28 | +// $mail->Password = "k0l0b04eg@"; | ||
| 29 | +// $mail->SetFrom('dockdep@gmail.com'); | ||
| 30 | +// $mail->Subject = $this->subject; | ||
| 31 | +// $mail->MsgHTML('test'); | ||
| 32 | +// $address = "dockdep@gmail.com"; | ||
| 33 | +// $mail->AddAddress($address); | ||
| 34 | +// $mail->AddAddress($this->email); | ||
| 35 | +// if(!$mail->send()) { | ||
| 36 | +// | ||
| 37 | +// \Yii::$app->getSession()->setFlash('error', 'Mailer Error: ' . $mail->ErrorInfo); | ||
| 38 | +// return 'Mailer Error: ' . $mail->ErrorInfo; | ||
| 39 | +// } else { | ||
| 40 | +// | ||
| 41 | +// \Yii::$app->getSession()->setFlash('success', 'Мастер-приемщик свяжется с вами в ближайшее время'); | ||
| 42 | +// return 'Message has been sent'; | ||
| 43 | +// } | ||
| 44 | + } | ||
| 45 | + | ||
| 46 | +} | ||
| 47 | + |
composer.json
| @@ -35,7 +35,6 @@ | @@ -35,7 +35,6 @@ | ||
| 35 | "unclead/yii2-multiple-input": "~1.0", | 35 | "unclead/yii2-multiple-input": "~1.0", |
| 36 | "codeception/codeception":"*", | 36 | "codeception/codeception":"*", |
| 37 | "phpmailer/phpmailer": "^5.2", | 37 | "phpmailer/phpmailer": "^5.2", |
| 38 | - "league/oauth2-client": "^1.3", | ||
| 39 | "kartik-v/yii2-grid": "@dev", | 38 | "kartik-v/yii2-grid": "@dev", |
| 40 | "kartik-v/yii2-mpdf": "@dev", | 39 | "kartik-v/yii2-mpdf": "@dev", |
| 41 | "kartik-v/yii2-widget-fileinput": "@dev", | 40 | "kartik-v/yii2-widget-fileinput": "@dev", |
frontend/controllers/BasketController.php
| @@ -40,29 +40,36 @@ class BasketController extends Controller | @@ -40,29 +40,36 @@ class BasketController extends Controller | ||
| 40 | $body .= "\n\r"; | 40 | $body .= "\n\r"; |
| 41 | 41 | ||
| 42 | if ($modelOrder->load(Yii::$app->request->post()) && $modelOrder->save()) { | 42 | if ($modelOrder->load(Yii::$app->request->post()) && $modelOrder->save()) { |
| 43 | + $productV = $_POST['ProductVariant']; | ||
| 44 | + | ||
| 43 | foreach ($_POST['ProductVariant'] as $index=>$row) { | 45 | foreach ($_POST['ProductVariant'] as $index=>$row) { |
| 44 | - $modelOrdersProducts = new OrdersProducts(); | 46 | + $modelOrdersProducts = new OrdersProducts(); |
| 45 | $mod_id = $row['id']; | 47 | $mod_id = $row['id']; |
| 46 | unset($row['id']); | 48 | unset($row['id']); |
| 47 | - $data['OrdersProducts'] = $row; | 49 | + $data['OrdersProducts'] = $row; |
| 48 | $data['OrdersProducts']['mod_id'] = $mod_id; | 50 | $data['OrdersProducts']['mod_id'] = $mod_id; |
| 49 | - $data['OrdersProducts']['order_id'] = $modelOrder->id; | 51 | + $data['OrdersProducts']['order_id'] = $modelOrder->id; |
| 50 | 52 | ||
| 51 | - $modelOrdersProducts->load($data); | ||
| 52 | - $modelOrdersProducts->save(); | 53 | + $modelOrdersProducts->load($data); |
| 54 | + $modelOrdersProducts->save(); | ||
| 53 | } | 55 | } |
| 54 | if(!Yii::$app->user->id && !empty($modelOrder->email)){ | 56 | if(!Yii::$app->user->id && !empty($modelOrder->email)){ |
| 55 | - $modelUser = new Customer(); | ||
| 56 | - $modelUser->role = 'person'; | ||
| 57 | - $modelUser->username = $modelOrder->email; | ||
| 58 | - $modelUser->name = $modelOrder->name; | ||
| 59 | - $modelUser->phone = $modelOrder->phone; | ||
| 60 | - $modelUser->password = Yii::$app->getSecurity()->generateRandomString(10); | ||
| 61 | - $modelUser->group_id = 2; | ||
| 62 | - $modelUser->save(); | 57 | + $modelUser = new Customer(); |
| 58 | + $modelUser->role = 'person'; | ||
| 59 | + $modelUser->username = $modelOrder->email; | ||
| 60 | + $modelUser->name = $modelOrder->name; | ||
| 61 | + $modelUser->phone = $modelOrder->phone; | ||
| 62 | + $modelUser->password = Yii::$app->getSecurity()->generateRandomString(10); | ||
| 63 | + $modelUser->group_id = 2; | ||
| 64 | + $modelUser->save(); | ||
| 63 | } | 65 | } |
| 66 | + $order = clone $modelOrder; | ||
| 64 | $modelOrder->clearBasket(); | 67 | $modelOrder->clearBasket(); |
| 65 | - return Yii::$app->response->redirect(['basket/success']); | 68 | + |
| 69 | + return $this->render('success',[ | ||
| 70 | + 'order' => $order, | ||
| 71 | + 'variants' => $productV, | ||
| 72 | + ]); | ||
| 66 | } | 73 | } |
| 67 | } | 74 | } |
| 68 | 75 |
frontend/views/basket/success.php
| 1 | <?php | 1 | <?php |
| 2 | use yii\helpers\Url; | 2 | use yii\helpers\Url; |
| 3 | use yii\helpers\Html; | 3 | use yii\helpers\Html; |
| 4 | +use yii\web\View; | ||
| 4 | use yii\widgets\Breadcrumbs; | 5 | use yii\widgets\Breadcrumbs; |
| 5 | use yii\widgets\ActiveForm; | 6 | use yii\widgets\ActiveForm; |
| 6 | 7 | ||
| @@ -8,6 +9,29 @@ $this->title = 'Корзина'; | @@ -8,6 +9,29 @@ $this->title = 'Корзина'; | ||
| 8 | $this->registerMetaTag(['name' => 'description', 'content' => 'Корзина']); | 9 | $this->registerMetaTag(['name' => 'description', 'content' => 'Корзина']); |
| 9 | $this->registerMetaTag(['name' => 'keywords', 'content' => 'Корзина']); | 10 | $this->registerMetaTag(['name' => 'keywords', 'content' => 'Корзина']); |
| 10 | 11 | ||
| 12 | +if(isset($variants) && isset($order)){ | ||
| 13 | + $orderData = " | ||
| 14 | + ga('require', 'ecommerce'); | ||
| 15 | + ga('ecommerce:addTransaction', { | ||
| 16 | + 'id': $order->id, // где ID - транзакции, обязательно | ||
| 17 | + });"; | ||
| 18 | + | ||
| 19 | + foreach($variants as $index=>$row){ | ||
| 20 | + $orderData .= " | ||
| 21 | + ga('ecommerce:addItem', { | ||
| 22 | + 'id': {$row['id']}, // ID - транзакции, обязательно | ||
| 23 | + 'name': {$row['name']}, // Имя товара | ||
| 24 | + 'price': {$row['price']}, // Цена товара | ||
| 25 | + 'quantity': {$row['count']} // Количество | ||
| 26 | + }); | ||
| 27 | + ga('ecommerce:send');"; | ||
| 28 | + } | ||
| 29 | + | ||
| 30 | + $this->registerJs ($orderData, View::POS_HEAD); | ||
| 31 | + | ||
| 32 | +} | ||
| 33 | + | ||
| 34 | + | ||
| 11 | ?> | 35 | ?> |
| 12 | <nav class="bread-crumbs"> | 36 | <nav class="bread-crumbs"> |
| 13 | <?= Breadcrumbs::widget([ | 37 | <?= Breadcrumbs::widget([ |
frontend/views/layouts/main.php
| @@ -64,6 +64,16 @@ $this->registerJsFile (Yii::$app->request->baseUrl . '/js/fix_height.js', ['posi | @@ -64,6 +64,16 @@ $this->registerJsFile (Yii::$app->request->baseUrl . '/js/fix_height.js', ['posi | ||
| 64 | }); | 64 | }); |
| 65 | ", View::POS_READY); | 65 | ", View::POS_READY); |
| 66 | 66 | ||
| 67 | +$this->registerJs(" | ||
| 68 | +(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ | ||
| 69 | + (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), | ||
| 70 | +m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) | ||
| 71 | +})(window,document,'script','https://www.google-analytics.com/analytics.js','ga'); | ||
| 72 | + | ||
| 73 | +ga('create', 'UA-75674711-1', 'auto'); | ||
| 74 | +ga('send', 'pageview'); | ||
| 75 | + ", View::POS_BEGIN); | ||
| 76 | + | ||
| 67 | // AssetBundle jcarousel :D [close] | 77 | // AssetBundle jcarousel :D [close] |
| 68 | 78 | ||
| 69 | ?> | 79 | ?> |
frontend/web/css/style.dev.css
| 1 | html,form, | 1 | html,form, |
| 2 | -body { padding:0;margin:0; | ||
| 3 | - font-family: 'Roboto';font-size:14px;color:#333;height:100%; | 2 | +body { |
| 3 | + padding:0; | ||
| 4 | + margin:0; | ||
| 5 | + font-family: 'Roboto'; | ||
| 6 | + font-size:14px;color:#333;height:100%; | ||
| 4 | } | 7 | } |
| 5 | h1,h2,h3{margin:0px;padding:0px 0px 10px 0px;} | 8 | h1,h2,h3{margin:0px;padding:0px 0px 10px 0px;} |
| 6 | .fl{float:left;} | 9 | .fl{float:left;} |